Windows 图形显示驱动开发-WDDM 3.2- WDDM 功能的内核模式测试

news2025/3/13 14:39:19

概述

在某些情况下,引入了基于 WDDM 或 MCDM 的新计算设备,并且这些设备的驱动程序不支持 D3D 运行时。 为了帮助验证此类驱动程序,将功能添加到 Dxgkrnl ,以便仅使用内核模式 thunk 进行验证;也就是说,无需涉及 D3D 运行时和用户模式驱动程序(UMD)。

此基础结构还允许使用精确设置测试 WDDM 功能,而无需通过 D3D 运行时或 UMD,这可能会使事情复杂化。

引入了 DDI,以便在给定的一组命令的内核模式下生成命令缓冲区。 命令很简单,因此几乎任何执行节点都应能够使用预编译着色器或其他方式执行它们。

若要支持此功能,内核模式驱动程序(KMD)必须提供以下支持:

  • 报告已启用DXGK_FEATURE_KERNEL_MODE_TESTING功能。
  • 实现DXGKDDI_KERNELMODETESTINGINTERFACE功能接口。
  • 提供有关哪个执行节点支持生成和执行测试命令缓冲区的信息。
  • 支持创建没有专用驱动程序数据的上下文/硬件队列。 通常,需要专用驱动程序命令的格式才能将工作负荷提交到设备。 测试接口允许在没有专用驱动程序数据的情况下提交工作负荷。
  • 支持在支持该功能的任何节点上执行 pfnBuildTestCommandBuffer 生成的命令缓冲区。
  • 支持分页 DDI 中的 NULL 分配句柄(TRANSFER、FILL 等)。

此功能仅在计算机上启用测试签名时才使用。将开发使用此功能的 HLK 测试。

DDI 更改

更新了以下结构和枚举以支持内核模式测试:

  • DXGK_FEATURE_KERNEL_MODE_TESTING添加到DXGK_FEATURE_ID枚举。
  • SupportBuildTestCommandBuffer 已添加到 DXGK_NODEMETADATA_FLAGS 结构。
  • TestContext 将添加到 DXGK_CREATECONTEXTFLAGS 结构。
  • TestQueue 将添加到 D3DDDI_CREATEHWQUEUEFLAGS 结构。
  • 添加了以下 DDI、结构和枚举以支持内核模式测试:
  • 添加了DXGKDDI_KERNELMODETESTINGINTERFACE功能接口,DXGKDDI_BUILDTESTCOMMANDBUFFER::p fnBuildTestCommandBuffer 作为唯一的接口成员。
  • DXGKARG_BUILDTESTCOMMANDBUFFER
  • D3DDDI_BUILDTESTCOMMANDBUFFERFLAGS
  • D3DDDI_TESTCOMMANDBUFFER
  • D3DDDI_TESTCOMMANDBUFFEROP
  • D3DDDI_TESTCOMMANDBUFFER_COPY
  • D3DDDI_TESTCOMMANDBUFFER_FILL

 报告对内核模式测试功能的支持

OS 使用添加DXGK_FEATURE_KERNEL_MODE_TESTING功能 ID 调用 KMD 的 DxgkDdiQueryFeatureSupport 函数,以检查驱动程序是否支持内核模式测试。 KMD 需要报告支持该功能。

然后,系统将使用相同的功能 ID 调用 DxgkDdiQueryFeatureInterface,以获取 pfnBuildTestCommandBuffer 的接口函数指针。 KMD 必须实现此函数并为DXGKDDI_KERNELMODETESTINGINTERFACE接口提供其指针。

 报告支持内核模式测试的执行节点

 SupportBuildTestCommandBuffer 已添加到 DXGK_NODEMETADATA_FLAGS 结构。 KMD 必须设置此标志,以指示节点可以执行 pfnBuildTestCommandBuffer 生成的命令缓冲区。 建议尽可能多的节点支持该功能

创建没有专用数据的上下文 

TestContext 将添加到 DXGK_CREATECONTEXTFLAGS ,以指示上下文是测试上下文。 此标志仅在启用测试签名时才有效。

KMD 的 DxgkDdiCreateContext 应支持为支持执行 pfnBuildTestCommandBuffer 生成的命令缓冲区的每个节点创建上下文,而无需专用数据。 若要指示此支持,请在创建上下文期间在 Flags 中设置 TestContext 标志。

 在没有驱动程序专用数据的情况下创建硬件队列

TestQueue 已添加到 D3DDDI_CREATEHWQUEUEFLAGS ,以指示硬件队列是测试队列。 此标志仅在启用测试签名时才有效。

KMD 的 DxgkDdiCreateHwQueue 应支持在没有驱动程序专用数据的情况下创建硬件队列。

 生成命令缓冲区

