Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(十)
电源转换序列
以下示例描述了 ADS 系统的休眠电源转换。
- 系统配置为连接 dGPU 的多路复用器。
- 系统进入休眠状态。
- iGPU 和 dGPU 都切换到了 D3 电源状态。
- 系统关闭电源。
- 用户开启系统电源。
- 固件配置 iGPU 的多路复用器和 iGPU 在内部面板上的显示启动序列。
- Dxgkrnl 读取最后的多路复用器配置(本例中为 dGPU),并将其与使用 ACPI 的当前多路复用器位置(本例中为 iGPU)进行比较。 Dxgkrnl 然后调用 ACPI 将多路复用器切换到 dGPU。
- Dxgkrnl 将 iGPU 转换为 D0,然后调用 iGPU 的DxgkDdiDisplayMuxUpdateState,以通知驱动程序该多路复用器未连接到它。
- Dxgkrnl 将 dGPU 转换为 D0,然后调用 dGPU 的DxgkDdiDisplayMuxUpdateState,以通知驱动程序该多路复用器已连接到它。
- Dxgkrnl 在 dGPU 上设置模式。
一体机系统(AIO)
任何想要支持 ADS 的 AIO 系统都必须在两个 GPU 上将内部面板作为内部目标类型进行公开。
多路复用器 ACPI 设备
OEM 负责在 ACPI 命名空间中添加多路复用器设备,并提供操作多路复用器所需的方法。
GPU 驱动程序不应调用多路复用器的 ACPI 方法,因为多路复用器设备可能位于 ACPI 树中的任何位置。 建议将多路复用器置于两个 GPU 最接近的共享上级之下。
当前复用器设备仅支持两个输入,我们预计未来的复用器不会支持超过两个输入,因此设计可以假设每个复用器有两个输入和一个输出。
在系统运行时,绝对不能停止多路复用器设备。 这是一个隐藏的系统设备。
多路复用器设备 ACPI 方法
只有 ACPI 设备的驱动程序堆栈才能进行调用,以便评估设备上的 ACPI 方法。 因此,要调用多路复用器设备方法来切换多路复用器,OS 需要为多路复用器设备加载驱动程序。 因此,OS 现在提供了一个显示多路复用器驱动程序,作为所有显示切换多路复用器的驱动程序。
多路复用器设备必须具备以下方法:
- _HID 通过硬件 ID 来识别多路复用器设备。 我们为 ACPI 显示多路复用器保留了“MSFT0005”。
- DMQU(显示多路复用器查询)返回多路复用器的当前状态。
- DMCF(显示多路复用器配置)配置多路复用器。
方法 _HID(硬件 ID)
参数:
无
返回:
包含硬件 ID 的 ASCII 字符串,即“MSFT0005”。
方法 DMQU(显示多路复用器查询)
在将来的版本中,我们预计将向查询添加更多信息。 为在将来启用其他查询,将使用 Arg0 表示查询类型。 如果 DMQU
方法不理解查询类型,则应将该方法视为不支持。
参数:
Arg0:指定查询类型的整数。 下表列出了查询类型值及其含义。
查询类型值 | 含义 |
---|---|
1 | 查询当前切换状态 |
2 | 查询多路复用器 ADS 支持级别 |
3 | 查询多路复用器连接的第一个 GPU 子级 |
4 | 查询多路复用器连接的第二个 GPU 子级 |
返回:
如果此方法能理解指定的查询类型,则应返回下表中列出的相应数据。 如果此方法不理解指定的查询类型,则应返回空字符串。
查询类型值 | 返回数据 |
---|---|
1 | ASCII 字符串,包含多路复用器当前切换到的 GPU 子设备的 ACPI 名称。 |
2 | 表示 ADS 支持级别的整数。 详见下表。 |
3 | ASCII 字符串,包含多路复用器所连接的第一个 GPU 子设备的 ACPI 名称。 |
4 | ASCII 字符串,包含多路复用器所连接的第二个 GPU 子设备的 ACPI 名称。 |
下表列出了查询类型为 2 时的 ADS 支持级别值及其含义。
返回的数据 | 含义 |
---|---|
0 | 不支持 |
1 | 开发支持。 系统可以在不通过任何 HLK 测试的情况下使用此设置交付,因为 ADS 在客户系统中默认为禁用。 |
2 | 实验性支持。 系统可以在不通过任何 HLK 测试的情况下使用此设置交付,因为 ADS 在客户系统中默认为禁用。 |
3 | 全面支持。 如果该系统与完全支持的图形驱动程序配对,则默认情况下将启用 ADS。 系统需要通过 ADS HLK 测试才能交付。 |
方法 DMCF(显示多路复用器配置)
参数:
Arg0多路复用器应切换到的 ACPI GPU 子设备的 ASCII 名称。
返回: