对 DxgkDdiCreateProcess 的更改
需要更新 KMD DxgkDdiCreateProcess 函数以支持 VM 工作进程和 VM 进程。 以下字段已被添加到 DXGKARG_CREATEPROCESS 结构中:
- hKmdVmWorkerProcess
- ProcessNameLength
- pProcessName
在 DXGK_CREATEPROCESSFLAGS 中添加了以下标志,以支持 VM 工作进程和 VM 进程:
- VirtualMachineProcess
- VirtualMachineWorkerProcess
DxgkDdiSetVirtualMachineData
DxgkDdiSetVirtualMachineData 被添加到 Dxgkrnl,以便将有关虚拟机的信息传递给 KMD。
向主机发送异步 VM 总线消息
从来宾 OS 中的 Dxgkrnl 发送到主机的某些信息是异步的。 这种方法提高了来宾中高频 Dxgkrnl API 调用的性能。 向主机发送每条同步 VM 总线消息的开销可能会很高。
异步消息包括:
- D3DKMTSubmitCommand
- D3DKMTSubmitCommandToHardwareQueue
- D3DKMTSignalSynchronizationObjectFromGpu
- D3DKMTWaitForSynchronizationObjectFromGpu
GPU-PV 支持 LDA
GPU-PV 支持联动显示适配器(LDA)。 为确保一致的实现并支持将来可能将 LDA 支持反向移植到较旧的 Windows 版本,KMD 需要通过调用 DxgkCbIsFeatureEnabled(DXGK_FEATURE_LDA_GPUPV) 来检查 GPU-PV 中的 LDA 支持。 如果函数成功并返回“已启用”,则启用支持。 如果 KMD 不调用此回调,Dxgkrnl 假定 KMD 不支持 GPU-PV 中的 LDA。
如果 OS 支持该功能,则由驱动程序在用户模式下启用 LDA。 如果驱动程序在用户模式下启用 LDA,则应按如下所示执行此作。
运行时 | LDA 状态 |
D3D12 之前的运行时 | 如果支持 DXGK_FEATURE_LDA_GPUPV,且来宾 OS 为 Windows 11 版本 22H2 (WDDM 3.1) 或更高版本,则启用。 |
非 DirectX 运行时 (Windows) | 如果支持 DXGK_FEATURE_LDA_GPUPV,且来宾 OS 为 Windows 11 版本 22H2 (WDDM 3.1) 或更高版本,则启用。 UMD 可以调用 D3DKMTQueryAdapterInfo(KMTQAITYPE_PHYSICALADAPTERCOUNT)并在返回大于 1 的物理适配器数时启用 LDA,而不是检查 OS 版本。 |
D3D12 运行时 (Windows) | 启用。 |
Linux(d3d12 和非 DX 运行时) | 如果支持 DXGK_FEATURE_LDA_GPUPV,则启用。 |
使用小于 DXGKDDI_INTERFACE_VERSION_WDDM3_0 的接口版本编译的驱动程序不会检查 DXGK_FEATURE_LDA_GPUPV。 这些驱动程序仍可为 Linux 运行时启用 LDA。