CASO 前性能 (双复制路径)
从 Windows 8.1 (WDDM 1.3) 开始,D3D9 和 DXGI 应用程序能够在多适配器配置(如混合系统)上使用跨适配器演示支持。 借助此支持,呈现是在呈现适配器 (通常是离散 GPU) 上完成的,然后完成两个副本,将内容获取到显示适配器 (通常是集成 GPU) ,以便扫描到显示器。
- 复制 1 从呈现适配器资源复制到跨适配器资源。
- 复制 2 从跨适配器资源复制到显示适配器资源。
这些副本可能会限制应用的性能,尤其是针对低延迟而优化的应用。
使用 CASO 优化翻转演示文稿模型 (单复制路径)
Windows Server 2022 (WDDM 2.9) 及更高版本的驱动程序可以声明对适当的跨适配器资源层的支持,从而允许系统的表示堆栈优化跨适配器呈现。 无论设备配置如何,驱动程序都必须根据自己的适配器功能声明对此功能的支持,以便功能值在所有适用的硬件配置之间缩放。 此缩放包括但不限于具有动态附加其他外部 GPU 的单个 GPU 设备。
如果显示适配器支持 CASO,则系统仅执行从呈现适配器图面到跨适配器图面的第一次复制,然后直接从跨适配器图面扫描。 此功能可减少处理、带宽、电源和延迟。
CASO 功能是为翻转演示模型的 DXGI 运行时实现的。
CASO 的 DDI 更改和添加
指示对跨适配器资源的层支持
DXGI 实现对跨适配器资源的三层支持:
- 向/从跨适配器资源复制 (最低层)
- 从跨适配器资源进行纹理化
- 扫描跨适配器资源 (最高层)
每个较高层支持都必须保证其下面的层 () 得到支持。 例如,若要声明对跨适配器资源的扫描支持,驱动程序还必须支持纹理和复制。
驱动程序通过在 DXGK_DRIVERCAPS 中设置以下 DXGK_VIDMMCAPS 位字段值来声明 对每个层的支持。MemoryManagementCaps:
层 | 层含义 | DXGK_VIDMMCAPS值 |
第 1 层 | 复制支持:向/从跨适配器资源复制 | |
第 2层 | 纹理支持:跨适配器资源的纹理) | CrossAdapterResourceTexture (包括对着色器资源视图、无序访问视图和呈现目标) |
第 3层 | CASO 支持:从跨适配器资源进行扫描 | CrossAdapterResourceScanout |
如果图形内核未以超集方式指示对三个层的支持,则适配器启动失败。 例如,如果设置了 CrossAdapterResourceTexture ,则必须设置 CrossAdapterResource 。
第 1 层支持要求
跨适配器资源的定义仍与用于 WDDM 1.3 第 1 层复制支持的相同。
第 2 层支持要求
这些要求类似于 D3D12 用户模式驱动程序 CrossAdapterRowMajorTextureSupported 功能 (上限) ;也就是说,设备支持着色器资源视图、无序访问视图和呈现跨适配器行主纹理的目标视图。 但是,尽管 D3D12 的 CrossAdapterRowMajorTextureSupported 需要支持所有相关纹理格式,但此第 2 层上限至少只需要对第 3 层支持要求中列出的 DisplayScanOut 格式的支持。
由于 D3D12 的 cap 是此第 2 层上限的超集, 因此 D3D12CreateDevice 还会验证是否设置了内核驱动程序的 CrossAdapterResourceTexture cap(如果设置了 其 CrossAdapterRowMajorTextureSupported cap),并且如果未设置,则无法创建设备。
第 3 层支持要求
系统必须能够对以下最低规范的跨适配器资源执行支持的翻转功能(如 DXGK_FLIPCAPS 中驱动程序声明的那样):
- 跨适配器主缓冲区大小为 1920 x 1080 或更小
- 任何受支持的 DisplayScanOut 格式的缓冲区像素格式。 自 Windows 10 版本 20H1 起,这些格式为:
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
如果驱动程序支持扫描更多纹理格式的跨适配器资源,则它还必须支持根据层支持要求从这些格式进行纹理处理。
如果驱动程序支持扫描更多纹理格式的跨适配器资源,则它还必须支持根据层支持要求从这些格式进行纹理处理。
备注:
DXGI 运行时查询驱动程序以获取其 CrossAdapterResourceScanout 支持。 如果受支持,则表示堆栈会进入单一复制路径。 因此,声明支持 CrossAdapterResourceScanout 的驱动程序需要支持 DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI。 此外,对于上述最低规范的跨适配器主节点,它还必须支持所有相关的与演示文稿相关的 DDI。 例如: pfnCreateResource、 pfnCheckMultiplaneOverlaySupport 和 pfnPresentMultiplaneOverlay/pfnPresent1。 有关详细信息,请参阅 多平面覆盖支持。 有关退出 CASO 的详细信息,请参阅 用于呈现优化的驱动程序 DDI.
这两个层都附带用于验证的 HLK 测试 。