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

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

OS 如何判断系统是否启用了 ADS 功能并允许切换

OS 会执行以下一系列检查,以确定系统上是否有 ADS。 要支持 ADS,所有检查都必须为 true。

1. 有一个 GPU 被标记为集成混合 (DXGK_DRIVERCAPS.HybridIntegrated):
其驱动程序会实现 DXGK_DISPLAYMUX_INTERFACE 接口。
检查从 DxgkDdiDisplayMuxGetDriverSupportLevel 返回的 ADS 支持级别。
检查从 DxgkDdiDisplayMuxGetRuntimeStatus 的运行时 ADS 状态。
驱动程序必须支持以下 DDI:
DxgkddiSettimingsfromvidpn
DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
DxgkDdiDisplayDetectControl
DxgkDdiQueryConnectionChange
DxgkDdiNotifyAcpiEvent
在 DXGK_CHILD_CAPABILITIES.HpdAwareness 设置为 HpdAwarenessInterruptible 并且 DXGK_CHILD_DESCRIPTOR.ChildDeviceType 设置为 TypeIntegratedDisplay 时,为内部监视器公开目标。
在内部监控器的 ACPI 命名空间下,有一个 DMID 方法可以成功返回多路复用器的 ACPI 名称。
GPU ACPI 设备有一个“_DEP” ACPI 方法,可将正确的多路复用器 ACPI 名称作为依赖项返回。

2. 有一个 GPU 被标记为独立混合 (DXGK_DRIVERCAPS.HybridDiscrete):
其驱动程序会实现 DXGK_DISPLAYMUX_INTERFACE 接口。
检查从 DxgkDdiDisplayMuxGetDriverSupportLevel 返回的 ADS 支持级别。
驱动程序必须支持以下 DDI:
DxgkddiSettimingsfromvidpn
DxgkDdiSetVidPnSourceAddressWithMultiPlaneOverlay3
DxgkDdiDisplayDetectControl
DxgkDdiQueryConnectionChange
DxgkDdiNotifyAcpiEvent
在 DXGK_CHILD_CAPABILITIES.HpdAwareness 设置为 HpdAwarenessInterruptible 并且 DXGK_CHILD_DESCRIPTOR.ChildDeviceType 设置为 TypeIntegratedDisplay 时,为内部监视器公开目标。
在内部监控器的 ACPI 命名空间下,有一个 DMID 方法可以成功返回多路复用器的 ACPI 名称。
GPU ACPI 设备有一个“_DEP” ACPI 方法,可将正确的多路复用器 ACPI 名称作为依赖项返回。

3. 步骤 1 和 2 中的 ACPI DMID 方法返回的多路复用器 ACPI 名称相匹配。
4. ACPI 多路复用器设备有 ACPI DMQU、DMCF 和 DMSL 方法。
5. 多路复用器 ACPI DMQU 方法会从其中一个 GPU 返回内部面板目标的 ACPI 名称。
6. ADS 目前只支持具有单个内部面板的系统。
7. 可以是:
GPU0、GPU1 和 Mux ACPI 都会报告完全支持 ADS。
GPU0、GPU1 和多路复用器 ACPI 都报告了实验性或完全 ADS 支持,并设置了 EnableMDMExperimentalFeature 注册表项。

控制 ADS 功能推出的质量

要使 ADS 提供良好的用户体验,以下所有组件必须完美地协同工作:

  1. OS 显示多路复用器功能。
  2. 用于切换多路复用器的平台 ACPI 方法。
  3. iGPU 和 dGPU 驱动程序中的显示多路复用器切换功能。

为了帮助 IHV/OEM 在版本中获得非同类质量的代码,它们可以提供以下任何级别的 ADS 支持:

  • 不支持:驱动程序不支持任何 ADS 功能。
  • 开发支持:驱动程序支持 ADS,但驱动程序的实现仍在开发中,不应超出此目的使用。
  • 实验性支持:驱动程序支持 ADS,但尚未达到发布质量。 OS 默认情况下不会启用 ADS,但可以通过配置来启用它。
  • 全面支持:驱动程序以发布级别的质量支持 ADS。 OS 认为驱动程序支持 ADS。

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

相关文章:

  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(2)
  • 交叉编译curl(OpenSSL)移植ARM详细步骤
  • 支付宝 IoT 设备入门宝典(下)设备经营篇
  • python 视频网站爬虫教程,爬虫入门教程(付安装包)
  • 基于大型语言模型的google浏览器翻译插件
  • Redis开启远程访问
  • IDEA-插件开发踩坑记录-第七坑-Unable to locate JNA native support library
  • 第15届 蓝桥杯 C++编程青少组中/高级选拔赛 202403 真题答案及解析
  • threeJs+vue 加载gltf模型、获取模型尺寸、播放模型动画
  • React vs Vue3深度对比与使用场景分析
  • 使用机器学习进行土地覆盖分类
  • 网络安全和爬虫的关系
  • elementUI 表格隔行换色,修改table表头背景样式
  • 排序算法归类整理对比
  • 002-快速安装 Linux 虚拟机
  • PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下
  • 如何通过网管提升运维效率?
  • 游戏引擎学习第125天
  • Shell学习(5/6) 流程控制-函数
  • 数据结构秘籍(二)图(含图的概念、存储以及图的两大搜索)