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 提供良好的用户体验,以下所有组件必须完美地协同工作:
- OS 显示多路复用器功能。
- 用于切换多路复用器的平台 ACPI 方法。
- iGPU 和 dGPU 驱动程序中的显示多路复用器切换功能。
为了帮助 IHV/OEM 在版本中获得非同类质量的代码,它们可以提供以下任何级别的 ADS 支持:
- 不支持:驱动程序不支持任何 ADS 功能。
- 开发支持:驱动程序支持 ADS,但驱动程序的实现仍在开发中,不应超出此目的使用。
- 实验性支持:驱动程序支持 ADS,但尚未达到发布质量。 OS 默认情况下不会启用 ADS,但可以通过配置来启用它。
- 全面支持:驱动程序以发布级别的质量支持 ADS。 OS 认为驱动程序支持 ADS。