Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(一)

WDDM 3.0 之前的翻转队列模型

许多新式显示控制器支持对按顺序显示的多个帧排队的能力。 从 WDDM 2.1 开始,OS 支持将在下一个 VSync 中显示的多个未完成的翻转覆盖请求。 显示微型端口驱动程序 (KMD) 通过 DXGK_DRIVERCAPS 中的 MaxQueuedMultiPlaneOverlayFlipVSync 值来表示这种支持。 此功能对于减少高帧速率游戏方案中的延迟非常有用,在这种方案中,多个帧以间隔 0 依次呈现,目的是只显示最近的帧。

在视频播放方案中,要按顺序显示的多个未来帧的内容是预先已知的,并且可以排队到 GPU。 这种提前排队允许 CPU 在处理排队帧时进入低功率状态,从而节省大量电源。 但是,在 WDDM 3.0 之前,OS 没有机制提交需要在屏幕上保留至少一个 VSync 间隔的帧,而无需进一步的 CPU 干预。 基本硬件翻转队列一节介绍了一种解决方案,该解决方案使 CPU 能够进入低功耗状态,并将排队的帧处理卸载到 GPU。

在 WDDM 3.0 之前的游戏方案中,GPU 完成将场景呈现到交换链后缓冲区后,会有一个到 CPU 的往返,以便将请求提交以将帧内容呈现到屏幕。 对于接近 VSync 的繁重 GPU 工作负荷,此往返可能会导致帧延迟并错过预期目标时间,从而导致可观察的帧故障。 “高级硬件翻转队列”部分引入了一种机制,用于避免此 CPU 往返,并将已完成的帧呈现给屏幕且延迟较低。 高级硬件翻转队列要求同时具有基本硬件翻转队列和 GPU 硬件计划阶段 2 功能。

基本硬件翻转队列

下图演示了呈现三个帧的情况,每个帧在屏幕上停留一个 VSync 间隔

 

示意图中的填充图案显示了 Dxgkrnl 软件翻转队列处理和应用程序线程必须唤醒并执行 CPU 工作的时间。 在每个 VSync 上,显示控制器必须向 OS 发出完成翻转的 CPU 通知,并且 OS 必须提交下一个翻转请求。 应用程序还必须在每个 VSync 上唤醒,并查询当前统计信息,以最终了解三帧中的最后一帧何时显示。

从 WDDM 3.0 开始,提供了可以向显示控制器队列提交多个未来帧的硬件翻转队列 DDI。 如前所述,此机制允许 GPU 的 CPU 和部分在显示控制器处理多个排队帧时转换到较低电源状态。 此转换可提高支持硬件的视频播放方案的电源效率。

下图说明了建议的体系结构。

借助硬件翻转队列方法,应用程序和 Dxgkrnl CPU 组件在 v2 和 v4 时间之间的两个 VSync 间隔内处于完全空闲状态,从而使 CPU 能够进入低功耗状态。 只有当应用程序请求等待的帧 N+2 完成时,CPU 才会得到通知。

高级硬件翻转队列

在 WDDM 3.0 之前的游戏方案中,GPU 完成将场景呈现到交换链后缓冲区后,会有一个到 CPU 的往返,以便将请求提交以将帧内容呈现到屏幕。 下图显示了此方案。

如果呈现完成得离 VSync 太近,这种往返的代价可能会导致帧错过目标,如下图所示。

 

一些显示器控制器本身支持等待条件,允许显示在 GPU 完成呈现帧时提交翻转请求,而无需 CPU 往返。 由于硬件翻转队列可以将已完成的帧 N 提交到没有 CPU 往返的显示器,因此它可能会避免错过的帧,如下图所示:

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

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

相关文章

OSPF-5 3类LSA SummaryLSA

上一期我们介绍了2类LSA Network LSA的内容信息以及怎样从2类LSA中的信息描绘出一张具体的拓扑信息以及网段信息 这一期我们将介绍3类LSA Summary LSA区域间的LSA看看3类LSA是怎样把域间的路由信息传递到别的区域的 一、概述 由于3类LSA是用来描述我们域间的路由信息所以它是…

AI驱动的视频字幕提取与翻译工具

青梧字幕是一款基于Whisper技术的AI字幕提取工具,专为视频制作者、翻译人员和自媒体创作者设计。它通过先进的语音识别算法,能够自动从视频文件中提取字幕内容,并支持多种语言和字幕格式,极大地简化了字幕制作流程。 目前暂支持 …

ONNX:统一深度学习工作流的关键枢纽

引言 在深度学习领域,模型创建与部署的割裂曾是核心挑战。不同框架训练的模型难以在多样环境部署,而 ONNX(Open Neural Network Exchange)作为开放式神经网络交换格式,搭建起从模型创建到部署的统一桥梁,完…

第十一次CCF-CSP认证(含C++源码)

第十一次CCF-CSP认证 打酱油满分题解 公共钥匙盒满分题解solution 1solution 2(优先队列优化) 通信网络(图的遍历问题)满分题解 打酱油 题目链接 满分题解 思路:做完这题我觉得这里有点像贪心算法但又是常识性问题&a…

深入解析Hosts文件:从原理到实战应用(文末附Qwins下载)

