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

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

电源转换序列

以下示例描述了 ADS 系统的休眠电源转换。

  1. 系统配置为连接 dGPU 的多路复用器。
  2. 系统进入休眠状态。
  3. iGPU 和 dGPU 都切换到了 D3 电源状态。
  4. 系统关闭电源。
  5. 用户开启系统电源。
  6. 固件配置 iGPU 的多路复用器和 iGPU 在内部面板上的显示启动序列。
  7. Dxgkrnl 读取最后的多路复用器配置(本例中为 dGPU),并将其与使用 ACPI 的当前多路复用器位置(本例中为 iGPU)进行比较。 Dxgkrnl 然后调用 ACPI 将多路复用器切换到 dGPU。
  8. Dxgkrnl 将 iGPU 转换为 D0,然后调用 iGPU 的DxgkDdiDisplayMuxUpdateState,以通知驱动程序该多路复用器未连接到它。
  9. Dxgkrnl 将 dGPU 转换为 D0,然后调用 dGPU 的DxgkDdiDisplayMuxUpdateState,以通知驱动程序该多路复用器已连接到它。
  10. 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 子级

返回:

如果此方法能理解指定的查询类型,则应返回下表中列出的相应数据。 如果此方法不理解指定的查询类型,则应返回空字符串。

查询类型值返回数据
1ASCII 字符串,包含多路复用器当前切换到的 GPU 子设备的 ACPI 名称。
2表示 ADS 支持级别的整数。 详见下表。
3ASCII 字符串,包含多路复用器所连接的第一个 GPU 子设备的 ACPI 名称。
4ASCII 字符串,包含多路复用器所连接的第二个 GPU 子设备的 ACPI 名称。

下表列出了查询类型为 2 时的 ADS 支持级别值及其含义。

返回的数据含义
0不支持
1开发支持。 系统可以在不通过任何 HLK 测试的情况下使用此设置交付,因为 ADS 在客户系统中默认为禁用。
2实验性支持。 系统可以在不通过任何 HLK 测试的情况下使用此设置交付,因为 ADS 在客户系统中默认为禁用。
3全面支持。 如果该系统与完全支持的图形驱动程序配对,则默认情况下将启用 ADS。 系统需要通过 ADS HLK 测试才能交付。
方法 DMCF(显示多路复用器配置)

参数:

Arg0多路复用器应切换到的 ACPI GPU 子设备的 ASCII 名称。

返回:

整数 0 表示成功;非 0 表示失败。 OEM 可以定义非 0 值,以便更好地进行诊断。
http://www.dtcms.com/a/40935.html

相关文章:

  • MinIO在 Docker中修改登录账号和密码
  • 车床的应用场景
  • 【Excel】 Power Query抓取多页数据导入到Excel
  • 大模型智能体,企业股票量化投资分析工具
  • HTTP协议与RESTful API实战手册(二):用披萨店故事说透API设计奥秘 [特殊字符]
  • 批量给 Word 添加或设置页眉页脚/页码
  • 傅里叶分析
  • Java+Vue+uniapp微信小程序校园自助打印系统(程序+论文+讲解+安装+调试+售后)
  • DVWA -第二关-命令执行
  • Taylor龙哥库塔。各种稳定性
  • 李代数(Lie Algebras)与Attention:深度学习中的数学之美
  • Spring Cloud 的核心定义与定位
  • PMP项目管理—整合管理篇—3.指导与管理项目执行
  • 【Linux文件IO】系统IO和标准IO介绍
  • 具身智能(Embodied AI)的物理交互基准测试:构建真实世界的智能体评估体系
  • spring boot 2.7 + seata +微服务 降级失败问题修复
  • VSCode轻松调试运行C#控制台程序
  • 【C/C++】如何求出类对象的大小----类结构中的内存对齐
  • useLayoutEffect和useEffect有什么区别?
  • Expert Domain-Driven Design (DDD) Implementation in .NET 2024-10
  • Arduino项目实战:使用MQ-2气体传感器与OLED屏幕监测环境气体
  • Hadoop第2课(伪分布式集群的搭建)
  • Java——基本数据类型
  • 挖src实用脚本开发(二)
  • 命名管道通信和共享内存通信
  • 【开源】低代码 C++程序框架,Linux多线程程序
  • 欧拉动力学方程的推导(持续更新)
  • 第十四届蓝桥杯:DFS之飞机降落
  • Java 大视界 -- Java 大数据中的时间序列数据异常检测算法对比与实践(103)
  • Joycon-Robotics库的安装报错解决记录