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 都处于睡眠状态时,系统会将多路复用器切换回预期目标,从而避免多重模式切换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25088.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu下QT安装和调试的常见问题(一)__could_not_dertermine_which_make

前言 Ubuntu下QT的安装会有一些奇怪的问题出现&#xff0c;并没有像Windows下Visual Studio的安装那么直接就可以使用那么方便&#xff0c;本文就“make”挂接的问题&#xff0c;给出一些小的感受。 1、问题的提出 很多问题的解答&#xff0c;AI无论是上文心一言&#xff0c;还…

C# httpclient 和 Flurl.Http 的测试

关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站&#xff0c;可以测试Post调用&#xff0c;我写了2个函数&#xff0c;测试httpclient和Flurl使用Post: async 和 await 是成对使用的&#xff0c;为了接受web异步返回的数据&#xff0c;winfor…

多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?

飞机的核心电子系统包括发电与配电系统&#xff0c;飞机内部所有设备和系统之间的内部数据通信系统&#xff0c;以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中&#xff0c;我们将了解模块化仪器&#xff08;无论是PCIe…

Ollama部署本地大模型DeepSeek-R1-Distill-Llama-70B

文章目录 一、下模二、转模1. 下载转换工具2. 安装环境依赖3. llama.cpp1. 转换脚本依赖2. llama.cpp安装依赖包3. llama.cpp编译安装4. 格式转换 三、Ollama部署1. 安装启动Ollama2. 添加模型3. 测试运行 一、下模 #模型下载 from modelscope import snapshot_download model…

domain 网络安全 网络安全域

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 文章目录 1、域的概述 1.1、工作组与域1.2、域的特点1.3、域的组成1.4、域的部署概述1.5、活动目录1.6、组策略GPO 2、域的部署实验 2.1、建立局域网&#xf…

VSCode轻松调试运行.Net 8.0 Web API项目

1.背景 我一直都是用VS来开发.NetCore项目的&#xff0c;用的比较顺手&#xff0c;也习惯了。看其他技术文章有介绍VS Code更轻量&#xff0c;更方便。所以我专门花时间来使用VS Code&#xff0c;看看它是如何调试代码、如何运行.Net 8.0 WebAPI项目。这篇文章是一个记录的过程…

【fnOS飞牛云NAS本地部署DeepSeek-R1结合内网穿透远程访问告别服务器繁忙】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python学习第十七天之PyTorch保姆级安装

PyTorch安装与部署 一、准备工作二、pytorch介绍三、CPU版本pytorch安装1. 创建虚拟环境2. 删除虚拟环境1. 通过环境名称删除2. 通过环境路径删除 3. 配置镜像源4. 安装pytorch1. 首先激活环境变量2. 进入pytorch官网&#xff0c;找到安装指令 5. 验证pytorch是否安装成功 四、…

内存管理+模板基础知识

在前面的博客中&#xff0c;我们已经基本学习完了类和对象有关知识&#xff0c;在这篇博客中&#xff0c;我们将要学习C/C内存管理与模板的一些基础知识。 目录 一、C/C内存管理 1.1 C/C内存分布 1.2 C内存管理方式 1.2.1 new/delete操作内置类型 1.2.2 new和delete操作自…

新建菜单项的创建之CmpGetValueListFromCache函数分析

第一部分&#xff1a; PCELL_DATA CmpGetValueListFromCache( IN PHHIVE Hive, IN PCACHED_CHILD_LIST ChildList, OUT BOOLEAN *IndexCached, OUT PHCELL_INDEX ValueListToRelease ) 0: kd> dv KeyControlBlock 0xe1…

《无畏契约》运行时提示“d3dcompiler_43.dll丢失”是什么原因?“找不到d3dcompiler_43.dll文件”如何解决?