KMD 的 pfnBuildTestCommandBuffer 为一组简单命令生成具有特定于设备的指令的命令缓冲区。 KMD 从 DxgkDdiQueryFeatureInterface 返回指向此函数的指针(DXGK_FEATURE_KERNEL_MODE_TESTING)。

单个测试命令提交到 pfnBuildTestCommandBuffer。 目前支持以下命令:

测试命令基于使用 GPU 虚拟地址。 OS 保证 GPU VA 映射到使用标准分配类型D3DKMT_STANDARDALLOCATIONTYPE_EXISTINGHEAP或D3DKMT_STANDARDALLOCATIONTYPE_INTERNALBACKINGSTORE创建的分配。

生成的命令缓冲区和专用数据将返回到用户模式。 提交命令缓冲区以供执行时,调用来自用户模式。 恶意应用程序可能会更改缓冲区的内容和专用数据。 KMD 负责验证命令缓冲区和专用驱动程序数据以避免 bug 检查。

生成的命令缓冲区不应包含特权指令。

用户模式客户端驱动程序(例如 Cuda)提交生成的命令缓冲区,以便使用 D3DKMTSubmitCommand 或 D3DKMTSubmitCommandToHwQueue 执行。 将来,缓冲区内容将作为用户模式提交的一部分提交。

提交生成的命令缓冲区以供执行时,可以保证命令缓冲区包含单个测试命令的设备指令。

生成的命令缓冲区提交到对应于传递给 pfnBuildTestCommandBuffer 的 hContext 的节点。

DMA 缓冲区(pDmaBuffer)的大小限制为 4 KB,DMA 专用驱动程序数据(pDmaBufferPrivateData)的大小限制为 1 KB。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 入门--工程创建

IDEA创建SpringBoot项目 SpringBoot 3.1.5 需要java17 ① 创建Maven工程 ② 导入spring-boot-stater-web起步依赖 ③ 编写Controller ④ 提供启动类 1.打开IDEA,新建项目 2.点击下一步,并勾选web开发相关依赖 3.勾选完点击Create,然后配置…

Rust 之一 基本环境搭建、各组件工具的文档、源码、配置

概述 Rust 是一种强调性能、类型安全和并发性的通用编程语言。它强制执行内存安全,使用其特有的所有权机制,而无需传统的垃圾收集器。Rust 不强制执行编程范式,但受到函数式编程思想的影响。 最初是由 Mozilla 员工 Graydon Hoare 在 2006 年…

《基于机器学习的DDoS攻击检测与防御系统设计与实现》开题报告

目录 一、课题的研究目的和意义 1.1课题背景 1.2课题目的 (1)提高DDoS攻击检测的准确性 (2)加强DDoS攻击的防御能力 (3)提升网络安全防护的技术水平 1.3课题意义 (1)理论意义…

【2025】基于springboot+vue的汽车销售试驾平台(源码、万字文档、图文修改、调试答疑)

基于 Spring Boot Vue 的汽车销售试驾平台通过整合前后端技术,实现了汽车销售和试驾预约的信息化和智能化。系统为管理员和用户提供了丰富的功能,提升了客户体验和销售效率,增强了数据分析能力,为汽车销售行业的发展提供了新的途…

C语言每日一练——day_5

引言 针对初学者,每日练习几个题,快速上手C语言。第五天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…

【社区投稿】深入再谈智能指针、AsRef引用与Borrow借用

深入再谈智能指针、AsRef引用与Borrow借用 这是一个具有深度的技术主题。每次重温其理论知识&#xff0c;都会有新的领悟。大约 2 年前&#xff0c;我曾就这一技术方向撰写过另一篇短文《从类型转换视角&#xff0c;浅谈Deref<Target T>, AsRef<T>, Borrow<T&g…

串口通信函数汇总-ing

谢谢各位佬的阅读&#xff0c;本文是我自己的理解&#xff0c;如果您发现错误&#xff0c;麻烦请您指出&#xff0c;谢谢 首先谈谈我自己对于串口的理解&#xff0c;随便拿一个嵌入式的板子&#xff0c;它上面有两个引脚&#xff0c;一个是rx&#xff0c;一个是tx&#xff0c;r…

JVM垃圾回收面试题及原理

1. 对象什么时候可以被垃圾器回收 如果一个或多个对象没有任何的引用指向它了&#xff0c;那么这个对象现在就是垃圾&#xff0c;如果定位了垃圾&#xff0c;则有可能会被垃圾回收器回收 如果要定位什么是垃圾&#xff0c;有两种方式来确定 引用计数法可达性分析算法 1.1 …

Flutter 小技巧之通过 MediaQuery 优化 App 性能

