window显示驱动开发—混合系统 DDI 和 dList DLL 支持
从 Windows 8.1(WDDM 1.3)开始,引入了对混合系统上跨适配器资源的支持。 可以使用以下用户模式和内核模式函数、结构和枚举:
- D3D10_DDI_RESOURCE_MISC_FLAG 枚举
- D3DDDI_RESOURCEFLAGS2 结构
- D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 结构
- D3DKMDT_GDISURFACEDATA 结构
- D3DKMDT_GDISURFACETYPE 枚举
- DXGK_DRIVERCAPS 结构
- DXGK_VIDMMCAPS 结构
- pfnQueryDListForApplication1 函数
从 Windows Server 2022(WDDM 2.9)开始引入了 跨适配器资源扫描 (CASO)功能。 为 CASO 添加了以下附加支持:
- pfnQueryDListForApplication2 函数(已添加)
- D3DDDI_DLIST_QUERY_RESULT 枚举(新增)
- D3DDDI_DLIST_QUERY_DECISION_FACTOR 枚举(已添加)
- NoHybridDiscreteDListDllSupport 已添加到 DXGK_DRIVERCAPS 结构
- CrossAdapterResourceTexture 和 CrossAdapterResourceScanout 已添加到 DXGK_VIDMMCAPS 结构中
备注
在 Windows Server 2022(WDDM 2.9)及更高版本的作系统上,混合系统上的用户模式显示驱动程序(UMD)必须支持 pfnQueryDListForApplication2 DDI,这将取代 pfnQueryDListForApplication1,而不管它是否实现对 CASO 的支持。
配置 dList DLL。
dList 是一个应用程序列表,这些应用程序需要跨适配器共享图面才能在离散 GPU 上实现高性能呈现。
离散 GPU 的 UMD 安装一个单独的小型 dList DLL,用于导出其 pfnQueryDListForApplication2 函数。 操作系统本身不会决定应用程序应在哪个 GPU 上运行。 相反,Direct3D 运行时在 Direct3D 初始化期间最多调用 pfnQueryDListForApplication2 一次。
驱动程序必须查询进程信息的 up-to日期列表,以确定进程是否需要离散 GPU 而不是集成 GPU 的增强性能。
为了获得最佳性能,DLL 应:
- 大小小于 200 KB
- 将分配保留为最小值
- 能够在 4 毫秒内从 pfnQueryDListForApplication2 返回。
注册 dList DLL
UMD 在其 INF 文件的注册表项 UserModeDListDriverName 和 UserModeDListDriverNameWow 下提供了小 dList DLL 的名称,其中后者位于 Wow64 注册表项下。 下面是 INF 代码示例:
[Xxx_SoftwareDeviceSettings]
...
HKR,, UserModeDListDriverName, %REG_MULTI_SZ%, dlistumd.dll
HKR,, UserModeDListDriverNameWow, %REG_MULTI_SZ%, dlistumdwow.dll