当前位置: 首页 > news >正文

Windows 图形显示驱动开发-WDDM 3.2-可调性改进

TDR 可调试性改进

为了帮助 TDR(超时检测和恢复)分析,OS 传统上会调用内核模式驱动程序的 DxgkddiCollectDbgInfo 回调,以允许驱动程序将自己的有效负载写入系统从客户计算机上传的 TDR 报告中。

从 Windows 11 版本 24H2 (WDDM 3.2) 开始,将提供本文中所述的 TDR 调试改进。 图形驱动程序开发人员应熟悉 Windows 中的 GPU 超时检测和恢复,如超时检测和恢复和 Windows 8 及更高版本中的 TDR 中所述。

DDI 更改

 DxgkddiCollectDbgInfo2

DxgkddiCollectDbgInfo2 已作为 TDR 调试扩展添加。 此回调允许 OS 将有关 TDR 根本原因的更详细信息传递给 KMD。 内核模式驱动程序 (KMD) 反过来可以保存与负责 TDR 的 GPU 部分相关的状态。

DxgkddiCollectDbgInfo2 是现有 DxgkddiCollectDbgInfo 的超集。

  1. 实施 DxgkddiCollectDbgInfo2 不需要 WDDM 3.2 驱动程序,在这种情况下 OS 会调用 DxgkddiCollectDbgInfo。
  2. 如果 KMD 确实实施了 DxgkddiCollectDbgInfo2,则 OS 在所有情况下都会调用它,而不是 DxgkddiCollectDbgInfo。

DRIVER_INITIALIZATION_DATA 结构被扩展,以包含指向 DxgkddiCollectDbgInfo2 的指针。 

DXGKARG_COLLECTDBGINFO2

OS 会将添加的 DXGKARG_COLLECTDBGINFO2 结构添加到 DxgkddiCollectDbgInfo2。

DXGKARG_COLLECTDBGINFO2 的布局与现有 DXGKARG_COLLECTDBGINFO 结构向后兼容,以允许 DxgkDdiCollectDbgInfo2 实施根据需要重复使用现有 DxgkDdiCollectDbgInfo 帮助程序。 因此,Reason、pBuffer、BufferSize 和 pExtension 字段具有相同的语义。

以下其他字段位于 DXGKARG_COLLECTDBGINFO2 中,但不在DXGKARG_COLLECTDBGINFO 中。

  • TdrType
  • TdrPayloadSize
  • TdrPayload

对于某些 TDR 类型,OS 在 TdrPayloadSize 字节的 TdrPayload 缓冲区中提供了其他信息。 它可以为 NULL,并且驱动程序应处理这种情况,而不会出现崩溃。

当有效负载不为 NULL 时,可以将其强制转换为与 TDR 类型对应的结构。 OS 可能会以向后兼容的方式扩展这些结构,从而在末尾添加新字段。 驱动程序必须在访问 TdrPayload 字段之前检查 TdrPayloadSize,以确保 OS 实施所需的有效负载版本或更高版本。

TdrPayload 指向的内存仅在 DxgkddiCollectDbgInfo2 调用期间有效。 驱动程序不应在 DxgkddiCollectDbgInfo2 调用结束后存储指向 TdrPayload 的指针。

从 WDDM 3.2 开始,将添加以下有效负载结构作为 TdrPayload 将指向的可能有效负载。

  • 引擎超时有效负载的 DXGK_TDR_PAYLOAD_ENGINE_TIMEOUT(TdrType 等于 DXGK_TDR_TYPE_ENGINE_TIMEOUT)。
  • VSync 超时有效负载的 DXGK_TDR_PAYLOAD_VSYNC_TIMEOUT(TdrType 等于 DXGK_TDR_TYPE_VSYNC_TIMEOUT)。
http://www.dtcms.com/a/62880.html

相关文章:

  • [论文阅读]Trustworthiness in Retrieval-Augmented Generation Systems: A Survey
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.3.2使用GraphQL封装查询接口
  • 2-003:MySQL 三层 B+ 树能存多少数据?
  • torch.distributions.categorical.Categorical 介绍
  • 智慧停车小程序:实时车位查询、导航与费用结算一体化
  • Datawhale AI + 办公 笔记2
  • linux自启动服务
  • 使用 Tesseract 进行 OCR 识别的详细指南
  • Linux开发工具----vim
  • Room数据库的使用
  • STM32Cubemx-H7-7-OLED屏幕
  • 【Python】【数据分析】Python 数据分析与可视化:全面指南
  • 【Python 2D绘图】Matplotlib绘图(统计图表)
  • 【冯诺依曼:到底有什么重大贡献 关键字摘抄】
  • ngx_conf_param
  • JAVA面试_进阶部分_java中四种引用类型(对象的强、软、弱和虚引用)
  • 开发中常见状态码以及状态码用途
  • Mysql8.x常用命令
  • XXE 目录
  • 从零开发Chrome广告拦截插件:开发、打包到发布全攻略
  • 企业网设计
  • 【数据库】10分钟学会MySQL的增删改查:数据库、表、表记录操作指南
  • 数字电路逻辑代数 | 运算 / 定律 / 公式 / 规则 / 例解
  • MySQL创建数据库和表,插入四大名著中的人物
  • Node.js中HTTPS模块应用详解
  • 虚拟电商-数据库分库分表
  • PROC程序报无效的字符串或缓冲区长度问题
  • Java HashMap 底层原理
  • 【YOLO】AutoDL 训练模型
  • Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南