许久没更新小技巧系列&#xff0c;温故知新&#xff0c;在两年半前的《 MediaQuery 和 build 优化你不知道的秘密》 我们聊过了在 Flutter 内 MediaQuery 对应 rebuild 机制&#xff0c;由于 MediaQuery 在 MaterialApp 内&#xff0c;并且还是一个 InheritedWidget &#xff0…

SpringBoot基础Kafka示例

这里将生产者和消费者放在一个应用中 使用的Boot3.4.3 引入Kafka依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>yml配置 spring:application:name: kafka-1#kafka…

Spring 的三种注入方式?

1. 实例的注入方式 首先来看看 Spring 中的实例该如何注入&#xff0c;总结起来&#xff0c;无非三种&#xff1a; 属性注入 set 方法注入 构造方法注入 我们分别来看下。 1.1 属性注入 属性注入是大家最为常见也是使用最多的一种注入方式了&#xff0c;代码如下&#x…

STM32第一天建立工程

新建一个工程 1&#xff1a;新建一个文件&#xff0c;添加文件 a:DOC工程说明 》doc说明文档 b&#xff1a;Libraries固件库 》cmsis内核文件 &#xff08;一般这就是stm32内核文件&#xff09; 》FWLIB外设文件 &#xff08;这种就是stm32外设文件不全&#xff09; 》start…

搭建本地化笔记AI:用Copilot+deepseek+nomic-embed-text构建本地智能知识系统

安装Ollama https://ollama.com/ 下载模型 下载大语言模型 根据自己电脑的配置选择模型的大小 ollama run deepseek-r1:8b 下载向量处理模型 创建向量数据库时需要使用Embedding模型对文本进行向量化处理 ollama pull nomic-embed-text 查看安装的模型 ollama listNAME …

【蓝桥杯单片机】第十一届省赛

一、真题 二、创建工程 1.在C盘以外的盘新建文件夹&#xff0c;并在文件夹里面创建两个文件夹Driver 和Project 2.打开keil软件&#xff0c;在新建工程并选择刚刚建好的project文件夹&#xff0c;以准考证号命名 3.选择对应的芯片型号 4.选择否&#xff0c;即不创建启动文件 …

【存储中间件】Neo4J图数据库超详细教程(一):相关介绍、特点及优势、数据模型、软件安装

文章目录 Neo4J超详细教程一、Neo4J相关介绍1.为什么需要图数据库方案1&#xff1a;Google方案2&#xff1a;Facebook 2.特点和优势3.什么是Neo4j4.Neo4j数据模型图论基础属性图模型Neo4j的构建元素 5.软件安装 个人主页&#xff1a;道友老李 欢迎加入社区&#xff1a;道友老李…

xxl-job部署在docker-destop,实现定时发送预警信息给指定邮箱

XXL-JOB XXL-JOB是一个分布式任务调度平台&#xff08;XXL是作者徐雪里姓名拼音的首字母&#xff09;&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 源码仓库地址&#xff1a;https://github.com/xuxueli/xxl-job 源码结构&#xff1a; 系统架构 在xxl-j…

【QT】QScrollBar设置样式:圆角、隐藏箭头、上边距等

目录 0.简介 1.原理 2.具体代码 0.简介 环境&#xff1a;Ubuntu22.04、qtDesigner绘制UI 项目需要&#xff0c;按照UI修改滚动条样式&#xff0c;滚动条我使用的是QScrollBar&#xff0c;默认样式和修改之后的样式如下&#xff1a; 1.原理 2.具体代码 我是用qtDesigner绘制…

trae中文版AI搭建完整可用的项目框架

Trae 是由字节跳动推出的 AI 原生集成开发环境&#xff08;AI IDE&#xff09;&#xff0c;号称可以搭建完整项目&#xff0c;个人试用后体验确实比Cursor或cline更便捷&#xff0c;因为他多个文件关联准确率更高。 正式版的trae不支持大陆使用&#xff0c;不过目前已经推出了…

cfi网络安全 网络安全hcip

目录 RIP (路由信息协议) 算法 开销 版本 开销值的计算方式 RIPV1和RIPV2的区别 RIP的数据包 Request(请求)包 Reponse(应答)包 RIP的特征 周期更新 RIP的计时器 1&#xff0c;周期更新计时器 2&#xff0c;失效计时器 3&#xff0c;垃圾回收计时器 RIP的核心思…

Banana Pi 与瑞萨电子携手共同推动开源创新:BPI-AI2N

2025年3月11日&#xff0c; Banana Pi 开源硬件平台很高兴宣布&#xff0c;与全球知名半导体解决方案供应商瑞萨电子&#xff08;Renesas Electronics&#xff09;正式达成技术合作关系。此次合作标志着双方将在开源技术、嵌入式系统和物联网等领域展开深度合作&#xff0c;为全…