Windows 图形显示驱动开发-WDDM 2.1 功能(一)
WDDM 2.1 要求表
| 功能 |
| |
| 供应和回收改进 | 必需 | |
| 视频内存管理 | 可选 | |
| 硬件保护内容的可靠性改进 | 选择硬件 | |
| 支持 Windows GameDVR 的应用程序 |
| |
| 间接显示 | 选择硬件 | |
| 驱动程序存储和并行安装 | 必需 | |
| 适用于摄像头/捕获场景的 DirectX 内存图面共享 | 必需 |
WDDM 2.1 支持以下 D3D 版本:D3D9、D3D10、D3D10.1、D3D11、D3D11.x、D3D12
供应和回收改进
添加了 PFND3DDDI_RECLAIMALLOCATIONS3CB 回调函数,以减少在后台模式下运行的应用程序的内存占用。 此接口可让应用程序在进入后台时提供可接受完全回收的资源。 因此,进程生存期管理器能够从使用 DirectX 的后台程序中回收更多内存,从而减少后台程序在内存压力下被终止的次数。
其他 DDI 更改:
- PFND3DDDI_UPDATEALLOCATIONPROPERTYCB 回调
- PFND3DDDI_OFFERALLOCATIONS2CB 回调
- D3DDDICB_OFFERALLOCATIONS2 结构
- D3DDDICB_RECLAIMALLOCATIONS3 结构
支持 Windows GameDVR 的应用程序
Windows 10 周年版改进了全屏游戏中使用 Windows 游戏栏和 GameDVR 的功能。
WDDM 2.1 驱动程序需要支持名为当前批处理的性能功能,该功能为翻转模型交换链添加了多线程支持。 此基本功能可确保带游戏栏的全屏游戏以与早期版本 Windows 相同的性能运行。
为启用此功能添加了以下 DDI:
- PFND3DDDI_SYNCTOKENCB 回调
- D3DDDIARG_SYNCTOKEN 结构
- PFND3DDDI_SYNCTOKEN 回调
间接显示
在 WDDM 2.1 中,“间接显示”使 USB 连接的显示器能够像其他监视器一样,参与所有相同的用户体验。 此外,间接显示驱动程序 (IDD) 是一种用户模式驱动程序,开发起来比内核模式驱动程序简单,因此有助于提高系统的整体可靠性。
- 在 WDDM 2.1 中,启用了以下 USB 显示功能/体验:
- 当 USB 显示器连接到 Windows 平台或升级操作系统时,会从 Windows 更新下载并安装适当的驱动程序。
- 将监视器连接到 USB 显示硬件时,将检测并设置正确的监视器拓扑结构、分辨率和 DPI。
- 用户可以在监视器上更改其分辨率和缩放。
- 用户可以断开 USB 显示器并重新连接显示器,而不会产生意想不到的副作用。
- 通过断开连接并重新连接到同一监控器,监控器拓扑结构将得以保留。
- USB 显示器可在睡眠和休眠等各种电源状态下正常工作。
驱动程序存储和并行安装
WDDM 2.1 引入了通过驱动程序存储安装图形驱动程序的功能。 这种安装图形驱动程序的机制提高了 Windows Update 驱动程序更新的复原能力。 它能消除驱动程序文件版本不匹配导致的系统不稳定和用户发起的重启。 每个后续驱动程序更新都将直接从其在驱动程序存储中的唯一位置(即 System32\DriverStore\FileRepository\[…])运行,从而避免驱动程序文件覆盖和不匹配。
驱动程序存储功能的实现需要更改图形驱动程序 INF 文件,以确保驱动程序文件被复制到唯一的驱动程序存储库。
DXIL
WDDM 2.1 引入了 GPU 着色器编译器堆栈从 DirectX 字节代码 (DXBC) 到 DirectX 中间语言 (DXIL) 的过渡,这是一种向 GPU 传输着色器指令的较新格式。 过渡到 DXIL 可为开发人员带来以下好处:
- 可编程性。 通过最大限度地减少 GPU 编程语法与开发人员熟悉的 CPU 语言之间的差异,提高了开发的易用性,降低了着色器创建过程对开发人员的复杂性。
- 高性能编译器:
- 启用运行时着色器性能可提高性能。
- DXIL 提供了一套内在函数,可在 GPU 的 SIMD 处理器通道间共享数据。
- 工作流灵活性 - DXIL 使开发人员能够控制自己的自定义工具和优化程序,并选择在生成时应用哪些编译步骤,而不是在运行时应用哪些编译步骤。
- 高级语言功能 - 高级语言可提供关键功能,从而消除 GPU 代码与 CPU 代码之间的差异,使得 GPU 程序员的学习曲线更加平坦。
这些功能的重点是为开发人员带来好处,而最终用户得到的好处是,即使在现有硬件上运行,新游戏或更新游戏的性能也会有所提高。
适用于摄像头/捕获场景的 DirectX 内存图面共享
在 WDDM 2.1 中,引入了帧服务器组件,以便在多个进程中同时共享摄像头或捕获设备。 捕获的帧可以保存到一个内存位置,多个应用程序都可以从中读取,而无需在进程和协处理器之间多次复制图像数据。 此功能可为符合 WDDM 2.1 标准的硬件和驱动程序提供跨多个进程的高效捕获图片管理、节能、更低的带宽和减少延迟。 最终结果是提高应用程序和用户的性能。
帧服务器将捕获的图像分配为跨进程可共享内存,并将该内存共享给请求访问的进程。 由于帧服务器会将纹理广播给多个客户端进程,因此纹理必须支持并发读取。 为此,目前支持 NV12 纹理。
相关文章:
Windows 图形显示驱动开发-WDDM 2.1 功能(一)
WDDM 2.1 要求表 功能 适用性 供应和回收改进必需视频内存管理可选硬件保护内容的可靠性改进选择硬件支持 Windows GameDVR 的应用程序 必需 间接显示选择硬件驱动程序存储和并行安装必需适用于摄像头/捕获场景的 DirectX 内存图面共享必需 WDDM 2.1 支持以下 D3D 版本&#…...
全局曝光与卷帘曝光
文章目录 曝光方式优点缺点应用场景 为何全局曝光帧率比卷帘曝光方式低 卷帘曝光和全局曝光是CMOS传感器两种常见的曝光模式,以下是二者的对比: 参考:B站优致谱视觉 曝光方式 卷帘曝光:传感器的每一行像素按顺序逐行扫描曝光&…...
【一起来学kubernetes】31、Helm使用详解
一、Helm 简介 Helm 是 Kubernetes 的包管理工具,类比 Linux 中的 yum 或 apt,用于简化应用的打包、部署和版本管理。其核心功能包括: Chart 管理:将 Kubernetes 资源(Deployment、Service 等)打包为可复…...
python 常用的6个爬虫第三方库
Python中有非常多用于网络数据采集的库,功能非常强大,有的用于抓取网页,有的用于解析网页,这里介绍6个最常用的库。 1. BeautifulSoup BeautifulSoup是最常用的Python网页解析库之一,可将 HTML 和 XML 文档解析为树形…...
blender场景导入Unity的流程(个人总结)
处理找不到贴图的问题 blender场景导入Unity遇到的主要问题是贴图找不到。经研究是blender里材质的着色器结构不是贴图-原理化BSDF-输出导致的。目前还没有自动解决方法,总结了一个效率还可以的手动解决流程。 打开后到材质预览,看一下显示没问题&…...
可编辑36页PPT | “新基建”在数字化智慧高速公路中的支撑应用方案智慧高速解决方案智慧交通方案
这份文档是一份关于“新基建”在数字化智慧高速公路中支撑应用方案的PPT内容介绍,它详细阐述了新基建在智慧高速建设中的背景、总体要求和建设内容。从政策背景来看,多个政府部门发布了相关政策文件,推动交通运输基础设施的数字化升级和智慧交…...
Spring 核心技术解析【纯干货版】- XV:Spring 网络模块 Spring-Web 模块精讲
Spring Framework 作为 Java 生态中最流行的企业级开发框架,提供了丰富的模块化支持。其中,Spring Web 模块是支撑 Web 开发的基础组件,无论是传统的 MVC 应用,还是 REST API 及微服务架构,都离不开它的核心能力。 本篇…...
一文解读DeepSeek在保险业的应用
引言 随着人工智能技术的深度渗透,保险行业正经历从传统经验驱动向数据智能驱动的转型。作为国产高性能开源大模型的代表,DeepSeek 凭借其低成本、高推理效率及跨模态处理能力,已成为保险机构突破服务瓶颈、重构业务逻辑的核心工具。截止目前…...
MD编辑器中的段落缩进怎么操作
在 Markdown(MD)编辑器中,段落的缩进通常可以通过 HTML 空格符、Markdown 列表缩进、代码块缩进等方式 实现。以下是几种常见的段落缩进方法: 1. 使用全角空格 ( ) 在一些 Markdown 编辑器(如 Typora)中&…...
Oracle OCP知识点详解2:管理用户密码期限
一、Oracle密码期限管理机制 Oracle数据库通过**概要文件(Profile)**来管理用户的密码策略。默认情况下,所有用户都使用名为DEFAULT的概要文件,该文件的密码过期时间通常设置为180天。这种机制旨在强制用户定期更改密码ÿ…...
物联网时代,HMI 设计的创新机遇与挑战
随着物联网(IoT)技术的蓬勃发展,各种智能设备如雨后春笋般涌现,从智能家居到智慧城市,物联网的应用场景愈发广泛。作为人与设备之间的桥梁,人机界面(HMI)设计在物联网时代扮演着至关…...
系统调用与中断
中断与系统调用 中断(Interrupt)和系统调用(Syscall)是操作系统中两个关键机制,分别用于处理硬件事件和用户程序与内核的交互。它们虽然都涉及从用户模式到内核模式的切换,但设计目的和触发方式不同。以下…...
数据结构和算法——汉诺塔问题
前言 先讲个故事,传说古代印度有三根黄金柱,64个石盘,需要将石盘从第一根移动到第三根上,规定每次只能移动一片,并且小盘在放置时必须在大盘上。 当石盘移动完毕时,世界就会毁灭。 汉诺塔——递归 接下来…...
【区块链安全 | 第二十四篇】单位和全局可用变量(二)
文章目录 单位和全局可用变量(Units and Globally Available Variables)特殊变量和函数1. 区块和交易属性2. ABI 编码和解码函数3. bytes 成员函数4. string 成员函数5. 错误处理6. 数学和加密函数7. 地址类型成员函数8. 与合约相关9. 类型信息 单位和全…...
C语言:指针数组、函数、二级指针
1.指针数组 指针数组是一个数组,数组中的每个元素都是指针。这些指针可以指向各种类型的数据,如整数、字符、结构体等,甚至可以指向其他数组或函数。 指针数组的声明格式通常为: 数据类型 *数组名[数组大小];其中,数…...
批量修改记事本文本文件编码,可以解决文本文件乱码问题
对于文本文件来说,通常都可以设置不同的编码格式,每一种不同的编码格式支持的字符都可能是不一样的。因此当编码格式出现错误的时候,文本文件可能会出现乱码的问题。如何将文本文件的编码由一种格式变为另外一种格式呢?如果文件出…...
亚马逊云科技提供完全托管的DeepSeek-R1模型
近日,亚马逊云科技宣布在Amazon Bedrock上线完全托管的DeepSeek-R1模型。DeepSeek是首个登陆Amazon Bedrock的国产大模型,自今年1月底推出以来,已有数千客户使用Amazon Bedrock的自定义模型导入功能部署了DeepSeek-R1模型。 DeepSeek在过去几…...
Kafka简要介绍与快速入门示例
1、什么是Kafka? Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer&…...
线程池自顶向下
在一些场景下,线程会被频繁创建和销毁,但他们却始终在完成相似的任务 这个场景下我们回去引入一个线程池的概念 可以简单总结为: 任务提交 → 核心线程执行 → 任务队列缓存 → 非核心线程执行 → 拒绝策略处理。 话不多说先看一个简单的…...
利用 Chrome devTools Source Override 实现JS逆向破解案例
之前讲解 Chrome 一大强势技术 override 时,给的案例貌似没有给大家留下多深的印象 浏览器本地替换(local overrides)快速定位前端样式问题的案例详解(也是hook js的手段)_浏览器的 overrides 替换功能-CSDN博客 其实…...
Springboot 中使用 List<Integer> 与 JSONArray 处理 JSON 数组的性能与实践
深入对比:Springboot 中使用 List 与 JSONArray 处理 JSON 数组的性能与实践 引言 在现代 Web 开发中,处理 JSON 格式的数据是常见需求。当面对 POST 请求中的 JSON 数组时,开发者常需在 List<Integer> 和 JSONArray 两种方案间抉择。…...
容器C++ ——STL常用容器
string容器 string构造函数 #include<iostream> using namespace std; #include<string.h> void test01() {string s1;//默认构造const char* str "hello world";string s2(str);//传入char*cout << "s2" << s2 << endl;s…...
npu踩坑记录
之前使用qwen系列模型在ascend 910a卡进行了一些生成任务, 贴出踩坑过程也许对遇到类似问题的同学有帮助: ) 目录 千问 qwq32环境配置 代码部署 生成内容清洗 已生成内容清洗 生成过程优化 Failed to initialize the HCCP process问题 assistant 的历史回答丢失 推理执…...
Linux信号——信号的产生(1)
注:信号vs信号量:两者没有任何关系! 信号是什么? Linux系统提供的,让用户(进程)给其他进程发送异步信息的一种方式。 进程看待信号的方式: 1.信号在没有发生的时候,进…...
【机器学习】——机器学习思考总结
摘要 这篇文章深入探讨了机器学习中的数据相关问题,重点分析了神经网络(DNN)的学习机制,包括层级特征提取、非线性激活函数、反向传播和梯度下降等关键机制。同时,文章还讨论了数据集大小的标准、机器学习训练数据量的…...
html处理Base文件流
处理步骤 从服务返回的字符串中提取文件流数据,可能是Base64或二进制。将数据转换为Blob对象。创建对象URL。创建<a>元素,设置href和download属性。触发点击事件以下载文件。删除缓存数据 代码 // 假设这是从服务返回的Base64字符串(…...
力扣每日一题:2712——使所有字符相等的最小成本
使所有字符相等的最小成本 题目示例示例1示例2 题解这些话乍一看可能看不懂,但是多读两遍就明白了。很神奇的解法,像魔术一样。 题目 给你一个下标从 0 开始、长度为 n 的二进制字符串 s ,你可以对其执行两种操作: 选中一个下标…...
在MFC中使用Qt(六):深入了解QMfcApp
前言 此前系列文章回顾: 在MFC中使用Qt(一):玩腻了MFC,试试在MFC中使用Qt!(手动配置编译Qt) 在MFC中使用Qt(二):实现Qt文件的自动编译流程 在M…...
JMeter进行分布式压测
从机: 1、确认防火墙是否关闭; 2、打开网络设置,关闭多余端口;(避免远程访问不到) 3、打开JMeter/bin 目录底下的jmeter.properties; remove_hosts设置当前访问地址,192.XXXXX&…...
Python实现音频数字水印方法
数字水印技术可以将隐藏信息嵌入到音频文件中而不明显影响音频质量。下面我将介绍几种在Python中实现音频数字水印的方法。 方法一:LSB (最低有效位) 水印 import numpy as np from scipy.io import wavfile def embed_watermark_lsb(audio_path, watermark, ou…...
