Windows 图形显示驱动开发-WDDM 3.1- 与 KMD 共享后备存储

WDDM 图形分配和后备存储

WDDM 模型中的每个图形分配都有一个后备存储。 当 UMD 调用 Dxgkrnl 的 D3DKMTCreateAllocation 函数时,会创建图形分配。 UMD 为此分配传递专用数据,Dxgkrnl 通过调用 DxgkddiCreateAllocation 将其传递给 KMD。 KMD 将所需的分配标志返回给 Dxgkrnl。

检查功能可用性

为检查后备存储共享功能是否可用,KMD 必须首先调用以下回调之一,且将 FeatureId 设置为DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD:

  • DXGKCB_QUERYFEATURESUPPORT(从 WDDM 2.9 开始提供)
  • DXGKCB_ISFEATUREENABLED

只有当回调成功并且 Enable 设置为 TRUE 时,才能使用该功能。

DXGK_FEATURE_ID 枚举值标识 WDDM 功能。
语法
typedef enum _DXGK_FEATURE_ID {
  DXGK_FEATURE_HWSCH,
  DXGK_FEATURE_HWFLIPQUEUE,
  DXGK_FEATURE_LDA_GPUPV,
  DXGK_FEATURE_KMD_SIGNAL_CPU_EVENT,
  DXGK_FEATURE_USER_MODE_SUBMISSION,
  DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD,
  DXGK_FEATURE_SAMPLE,
  DXGK_FEATURE_PAGE_BASED_MEMORY_MANAGER,
  DXGK_FEATURE_KERNEL_MODE_TESTING,
  DXGK_FEATURE_64K_PT_DEMOTION_FIX,
  DXGK_FEATURE_GPUPV_PRESENT_HWQUEUE,
  DXGK_FEATURE_GPUVAIOMMU,
  DXGK_FEATURE_NATIVE_FENCE,
  DXGK_FEATURE_QUERYSTATISTICS_EXTENSIONS
} DXGK_FEATURE_ID;
常数

言论
WDDM 功能由其功能 ID(DXGK_FEATURE_ID)标识,由以下组成:

  • 标识功能的类别 ID 的 DXGK_FEATURE_CATEGORY 值。 此信息存储在 DXGK_FEATURE_ID的前四位。
  • 标识特征本身的 DXGK_DRIVER_FEATURE 值。

由于原始功能实现未对功能 ID 进行分类,因此必须保留类别 0 中定义的少数功能 ID 以实现向后兼容性,但不是驱动程序功能。 这适用于以下功能 ID:

  • DXGK_FEATURE_64K_PT_DEMOTION_FIX
  • DXGK_FEATURE_GPUPV_PRESENT_HWQUEUE
  • DXGK_DRIVER_FEATURE_RESERVED_1到DXGK_DRIVER_FEATURE_RESERVED_25范围内的所有功能 ID

这些功能 ID 表示已在旧版 OS 版本中定义或实现的功能,并且现有软件检查必须能够继续由这些 ID 查询这些功能。 无需驱动程序即可实现对其中任何功能 ID 的支持。

功能流

一旦 KMD 成功确定启用了该功能,UMD 就会调用 D3DKMTCreateAllocation 来创建共享的 CPU 可见分配,并通过专用数据指示 KMD 必须与 KMD 共享该分配。 在此调用过程中,会发生以下情况:

  • 当 OS 调用 KMD 的 DxgkddiCreateAllocation 回调时,KMD 设置 DXGK_ALLOCATIONINFOFLAGS2 的 ShareBackingStoreWithKmd 标志。 如果未启用该功能,则 KMD 不得设置 ShareBackingStoreWithKmd 标志。
  • Dxgkrnl 调用 DXGKDDI_SETALLOCATIONBACKINGSTORE DDI,为 KMD 提供分配后备存储的内核模式地址。
  • UMD 调用 D3DKMTLock2,以获取分配的用户模式地址。

 分配的属性

以这种方式创建的分配必须具有以下属性:

  1. 只允许在系统内存段中进行分配。
  2. 分配必须以共享的方式创建。
  3. 分配不能使用现有的系统内存作为后备存储。
  4. UMD 可以对常规分配执行任何操作。
  • UMD 调用 D3DKMTLock2,以获取指向分配的指针。
  • UMD 调用 D3DKMTMakeResident,以使得 GPU 可访问该分配。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员王马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值