window 显示驱动开发-微型端口程序的初始化(二)

初始化内存段的使用

内存段在 Windows Vista 和更高版本的显示驱动程序模型的上下文中, (WDDM) ,描述图形处理单元 (GPU) 视频内存管理器的地址空间。 内存段通用化和虚拟化视频内存资源。 内存段根据硬件支持的内存类型进行配置, (例如帧缓冲区内存或系统内存孔径) 。

为了初始化它如何使用内存段,Microsoft DirectX 图形内核子系统 (Dxgkrnl.sys) 调用显示微型端口驱动程序的 DxgkDdiQueryAdapterInfo 函数。 若要指示显示微型端口驱动程序从 DxgkDdiQueryAdapterInfo 调用返回有关内存段的信息,图形子系统在 DXGKARG_QUERYADAPTERINFO 结构的 Type 成员中指定DXGKQAITYPE_QUERYSEGMENT或DXGKQAITYPE_QUERYSEGMENT3值。

形子系统调用显示微型端口驱动程序的 DxgkDdiQueryAdapterInfo 函数两次以获取段信息。 第一次调用 DxgkDdiQueryAdapterInfo 检索驱动程序支持的段数,第二次调用检索有关每个段的详细信息。 在对 DxgkDdiQueryAdapterInfo 的调用中,驱动程序将 DXGKARG_QUERYADAPTERINFO 的 pOutputData 成员指向在 Windows 显示驱动程序模型 ( WDDM) 1.2) 之前的驱动程序版本 (填充DXGK_QUERYSEGMENTOUT结构,或指向 WDDM 1.2 及更高版本驱动程序 (填充的DXGK_QUERYSEGMENTOUT3结构) 。

在第一次调用中,WDDM 1.2 及更高版本的驱动程序版本DXGK_QUERYSEGMENTOUT (的 pSegmentDescriptor 成员设置为 NULL,该成员适用于 WDDM 1.2 及更高版本的驱动程序) ) 或DXGK_QUERYSEGMENTOUT3 (。 驱动程序应仅使用它支持的段类型数填充 DXGK_QUERYSEGMENTOUT 或 DXGK_QUERYSEGMENTOUT3 的 NbSegment 成员。 此数字还指示 WDDM 1.2 之前驱动程序版本的未填充 DXGK_SEGMENTDESCRIPTOR (数,) 或 DXGK_SEGMENTDESCRIPTOR3 (WDDM 1.2 及更高版本驱动程序) 从第二次调用 DxgkDdiQueryAdapterInfo 所需的结构。

一、核心概念与初始化流程

1.1 内存段定义

功能定位:GPU虚拟地址空间的物理内存抽象,支持:

  • 帧缓冲内存(VRAM)
  • 系统内存孔径(AGP/GART)
  • 设备本地内存(DEVICE_LOCAL)

版本演进:

WDDM版本数据结构关键增强
1.0-1.1DXGK_SEGMENTDESCRIPTOR基础段属性定义
1.2+DXGK_SEGMENTDESCRIPTOR3支持UMA架构、缓存策略控制位

 1.2 双阶段初始化协议

sequenceDiagram
    participant Dxgkrnl
    participant Miniport
    Dxgkrnl->>Miniport: 首次调用DxgkDdiQueryAdapterInfo
    Note over Miniport: 仅填充NbSegment计数
    Dxgkrnl->>Miniport: 第二次调用DxgkDdiQueryAdapterInfo
    Note over Miniport: 填充完整段描述符数组

二、关键数据结构详解

2.1 输入结构体

typedef struct _DXGK_QUERYSEGMENTIN {
    PHYSICAL_ADDRESS AgpApertureBase;  // AGP基址
    SIZE_T           AgpApertureSize;  // AGP大小
    ULONG            AgpFlags;         // 标志位
} DXGK_QUERYSEGMENTIN;


AGP检测规则:若AgpApertureSize==0,禁止声明DXGK_MEMORY_AGP段类型

2.2 输出结构体(WDDM 1.2+)

typedef struct _DXGK_SEGMENTDESCRIPTOR3 {
    D3DGPU_PHYSICAL_ADDRESS BaseAddress;  // 物理基址
    SIZE_T                  Size;         // 段大小
    ULONG                   Flags;        // 见下表
    DXGK_SEGMENTID          SegmentId;    // 段标识符
} DXGK_SEGMENTDESCRIPTOR3;

段标志位掩码:

标志值含义硬件要求
DXGK_SEGMENT_FLAGS_CACHED支持CPU缓存一致性必须实现WB缓存策略
DXGK_SEGMENT_FLAGS_64BIT支持64位地址访问GPU需具备PAE支持
DXGK_SEGMENT_FLAGS_PAGABLE允许分页到系统内存UMA架构必
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值