--- 使用DLL修复工具&#xff08;懒人专用&#xff09; https://file-xfqdx-cdn.fanqiesoft.cn/package/XFQDXTool_21121_tg.exe 逐步说明&#xff1a; 步骤1&#xff1a;重新安装《无畏契约》 - 操作指南&#xff1a; - 打开“控制面板” → “程序和功能”。 - 在列表…

蓝牙接近开关模块感应开锁手机靠近解锁支持HID低功耗

ANS-BT101M是安朔科技推出的蓝牙接近开关模块&#xff0c;低功耗ble5.1&#xff0c;采用UART通信接口&#xff0c;实现手机自动无感连接&#xff0c;无需APP&#xff0c;人靠近车门自动开锁&#xff0c;支持苹果、安卓、鸿蒙系统&#xff0c;也可以通过手机手动开锁或上锁&…

Ubuntu 22.04 安装Nvidia驱动加速deepseek

一键安装22.04 nvidia 驱动 nvidia 官网下载驱动我的环境是NVIDIA RTX A5000nvidia 文档参考没有安装驱动之前确认自己的型号 lspci | grep -i vga &#xff08;如数字2231&#xff09; 参考docker 支持nvidia &#xff0c;注释了需要的取消注释即可 42行-92行一定要重启服务器…

数据结构——双链表

1. 双向带头循环链表 1. 双链表的功能 1. 初始化 2. 销毁 3. 打印 4. 检查链表是否为空 5. 尾插 6. 尾删 7. 头插 8. 头删 9. 在目标节点之后插入数据 10. 删除目标节点 11. 查找 2. 双链表的定义 结构体需要包含三个成员&#xff0c;一个成员存储数据&#xff0c;一个成员存储…

微服务2025/2/15

微服务是一种软件架构风格&#xff0c;它是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 微服务是一种架构。 微服务是一种架构。 微服务是一种架构。 以前自己做项目最常用的架构是单体架构。单体项目不适合开发大型项目。 学习微服务技术来解…

Locust性能压测工具使用指南

Locust是一款用Python编写的开源性能测试工具&#xff0c;主要用于对网站或其他系统进行负载测试和性能测试&#xff0c;以下是关于它的详细介绍&#xff1a; 特点 高可扩展性&#xff1a;能够轻松模拟大量用户并发访问&#xff0c;通过简单增加节点&#xff0c;可以在短时间…

DaoCloud 亮相 2025 GDC丨开源赋能 AI 更多可能

2025 年 2 月 21 日至 23 日&#xff0c;上海徐汇西岸&#xff0c;2025 全球开发者先锋大会以 “模塑全球&#xff0c;无限可能” 的主题&#xff0c;围绕云计算、机器人、元宇宙等多元领域&#xff0c;探讨前沿技术创新、应用场景拓展和产业生态赋能&#xff0c;各类专业论坛、…

Linux 环境“从零”部署 MongoDB 6.0:mongosh 安装与数据操作全攻略

前提 完成linux平台部署MongoDB【部署教程】且完成mongosh的安装 由于本人使用的是6.0版本的MongoDB&#xff0c;新版本 MongoDB&#xff08;尤其是 6.0 及以上版本&#xff09;已经不再默认捆绑传统的 mongo shell&#xff0c;而改用新的 MongoDB Shell&#xff08;mongosh&am…

SQL注入之二次注入

1、概述 二次注入是指已存储&#xff08;数据库、文件&#xff09;的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。 二次注入是sql注入的一种&#xff0c;但是比普通sql注入利用更加困难&#xff0c;利用门槛更高。普通注入数据直接进入到 SQL 查询中&#xff0c;而…

AORO M6北斗短报文终端:将“太空黑科技”转化为安全保障

在卫星导航领域&#xff0c;北斗系统作为我国自主研发的全球卫星导航系统&#xff0c;正以其独特的短报文通信功能引发全球范围内的广泛关注。这一突破性技术不仅使北斗系统在全球四大导航系统中独树一帜&#xff0c;具备了双向通信能力&#xff0c;更通过遨游通讯推出的AORO M…