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

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

面板驱动程序

显示器驱动程序是根据从 EDID 生成的即插即用 (PnP) 硬件 ID 加载的。 由于 EDID 保持不变,当任何一个 GPU 控制内部面板时,都会加载面板驱动程序。 这两个驱动程序将显示相同的亮度功能。 因此,加载应该不会造成任何问题,面板驱动程序也不需要知道哪个 GPU 在控制多路复用器。

识别多路复用器控制的目标

当 OS 启动驱动程序时,它会调用驱动程序的 DxgkDdiQueryChildRelations 来查询所报告子节点的信息。 驱动程序会为每个子节点填写 DXGK_CHILD_DESCRIPTOR 结构。 AcpiUid 成员被定义为 ACPI 命名空间中该子级下的 _ADR 方法返回的值,它允许 OS 查找该子级的 ACPI 名称。

对于 ADS,我们定义了一个 ACPI DMID 方法,该方法需要位于目标的子 ACPI 命名空间下。 此 DMID 方法返回多路复用器设备的 ACPI 名称。 它允许 OS 查找目标的多路复用器 ACPI 名称。

PnP 停止正在向目标扫描的适配器

当扫描到内部面板的 GPU 停止时,OS 不会切换多路复用器。 以下是 GPU 停止运行的不同情况。

  1. GPU0 是 post。 它连接到内部面板并停止运行。

    在这种情况下,基本显示驱动程序 (BDD) 会接管 GPU0 上的当前活动模式,并继续更新屏幕。

  2. GPU0 是 post,但 GPU1 连接到内部面板。 GPU0 已停止。

    由于当前 OS 的设计,BDD 是在 GPU0 上启动的,这会导致报告幽灵监视器并出现在显示器 CPL 中。

  3. GPU1 不是 post,而是连接到内部面板。 GPU1 已停止。

    由于当前 OS 的设计,BDD 无法在 GPU1 上启动,因此用户无法看到面板。

  4. GPU1 不是 post。 GPU0 连接到内部面板,GPU1 停止运行。

    不会发生任何切换,也不会发生任何事情。 GPU0 继续显示在面板上。

方案 2 和方案 3 会给用户带来糟糕的体验。 ADS 功能改变了行为以解决这两种情况。

不支持插件/外部 GPU

我们不认为这个功能在插件 GPU 上有任何用途。

ADS 仅限于单个内部面板

ADS 的第一个版本仅支持单个内部面板。 但是,该功能的设计方式允许它在未来支持外部和多个内部显示器的多路复用器(如果 OS 支持),只需对驱动程序进行最少的更改。

当前 POST 适配器策略更改

OS 以前有一些关于 POST 适配器的策略。 例如,POST 适配器是唯一能公开内部目标的适配器。 随着 ADS 的引入,这些类型的限制被从操作系统中移除。

禁用监视器到达视觉效果

在 Windows 11 中连接监视器时,shell/DWM 会出现动画序列。 在显示切换场景中,该动画将被禁用。

禁用 PnP bonk

添加或删除监视器时,PnP 系统播放“bonk”声音以通知用户。 此“bonk”在显示切换场景中被禁用。

应用程序通知

当发生显示切换时,系统会通过常规的 HPD 移除和 HPD 到达代码路径。 因此,所有正常的应用程序通知都会正常触发;例如,HPD 输出和 HPD 输入的 PnP 通知以及 WM_DISPLAYCHANGE 窗口消息。

用于触发切换的 API

计划将提供一个公共 API,以便 OS 和 IHV 控制面板可以触发切换。

鉴于内部面板仅连接到单个 GPU,显示 API 和 Win+P 功能均按预期工作。

HLK 测试

如果 GPU 驱动程序或 ACPI 固件报告全面的 ADS 支持,那么它需要在启用了 ADS 的系统上通过 ADS HLK 测试。

当多路复用器从 GPU 切换开时,GPU 正在对内部面板进行 HPD

当一个内部面板被报告为从一个驱动程序连接时,OS 会触发 bug 检查,而该多路复用器目前已从该驱动程序中切换出来。

AC/DC 转换

对于 ADS 功能的第一个版本,OS 不会存储 AC 与 DC 的多路复用器设置,也不会在 AC <-> 直流转换时触发多路复用器切换。

系统电源转换

电源转换的主要问题是当固件重置多路复用器状态时(例如休眠),恢复电源时多路复用器没有切换到电源转换前的面板。

最初的方法是在同时开启 iGPU 和 dGPU 后,将多路复用器切换回 dGPU。 这种方法的问题在于,根据不同的异步事件,结果可能是多种模式的变化。

帮助简化用户体验的最新方法是,当 iGPU 和 dGPU 都处于睡眠状态时,系统会将多路复用器切换回预期目标,从而避免多重模式切换。

相关文章:

  • 【Pandas】pandas Series dropna
  • [免费]Springboot+Vue在线文档管理系统【论文+源码+SQL脚本】
  • pta天梯L1-001 Hello World
  • 类和对象——const修饰的类的对象和函数
  • html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
  • 量子计算如何优化交通流量:未来智能出行的钥匙
  • AI 赋能教育:智能家教与个性化学习助手的革命性设计与实践
  • 大模型最新面试题系列:训练篇之预训练
  • CF 106A.Card Game(Java实现)
  • 待完成-swig将c语言程序转为python可用示例
  • 基于Python实现的【机器学习】小项目教程案例
  • 【算法 位运算】801. 二进制中1的个数
  • AMD RX 9070 系列显卡:技术革新与市场布局的深度探索
  • 【大模型】量化、剪枝、蒸馏
  • xenomai4的dovetail学习(3)——自旋锁和远程调用
  • Oracle 查询表空间使用情况及收缩数据文件
  • 关于“你对SpringCloud的理解”
  • 远程办公2.0:从“被迫适应”到“主动进化”的未来工作革命
  • Java反射获取对象属性的值
  • (21)从strerror到strtok:解码C语言字符函数的“生存指南2”
  • 多图|多款先进预警机亮相雷达展,专家:中国预警机已达世界先进水平
  • 一箭六星,朱雀二号改进型遥二运载火箭发射成功
  • 征稿启事|澎湃·镜相第三届非虚构写作大赛暨2026第六届七猫现实题材征文大赛
  • 商务部:长和集团出售港口交易各方不得规避审查
  • 陕西省安康市汉阴县县长陈永乐已任汉阴县委书记
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题