与 KMD 共享后备存储

从 Windows 11 版本 22H2 开始,对 WDDM API 进行了扩展,允许从内核模式驱动程序 (KMD) 访问图形分配后备存储。 使用此 API,用户模式驱动程序 (UMD) 和 KMD 都可以访问相同的分配内存。 当 UMD 在主机上运行或在使用 GPU 半虚拟化 (GPU-PV) 的虚拟机上运行时,可以使用此功能。

此功能已向后移植到 Windows 10 版本 20H1。 DDI 适用于 WDDM 3.1 或更高版本的驱动程序。

WDDM 图形分配和后备存储

WDDM 模型中的每个图形分配都有一个后备存储,这是一个提交的内存缓冲区,当分配内容不在视频内存中时,它会保存分配内容。

通过调用 D3DKMTCreateAllocation 创建图形分配。 UMD 为此分配传递专用数据,Dxgkrnl 通过调用 DXGKDDI_CREATEALLOCATION 将其传递给 KMD。 KMD 将所需的分配标志返回给 Dxgkrnl

检查功能可用性

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

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

功能流

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

分配的属性

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

  • 只允许在系统内存段中进行分配。
  • 分配必须以共享的方式创建。
  • 分配不能使用现有的系统内存作为后备存储。
  • UMD 可以对常规分配执行任何操作。