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

Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(八)

适配器启动时间

驱动程序启动时,需要响应 OS 的轮询请求。 驱动程序可以通过尝试通信来发现多路复用器是否切换到了它们,但这可能会很耗时或不可靠。 作为 GPU 启动序列的一部分,OS 会调用 DxgkDdiDisplayMuxUpdateState DDI,以显示连接到多路复用器的每个目标,并指示是否已切换到该目标。

驱动程序启动时,需要响应 OS 的轮询请求。 驱动程序可以尝试通过与 OS 通信来发现是否已将多路复用器切换到其 GPU,但这可能会很耗时或不可靠。

取而代之的是,作为 GPU 启动序列的一部分,OS 会为每个连接到多路复用器的目标调用 DxgkDdiDisplayMuxUpdateState 并指示多路复用器是否已切换到该目标。 在调用任何轮询 DDI 之前,OS会向驱动程序报告多路复用器是否已切换到驱动程序的 GPU。

ADS 驱动程序继续以相同方式向 OS 报告内部面板,OS 调用 DxgkDdiQueryAdapterInfo(DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR2) 来查询内部面板的详细信息。 对于连接到多路复用器的任何目标,驱动程序需要确保 DXGK_CHILD_CAPABILITIES.HpdAwareness 设置为 HpdAwarenessInterruptible。

D0 转换

每当连接了多路复用器的 GPU 从低功耗状态返回到电源开启状态时,OS 都会调用 DxgkDdiDisplayMuxUpdateState 来告诉驱动程序多路复用器是连接到了目标 GPU 还是切换到了其他 GPU。

启动顺序

下面的启动序列重点介绍了 ADS 特定的方面。 在此序列中,系统启动时:

  • 连接到多路复用器的 iGPU。
  • 用户重启前的最后配置是多路复用器连接到 dGPU。

启动序列本质上是异步的,因此此序列仅供示例之用。

  1. 系统开机,iGPU 通过多路复用器与面板连接。
  2. iGPU 会在面板上显示启动屏幕。
  3. Windows 加载并在内部 lid 上显示启动动画。
  4. 由于 iGPU 和 dGPU 上都有 _DEP 功能,OS 的多路复用器驱动程序会在 GPU 驱动程序之前启动。 多路复用器驱动程序使用 ACPI 调用来确保多路复用器配置正确。 多路复用器驱动程序验证 ACPI 多路复用器的实现是否符合 ADS 要求。
  5. Dxgkrnl 为 iGPU 调用 DxgkDdiAddDevice。
  6. Dxgkrnl 为 iGPU 调用 DxgkDdiQueryInterface(DXGK_DISPLAYMUX_INTERFACE)。 即使当前系统不支持 ADS,如果系统支持 ADS,驱动程序也会返回其接口。
  7. Dxgkrnl 调用 DxgkDdiDisplayMuxGetDriverSupportLevel 以获取驱动器的 ADS 支持级别。
  8. Dxgkrnl 调用 DxgkDdiDisplayMuxReportPresence (TRUE),让 iGPU 知道系统中的 ADS 多路复用器正在运行。
  9. Dxgkrnl 调用 DxgkDdiStartDevice。 iGPU 驱动程序会返回包括内部面板 VidPn 目标在内的子数量。
  10. Dxgkrnl 调用 DxgkDdiDisplayMuxGetRuntimeStatus 以检查 iGPU 是否支持 ADS,以及驱动程序是否从系统获取了所有必要信息。
  11. Dxgkrnl 为 iGPU 公开的每个子节点调用 DxgkDdiQueryChildStatus。
  12. 一旦 Dxgkrnl 找到连接到多路复用器的 iGPU 报告子节点,它就会调用 DxgkDdiDisplayMuxUpdateState 通知 iGPU 多路复用器已连接到该目标。
  13. 由于 iGPU 公开了连接的内部监视器,因此 Dxgkrnl 使用 DxgkddiSettimingsfromvidpn 在 iGPU 上设置模式。
  14. Dxgkrnl 启动 dGPU 驱动程序,然后重复步骤 5-12 运行 dGPU。
  15. Dxgkrnl 检测到 iGPU、dGPU 和多路复用器均已正确配置,因此为多路复用器对创建了多路复用器对和 PnP 设备接口属性。
  16. Dxgkrnl 从注册表中读取最后一个多路复用器配置。 由于上一个配置为 dGPU,因此 Dxgkrnl 现在将启动前面所述的多路复用器切换序列,将多路复用器切换到 dGPU。

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

相关文章:

  • 物联网综合实训室建设方案的探讨(职业院校物联网综合实训室建设方案)
  • Pytorch实现之浑浊水下图像增强
  • DeepSeek + 数据分析:让数据洞察更智能、更高效
  • 技术改变生活新趋势
  • RAG-202502
  • 解密ZAB协议:Zookeeper一致性的核心实现
  • WebSocket简单介绍 并接入deepseek
  • Golang `testing`包使用指南:单元测试、性能测试与并发测试
  • LeetCode热题100- 字符串解码【JavaScript讲解】
  • more than one owned sequence found.
  • 26.[前端开发-JavaScript基础]Day03-循环语句
  • 蓝桥杯 五子棋对弈
  • 对 flask 框架中的全局变量 request 探究
  • 1688代采系统:自动化采购的高效解决方案
  • 解决免费 PDF 发票打印痛点的实用工具
  • Pandas 统计分析基础 之 读写不同数据源的数据①
  • 智能优化算法:雪橇犬优化算法(Sled Dog Optimizer,SDO)求解23个经典函数测试集,MATLAB
  • Word(2010)排版技巧
  • 网络安全之日志审计 网络安全审计制度
  • python 把数组转字符串的4种方法