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,以获取分配的用户模式地址。
分配的属性
以这种方式创建的分配必须具有以下属性:
- 只允许在系统内存段中进行分配。
- 分配必须以共享的方式创建。
- 分配不能使用现有的系统内存作为后备存储。
- UMD 可以对常规分配执行任何操作。
- UMD 调用 D3DKMTLock2,以获取指向分配的指针。
- UMD 调用 D3DKMTMakeResident,以使得 GPU 可访问该分配。

777

被折叠的 条评论
为什么被折叠?



