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

news/2025/2/27 3:36:19
控制面板自我刷新 (PSR)

ADS 功能使用 PSR 来避免切换过程中出现故障。 具体来说,使用 PSR1(全屏更新模式)时,GPU0 和 GPU1 无需协商使用哪种 PSR 模式。

即使在 PSR1 中,面板也需要支持以下的可选功能:

接收器功能详细信息接收器公开方式
DPCD & eDP 版本公开 eDP v1.3 或更高版本。DPCD
PSR 功能和版本接收器应支持版本 1。DPCD 00070h 位 7:0
支持 VSC SDP 以传达 PSR 状态仅适用于 PSR;接收器应至少支持修订版 2,最多 8 个有效字节,以传输 PSR 状态和 CRC 值。DPCD 170
接收器应正确报告与 PSR 相关的状态接收器应公开状态,例如链路 CRC 错误、RFB 存储错误、接收器设备自我刷新状态、最大重新同步帧计数、接收器中最后一次实际同步延迟以及最后一次接收 PSR SDP。DPCD 2008h、2009h、200Ah 应反映接收器的正确状态。

当 GPU1 作为 OS DxgkddiSettimingsfromvidpn 调用的一部分执行链路训练时,驱动程序不知道 GPU0 使用的 DP 通道和带宽设置,因此必须执行完整的链路训练序列,而不是执行快速链路训练。 OS 不会在 GPU 之间协商任何 PSR 策略,因此面板需要支持 GPU 将使用的所有 PSR 版本和功能。 例如,面板必须支持这样一种情况:GPU0 可能使用 PSR2 并具有某些设定的功能,然后 PSR1 将用于切换,接着 GPU1 可能使用 PSR2 并具有不同的功能。

确保面板在切换期间保持在PSR状态

当 GPU1 在面板上设置模式时,不能保证 GPU1 在面板处于 PSR 状态时设置的链接属性会与 PSR 进入模式相匹配。 例如,刷新速率或活动大小可能会发生变化。 如今,DP 或其他行业标准都没有办法让面板报告它可以在改变链接属性时将面板保持在 PSR 中。 从长远来看,我们希望在 DP 规范中加入这一功能。 在此之前,对于支持 ADS 的系统,OEM 必须选择一个 TCon/面板/多路复用器组合,当链路属性(如刷新率、活动大小)在 EDID 中显示的任意两个组合之间发生变化时,该组合仍能保持 PSR 状态。 此方法可确保 PSR 在切换期间保持活动状态。

为了使 ADS HLK 测试能够验证在切换过程中 PSR 是否被保持,我们希望找到一种方法,让操作系统知道在 GPU1 测试模式后 PSR 是否未处于活动状态。 面临的一个挑战是,如果面板不能支持整个链接训练的 PSR,它将如何应对还没有明确规定。

作为 DxgkDdiDisplayMuxPostSwitchToPhase2 的一部分,驱动程序会在 pWasPanelInPSR 中返回一个布尔值,以告知 OS 是否检测到面板不在 PSR 中。

内部面板的 EDID

为了让 OS 在选择显示模式和拓扑结构(连接不同的监视器)时提供预期的行为,两个 GPU 都必须报告内部显示的 EDID/DisplayId。 这一要求确保了存储显示模式和拓扑的 CCD 数据库无论由哪个 GPU 控制内部显示,都能选择相同的设置。

驱动程序向 OS 报告的 EDID 应该是使用 aux 命令从面板上查询到的 EDID,而不进行任何修改。

目前,在启动报告内部面板的驱动程序时,OS 将调用 DxgkDdiQueryAdapterInfo(DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR2)。 如果多路复用器从集成目标切换,驱动程序就无法与面板通信,也就无法收集所需的信息。 解决方案是,当启动驱动程序并将多路复用器从其内部目标切换开时,OS 会延迟调用 DxgkDdiQueryAdapterInfo(DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR2),直到多路复用器首次切换到内部目标。


http://www.niftyadmin.cn/n/5869419.html

相关文章

前端浏览器开发中的浏览器兼容问题【持续更新】

目录 一、什么是浏览器兼容问题 二、JavaScript兼容问题及解决方案 2.1addEventListener与attachEvent的区别 2.2集合类对象问题 2.3自定义属性问题 2.4event.x与event.y问题 2.5window.location.href问题 2.6事件委托方法 三、CSS兼容问题及解决方案 3.1浏览器CSS样式初…

leetcode704------二分法查找有序数组中特定的值

目录 一、二分法的基本概念 二、二分法的基本步骤 三、迭代二分法查找有序数组中的特定值题目 3.1 题目介绍 3.2 求解思路 3.2.1 情况一:左闭右闭[left, right] 3.2.2 情况二:左闭右开[left, right) 四、二分法的时间复杂度与空间复杂度 4.1 …

【STM32】玩转IIC之驱动MPU6050及姿态解算

目录 前言 一.MPU6050模块介绍 1.1MPU6050简介 1.2 MPU6050的引脚定义 1.3MPU6050寄存器解析 二.MPU6050驱动开发 2.1 配置寄存器 2.2对MPU6050寄存器进行读写 2.2.1 写入寄存器 2.2.2读取寄存器 2.3 初始化MPU6050 2.3.1 设置工作模式 2.3.2 配置采样率 2.3.3 启…

MySQL | MySQL库、表的基本操作

MySQL库、表的基本操作01 一、库操作1.1 查看数据库1.2 创建数据库1.3 选择数据库1.4 查看创建数据库的SQL语句1.5 修改数据库1.6 删除数据库 二、表操作2.1 创建数据表2.2 查看表2.3 查看表结构2.4 查看创建数据库的SQL语句2.5 修改表2.6 删除表 ⚠️MySQL版本 8.0 一、库操作…

【Golang】go语言异常处理快速学习

Go 语言的异常处理与很多传统的编程语言不同,它没有 try/catch 这样的异常捕获机制,而是通过 错误类型(error)来进行错误处理。Go 语言鼓励显式地处理错误,保持代码的简单性和可维护性。在 Go 中,错误处理不…

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…

Rust 驱动的 Python 工具革命:Ruff 和 uv 与传统工具的对比分

Rust 驱动的 Python 工具革命:Ruff 和 uv 与传统工具的对比分析 概述: Python 生态系统长期以来依赖于一系列经典工具,如 Flake8、Black、pip 和 virtualenv,这些工具在代码检查、格式化和依赖管理方面发挥了重要作用。然而&…

【鸿蒙开发】第三十九章 LazyForEach:数据懒加载

目录 1 背景 2 使用限制 键值生成规则 组件创建规则 首次渲染 非首次渲染 改变数据子属性 使用状态管理V2 拖拽排序 1 背景 LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架…