Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(二)
在 GPU0 和 GPU1 之间共享数据
在某些情况下,也许可以在某些时候带来更好的用户体验:
- GPU0 和 GPU1 来自同一个 IHV。
- GPU0 可以将操作系统无法解读的显示配置相关信息传递给 GPU1。
数据 Blob 由 GUID 描述,如果 GPU1 的驱动程序能理解数据 Blob,它就能快速识别。 在高级层面上,OS 会调用 GPU0 在切换之前获取 Blob GUID 和数据,并在要求 GPU1 在显示屏中进行 HPD 之前将其传递给 GPU1。
GPU1 的驱动程序负责:
- 检查它是否能理解 Blob 的 GUID。
- 验证 Blob 中的每个数据元素,避免 Blob 中格式不正确的数据带来任何不利影响。
驱动程序互操作性
如果 WDDM 驱动程序支持 ADS,那么无论它在哪个 OEM 系统上运行,也无论系统上的其他 GPU 是什么,它都需要支持 ADS。
切换序列
虽然从技术上讲,当 GPU 的驱动程序停止运行时,可以从该 GPU 切换到其他 GPU,但目前还不支持此方案。 因此,仅当两个 GPU 都加载了支持切换 DDI 的驱动程序后,才会进行切换。
以下序列是面板激活时整个切换序列的高级视图,其中 GPU0 和 GPU1 分别代表 iGPU 和 dGPU。 GPU0 目前通过多路复用器连接到内部面板,我们希望切换到 GPU1 扫描到面板。
1.在 API 层面进行切换调用。
2. OS 会收集当前内部面板状态的属性(HDR、模式、刷新率等),并检查临时显示模式。
3.由于系统中任何 GPU 都会产生 HPD,因此 OS 会禁止执行任何显示拓扑。
4.OS 调用 GPU1 驱动程序的 DxgkDdiDisplayMuxPreSwitchTo 并传递当前亮度级别。 只有在 lid 打开时,驱动程序才应执行以下操作:
- 开启面板电源。
- 设置亮度启用信号。
- 设置 OS 传递的亮度级别。
5.OS 禁用在 GPU0 上调用 DxgkDdiQueryConnectionChange,以确保在切换多路复用器之前无法处理另一个方向的 lid HPD。
6.OS 调用 GPU0 驱动程序的 DxgkDdiDisplayMuxPreSwitchAway DDI。 驱动应:
- 如果 lid 处于活动状态,则启用面板上的 PSR1(面板自我刷新 1),并确保在 OS 稍后请求禁用之前不会被禁用。
- 将数据包添加到其连接更改列表中,DXGK_CONNECTION_CHANGE 的 ConnectionStatus 设置为 MonitorStatusDisconnected,MonitorConnect.MonitorConnectFlags.DisplayMuxConnectionChange 设置为 1。
- GPU0 无法向其队列中添加任何 lid 目标的连接更改数据包。 OS bug 会检查它是否这样做。
- 将任何私有 ADS 数据块的大小(包括 GUID 和数据)返回给操作系统。 如果 GPU0 驱动程序调用失败,则需要确保在返回之前删除所有放入队列的 ADS 连接状态数据包。
7.如果 GPU0 的驱动程序返回的专用数据大小不为零,OS 就会分配该大小,并将其传递给 GPU0 的 DxgkDdiDisplayMuxPreSwitchAwayGetPrivateData 回调,以获取专用切换数据。
8. OS 调用 mux 的 ACPI 方法从 GPU0 切换到 GPU1。
9. OS 会再次调用 GPU0 的 DxgkDdiQueryConnectionChange。
10. OS 调用 GPU0 的 DxgkDdiQueryConnectionChanges 来处理 MonitorStatusDisconnected 连接数据包,其中 DisplayMuxConnectionChange 设置为 1。
11. OS 会调用 GPU0 的 DxgkddiSettimingsfromvidpn 来停用正在切换的显示路径。 GPU0 的驱动程序应:
- 关闭面板电源。
- 禁用亮度信号。
- 停止向多路复用器发送亮度级别。
12. OS 处理显示背离。 它不会触发拓扑更改,以避免不必要的拓扑更改。
13. OS 调用 GPU1 的 DxgkDdiDisplayMuxPostSwitchToPhase1 回调,并传递从 GPU0 获取的任何 ADS 专用 blob。 驱动应:
- 确定 lid 处于打开还是关闭状态。
- 使用 DXGK_CONNECTION_CHANGE 将数据包添加到其连接更改列表中:
- MonitorConnect.MonitorConnectFlags.DisplayMuxConnectionChange 位集。
- 如果 lid 打开,则 ConnectionStatus 设置为 MonitorStatusConnected;如果 lid 关闭,则设置为 MonitorStatusDisconnected。
- 如果 lid 关闭,则关闭电源和面板的亮度启用信号。
14. 如果 OS 尚未为 GPU1 的内部目标调用 DxgkDdiQueryAdapterInfo 和 DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR2,则它会进行调用。 调用后,OS 还会调用 DxgkDdiQueryDeviceDescriptor。
15.OS 调用 GPU1 的 DxgkDdiQueryConnectionChange,以便处理其连接更改列表中的事件。 此调用将导致 DxgkDdiQueryDeviceDescriptor 被调用,以用于正在进行 HPD 的新监视器。
16. OS 可显示 HPD 引起的拓扑变化。
17. OS 将异步处理来自 GPU0 和 GPU1 的连接数据包,DisplayMuxConnectionChange 设置为 1。
18. 如果 GPU1 已排队 MonitorStatusConnected:
- OS 调用 GPU1 的 DWM 函数来枚举模式。
- 在 GPU1 上调用 DxgkddiSettimingsfromvidpn 来激活显示路径。
- DWM 将帧渲染并呈现到 GPU1 的显示路径上。
- OS 等待第一个帧被显示出来。
19. OS 会调用 GPU1 的 DxgkDdiDisplayMuxPostSwitchToPhase2 回调,如果 MonitorStatusConnected 被 GPU1 排在队列中,则驱动程序应关闭 PSR1 显示;否则,它不执行任何操作。
20. OS 调用 GPU0 的 DxgkDdiDisplayMuxPreSwitchAway。 虽然没有预期的驱动程序操作,但该调用对于任何与切换相关的驱动程序清理或记帐都很有用。
21. OS 会收集当前内部面板状态的属性。 如果面板状态与之前保存的状态不同,则 OS 就会触发遥测。
iGPU->dGPU 和 dGPU->iGPU 的切换序列相同。 当面板处于非活动状态时,可能需要切换多路复用器。 在这种情况下,不需要此序列,操作系统只需在复用器上调用 ACPI 方法即可切换。
大多数 OS 都不知道驱动程序处于 PSR 模式。 因此,尽管用户看不到这些情况,但驱动程序仍需要生成 Vsync 同步、报告翻转完成等。
相关文章:
Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(二)
在 GPU0 和 GPU1 之间共享数据 在某些情况下,也许可以在某些时候带来更好的用户体验: GPU0 和 GPU1 来自同一个 IHV。GPU0 可以将操作系统无法解读的显示配置相关信息传递给 GPU1。 数据 Blob 由 GUID 描述,如果 GPU1 的驱动程序能理解数据…...
基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
一、修改所有节点主机名 主节点就修改成master hostnamectl set-hostname master 然后输入bash刷新当前主机名 工作节点1就修改成node1 hostnamectl set-hostname node1 然后输入bash刷新当前主机名 二、全部节点安装依赖并同步时间 yum -y install socat conntrack ebta…...
软考教材重点内容 信息安全工程师 第17章 网络安全应急响应技术原理与应用
17.1 网络安全应急响应概述 网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全措施。 17.1.1 网络安全应急响应概念 网络安全应急响应是指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。 17.2.3 网络安…...
使用 DeepSeek + OmniParser v2 + UIAutomation 实现 GUI 应用自动化测试的探索
一、背景 UI 自动化测试一直是软件开发中的难点之一。尽管有许多工具和技术(如 Selenium、Appium 等)可以帮助我们实现自动化测试,但这些工具在面对复杂的 UI 变化时,往往需要大量的维护工作。随着人工智能技术的进步,尤其是自然语言处理(NLP)和计算机视觉(CV)技术的…...
Spring Security面试题
Spring Security面试题 基础概念 Q1: Spring Security的核心功能有哪些? public class SecurityBasicDemo {// 1. 基本配置public class SecurityConfigExample {public void configDemo() {ConfigurationEnableWebSecuritypublic class SecurityConfig extends …...
从零开始构建基于DeepSeek的智能客服系统
在当今的数字化时代,智能客服系统已经成为企业与客户沟通的重要桥梁。它不仅能够提升客户体验,还能大幅降低企业的运营成本。本文将带领你从零开始,使用PHP和DeepSeek技术构建一个功能强大的智能客服系统。我们将通过具体的案例和代码示例,深入探讨如何实现这一目标。 1. …...
Linux故障排查和性能优化面试题及参考答案
目录 如何查看 Linux 系统中的 CPU、内存、磁盘等资源使用情况? 什么是 Linux 中的负载(Load Average)?如何解读它? 如何通过 top 和 htop 命令监控系统性能? 如何使用 mpstat 命令来查看 CPU 的利用情况? 如何分析系统 CPU 瓶颈? 如何分析 CPU 瓶颈?如何优化 CP…...
【无人集群系列---大疆无人集群技术进展、技术路线与未来发展方向】
大疆无人集群技术进展、技术路线与未来发展方向 一、技术进展1. 核心技术创新(1)集群协同控制技术(2)感知与能源系统升级 2. 行业应用落地(1)智慧城市与安防(2)应急救援(…...
【亲测有效】百度Ueditor富文本编辑器添加插入视频、视频不显示、和插入视频后二次编辑视频标签不显示,显示成img标签,二次保存视频被替换问题,解决方案
【亲测有效】项目使用百度Ueditor富文本编辑器上传视频相关操作问题 1.百度Ueditor富文本编辑器添加插入视频、视频不显示 2.百度Ueditor富文本编辑器插入视频后二次编辑视频标签不显示,在编辑器内显示成img标签,二次保存视频被替换问题 问题1࿱…...
ubuntu windows双系统踩坑
我有个台式机,先安装的ubuntu,本来想专门用来做开发,后面儿子长大了,给他看了一下星际争霸、魔兽争霸,立马就迷上了。还有一台windows的笔记本,想着可以和他联局域网一起玩,在ubuntu上用wine跑魔…...
嵌入式八股文(五)硬件电路篇
一、名词概念 1. 整流和逆变 (1)整流:整流是将交流电(AC)转变为直流电(DC)。常见的整流电路包括单向整流(二极管)、桥式整流等。 半波整流:只使用交流电的正…...
flink使用demo
1、添加不同数据源 package com.baidu.keyue.deepsight.memory.test;import com.baidu.keyue.deepsight.memory.WordCount; import com.baidu.keyue.deepsight.memory.WordCountData; import org.apache.flink.api.common.RuntimeExecutionMode; import org.apache.flink.api.…...
OpenCV(8):图像直方图
在图像处理中,直方图是一种非常重要的工具,它可以帮助我们了解图像的像素分布情况。通过分析图像的直方图,我们可以进行图像增强、对比度调整、图像分割等操作。 1 什么是图像直方图? 图像直方图是图像像素强度分布的图形表示&am…...
力扣LeetCode:1656 设计有序流
题目: 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序…...
NGINX配置TCP负载均衡
前言 之前本人做项目需要用到nginx的tcp负载均衡,这里是当时配置做的笔记;欢迎收藏 关注,本人将会持续更新 文章目录 配置Nginx的负载均衡 配置Nginx的负载均衡 nginx编译安装需要先安装pcre、openssl、zlib等库,也可以直接编译…...
vm和centos
安装 VMware Workstation Pro 1. 下载 VMware Workstation Pro 访问 VMware 官方网站(https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html ),在该页面中点击 “立即下载” 按钮,选择适合你操作…...
c#丰田PLC ToyoPuc TCP协议快速读写 to c# Toyota PLC ToyoPuc读写
源代码下载 <------下载地址 历史背景与发展 TOYOPUC协议源于丰田工机(TOYODA)的自动化技术积累。丰田工机成立于1941年,最初是丰田汽车的机床部门,后独立为专注于工业机械与控制系统的公司。2006年与光洋精工(Ko…...
量子计算的数学基础:复数、矩阵和线性代数
量子计算是基于量子力学原理的一种新型计算模式,它与经典计算机在信息处理的方式上有着根本性的区别。在量子计算中,信息的最小单位是量子比特(qubit),而不是传统计算中的比特。量子比特的状态是通过量子力学中的数学工具来描述的,因此,理解量子计算的数学基础对于深入学…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter22-处理 XML
二十二、处理 XML 处理 XML XML 曾一度是在互联网上存储和传输结构化数据的标准。XML 的发展反映了 Web 的发展,因为DOM 标准不仅是为了在浏览器中使用,而且还为了在桌面和服务器应用程序中处理 XML 数据结构。在没有 DOM 标准的时候,很多开发…...
一个不错的API测试框架——Karate
Karate 是一款开源的 API 测试工具,基于 BDD(行为驱动开发)框架 Cucumber 构建,但无需编写 Java 或 JavaScript 代码即可直接编写测试用例。它结合了 API 测试、模拟(Mocking)和性能测试功能,支持 HTTP、GraphQL 和 WebSocket 等协议,语法简洁易读。 Karate详细介绍 K…...
新概念英语第二册09_A cold welcome
Lesson 9: A cold welcomeKey words and expressions Town Hall 市政厅crowd 人群gather 聚集strike 敲,打the minute hand 分针refusewelcomelaugh Questions on the text Where did people gather on the last evening of the year? The people gath…...
Onekey:快速获取Steam游戏清单的终极免费工具完全指南
Onekey:快速获取Steam游戏清单的终极免费工具完全指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 对于Steam游戏玩家和开发者来说,获取游戏的Depot清单文件一直是个技…...
5分钟快速上手:用MusicFree插件免费收听全网音乐
5分钟快速上手:用MusicFree插件免费收听全网音乐 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 还在为不同音乐平台的会员限制而烦恼吗?想要在一个应用中畅享B站、YouTube…...
Phi-3-mini-4k-instruct-gguf实际作品:招聘JD优化+岗位匹配度分析+面试题建议
Phi-3-mini-4k-instruct-gguf实际作品:招聘JD优化岗位匹配度分析面试题建议 1. 模型简介与人力资源应用场景 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型,特别适合处理人力资源相关的文本任务。这个模型虽然体积小,但在招聘…...
别再让SMB裸奔了!Windows Server 2019/2022强制启用SMB签名的完整配置流程
企业级SMB签名配置实战:从风险原理到域环境批量部署 想象一下这样的场景:财务部的共享文件夹突然出现异常转账记录,而所有操作日志都显示"合法访问"。事后调查发现,攻击者仅用15分钟就通过伪造SMB会话篡改了报价单——这…...
“这个PR能合吗?”——SITS2026专家现场演示:实时接入GitHub Actions的AI影响分析沙箱(限免通道将于2024Q3关闭)
第一章:SITS2026专家:AI代码变更影响分析 2026奇点智能技术大会(https://ml-summit.org) 在大规模软件系统持续演进过程中,AI驱动的自动化代码变更(如LLM辅助重构、智能补丁生成)正显著提升开发效率,但其…...
番茄小说下载器:一键将番茄小说转为EPUB和有声书的终极解决方案
番茄小说下载器:一键将番茄小说转为EPUB和有声书的终极解决方案 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾为网络信号差无法追更番茄小说而烦恼&…...
C++的std--ranges视图适配器组合与函数组合在表达力上的相似性
C20引入的std::ranges库彻底改变了序列操作的范式,其中视图适配器的链式组合与函数式编程中的函数组合展现出惊人的相似性。这种设计哲学上的共鸣,让开发者能够以声明式风格构建高效的数据处理管道。本文将从三个关键角度探讨两者在表达力上的异曲同工之…...
▲D2D通信中基于Qlearning强化学习算法的联合资源分配与功率控制算法matlab仿真
目录 📶1.引言 🧠2.系统模型 2.1 网络拓扑 2.2 信号与干扰模型 2.3 容量与吞吐量 2.4 优化目标 ✅3.基于Q学习的联合资源分配与功率控制算法原理 3.1 状态空间定义 3.2 动作空间定义 3.3 奖励函数设计 3.4 Q值更新规则 📚4.MATLA…...