深入解析Hosts文件:从原理到实战应用 在网络世界中,一个看似普通的系统文件——Hosts文件,却隐藏着操控域名解析的“上帝权限”。无论是开发者的本地测试、网络安全防护,还是普通用户屏蔽广告,都离不开它的身影。本文将…

SpringBoot 和vue前后端配合开发网页拼图10关游戏源码技术分享

今天分享一个 前后端结合 的网页游戏 开发项目源码技术。 这也是我第一次写游戏类的程序,虽然不是特别复杂的游戏,但是是第一次写,肯定要记录一下了,哈哈。 游戏的内容 就是 我们显示中玩的那个 拼图碎片的 游戏,类似下…

TSB - AD 解读 — 迈向可靠、透明的 TSAD 任务

目录 一 文章动机 二 TSAD 领域内的两类缺陷 三 数据集的构建 四 实验结果及结论 项目宣传链接:TSB-AD 代码链接: TheDatumOrg/TSB-AD: TSB-AD: Towards A Reliable Time-Series Anomaly Detection Benchmark 原作者解读:NeurIPS 2…

Java 大视界 -- Java 大数据机器学习模型的对抗攻击与防御技术研究(137)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Python 鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

C++11 lambda表达式、包装器、Bind绑定

Hello!大家早上中午晚上好!!今天来复习C11三个新加的特性!! 一、lambda 表达式 1.1什么是lambda表达式? 语法:[捕捉列表](参数列表)->返回值{函数体}; …

计算机网络:(二)计算机网络在我国发展与网络类别与性能 (附带图谱更好对比理解)

计算机网络:(二)计算机网络在我国发展与网络类别和性能 前言一、计算机网络在我国的发展二、计算机网络的类别1. 计算机网络的定义2. 不同类别的计算机网络(1)按覆盖范围分类(2)按传输技术分类…

CoreData 调试警告:多个 NSEntityDescriptions 声明冲突的解决

概述 目前在苹果生态 App 的开发中,CoreData 数据库仍然是大部分中小应用的优先之选。不过,运行时 CoreData 常常产生各种“絮絮叨叨”的警告不禁让初学的秃头小码农们云里雾里。 这不,对于下面这一大段 CoreData 警告,大家是否一…

解决QT_Debug 调试信息不输出问题

方式1 &#xff1a;手动通过添加环境变量解决 ->使用命令&#xff1a; QT_LOGGING_TO_CONSOLE1 qtcreator启动 ->如若还未输出qDebug调试信息 则在程序中引<QLoggingCategory>包 #include <QLoggingCategory> ->在程序入口添加 QLoggingCategory::defa…

【CF】Day9——Codeforces Round 953 (Div. 2) BCD

B. New Bakery 题目&#xff1a; 思路&#xff1a; 被标签害了&#xff0c;用什么二分&#xff08; 很简单的思维题&#xff0c;首先如果a > b&#xff0c;那么全选a就行了&#xff0c;还搞啥活动 否则就选 b - a 天来搞活动&#xff0c;为什么&#xff1f; 首先如果我…

[MAVEN][经验总结]MAVEN_HOME和M2_HOME的配置建议

前言 MAVEN_HOME和M2_HOME都是maven的环境变量&#xff0c;要配置哪个&#xff0c;与maven版本有关&#xff0c;我在实操过程中遇到相关的问题&#xff0c;现记录如下。 MAVEN_HOME和M2_HOME的区别 MAVEN_HOME 和 M2_HOME 本质上是同一个作用的环境变量&#xff0c;它们的区…

力扣Hot100——169. 多数元素

解法1&#xff1a;使用HashMap 将nums数组映射到HashMap中&#xff0c;键为nums的值&#xff0c;值为nums中值的数量&#xff1b; 然后遍历哈希表&#xff0c;返回值最大的键 class Solution {private Map<Integer, Integer> countNums(int[] nums) {Map<Integer, Int…

EasyRTC嵌入式音视频通话SDK:微信生态支持、轻量化架构与跨平台兼容性(Linix/Windows/ARM/Android/iOS/LiteOS)

随着WebRTC技术的不断发展&#xff0c;实时音视频通信在各个领域的应用越来越广泛。EasyRTC嵌入式音视频通话SDK作为一款基于WebRTC技术的实时通信解决方案&#xff0c;凭借其强大的功能和灵活的集成能力&#xff0c;受到了越来越多开发者的关注。 一、系统架构设计 纯C语言开…

QuickAPI:一键将 Excel 数据转为数据库表

在开发和数据管理中&#xff0c;将 Excel 数据快速导入数据库是一项常见需求&#xff0c;但手动建表和导入的过程往往让人头疼。 QuickAPI 作为一款高效的统一数据服务平台&#xff0c;提供了一键将 Excel 数据转为数据库表的功能&#xff0c;极大简化了操作流程。本文将以技术…

【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中&#xff0c;我们已经学过了多表查询的一种&#xff1a;联合查询&#xff08;union&#xff09;。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先&#xff0c;我们想要查询emp表和stu表两个表&#xff0c;按照我们之前的知识栈&#xff0c;我们直接使用…

JavaScript如何做类型转换

一、类型转换 二、补充 console.log(1 "2" "2"); // 122 console.log(1 "2" "2"); // 32 console.log(1 -"1" "2"); // 02 console.log("1" "1" "2"); // 112 consol…