当前位置: 首页 > article >正文

Windows 图形显示驱动开发-WDDM 2.9功能- 支持跨适配器资源扫描 (CASO)(一)

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 层复制支持:向/从跨适配器资源复制


CrossAdapterResource (通过D3DKMT_WDDM_1_3_CAPS中的SupportCrossAdapterResource 位由图形内核公开给用户模式​

第 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 起,这些格式为:
  1. DXGI_FORMAT_R16G16B16A16_FLOAT
  2. DXGI_FORMAT_R10G10B10A2_UNORM
  3. DXGI_FORMAT_R8G8B8A8_UNORM
  4. DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  5. DXGI_FORMAT_B8G8R8A8_UNORM
  6. DXGI_FORMAT_B8G8R8A8_UNORM_SRGB

如果驱动程序支持扫描更多纹理格式的跨适配器资源,则它还必须支持根据层支持要求从这些格式进行纹理处理。

如果驱动程序支持扫描更多纹理格式的跨适配器资源,则它还必须支持根据层支持要求从这些格式进行纹理处理。

备注:

DXGI 运行时查询驱动程序以获取其 CrossAdapterResourceScanout 支持。 如果受支持,则表示堆栈会进入单一复制路径。 因此,声明支持 CrossAdapterResourceScanout 的驱动程序需要支持 DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI。 此外,对于上述最低规范的跨适配器主节点,它还必须支持所有相关的与演示文稿相关的 DDI。 例如: pfnCreateResource、 pfnCheckMultiplaneOverlaySupport 和 pfnPresentMultiplaneOverlay/pfnPresent1。 有关详细信息,请参阅 多平面覆盖支持。 有关退出 CASO 的详细信息,请参阅 用于呈现优化的驱动程序 DDI.

 这两个层都附带用于验证的 HLK 测试 。


http://www.kler.cn/a/595579.html

相关文章:

  • 传感器研习社:Swift Navigation与意法半导体(STMicroelectronics)合作 共同推出端到端GNSS汽车自动驾驶解决方案
  • ES、Kibana一键式部署脚本执行文件,外加IK分词器和拼音分词器
  • Flink SQL 技术原理详解
  • 使用 Google Firebase 控制台和 ESP8266 NodeMCU 的物联网控制 LED
  • JavaScript实现一个函数,将数组扁平化(flatten),即把多维数组转为一维数组。
  • Visual Studio Code 连接 SAP ERP 系统
  • SpringBoot实现异步调用的方法
  • 北斗导航 | 北斗三号区域短报文相关知识总结
  • 一份针对零基础学习AI Agent详细学习计划
  • 【Ratis】Ratis Streaming概览
  • numpy学习笔记13:np.random.choice和np.cumsum的解释
  • Docker 速通(总结)
  • 【Unity基础】Unity中角色动画的三种实现方式
  • DAY13 线程池、死锁、线程状态、计时器
  • 如何在ubuntu上安装zookeeper
  • 在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索
  • w265基于Spring Boot库存管理系统
  • 【C++】static、内部类
  • Vue.js 过滤器(Filters):简化文本格式化的利器
  • 测试Claude3.7 sonnet画蛋白质