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

window显示驱动开发—在注册表中设置 DXGI 信息

DXGI 和参考光栅器使用以下注册表项:

DWORD Software\Microsoft\DXGI\DisableFullscreenWatchdog
设置为 1 可禁用监视器线程。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\FlushOften
设置为 1 以经常刷新。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\FenceEachEntryPoint
设置为 1 以使用 GPU 对 DDI 函数围栏进行每次调用。 使用 GPU 进行隔离意味着刷新命令批处理和块,直到 GPU 处于空闲状态。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\Debug
将 设置为 1 以:

  • 经常刷新,并使用 GPU 对 DDI 函数围栏进行每次调用。

  • (RefRast) 单线程运行引用光栅器。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\D3D10RefGdiDisplayMask
如果设置为 1) ,则 DWORD 掩码中的每个位都会启用 (;如果设置为 0,则禁用 () 显示监视器(由引用设备控制)。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\SingleThreaded
设置为 1 以启用运行 RefRast 单线程。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\ForceHeapAlloc
设置为 1 可使引用设备使用常规进程堆创建资源,而不是使用其他分配机制。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\AllowAsync
设置为 1 以允许引用设备的第二个线程异步运行 (也就是说,允许多个命令缓冲区) 未完成。

引用硬件通常在第二个线程中运行;但是,此第二个线程在主线程可以继续之前完成其所有工作。

DWORD Software\Microsoft\Direct3D\ReferenceDevice\SimulateInfinitelyFastHW
设置为 1 可使引用设备的模拟硬件进程仅执行几个有限的命令,使引用设备看起来非常快速 (,实质上不执行任何) 。

驱动程序可以将此密钥用作性能工具。

1. DXGI 相关注册表项

(1) DisableFullscreenWatchdog

  • 路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DXGI\DisableFullscreenWatchdog
  • 类型: DWORD
  • 作用:
  1. 默认行为: DXGI 会启动一个监视器线程(Watchdog Thread),检测全屏应用的响应性。若应用阻塞(如死循环),DXGI 会强制恢复窗口模式。
  2. 设置为 1: 禁用此监视器线程,适用于需要独占全屏控制的场景(如游戏或专业图形应用)。
  • 风险: 禁用后,应用崩溃可能导致显示模式无法自动恢复,需手动干预。

2. 参考光栅器(RefRast)调试与性能控制

参考光栅器是微软提供的软件实现的 D3D 设备,用于功能验证和调试。以下注册表项均位于:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D\ReferenceDevice\

(1) FlushOften

  1. 类型: DWORD
  2. 作用:
  • 设置为 1: 强制 RefRast 频繁刷新命令队列(类似手动调用 ID3D11DeviceContext::Flush)。
  • 用途: 检测命令提交间的资源依赖问题,但会显著降低性能。

(2) FenceEachEntryPoint

  1. 类型: DWORD
  2. 作用:
  • 设置为 1: 对每个 DDI 函数调用插入 GPU 围栏(Fence),强制等待 GPU 空闲后再继续。
  • 用途: 精确调试 GPU 命令顺序问题,但会引入极高延迟。

(3) Debug

  1. 类型: DWORD
  2. 作用:
  • 设置为 1: 组合以下行为:
  • 启用 FlushOften 和 FenceEachEntryPoint。
  • 强制 RefRast 单线程运行(禁用并行命令处理)。
  • 用途: 简化调试复现问题,牺牲性能换取确定性。

(4) D3D10RefGdiDisplayMask

  1. 类型: DWORD
  2. 作用:
  • 按位掩码控制 RefRast 输出的显示监视器(如 0x1 表示仅主显示器)。
  • 用途: 多显示器环境下隔离测试目标。

(5) SingleThreaded

  1. 类型: DWORD
  2. 作用:
  • 设置为 1: 强制 RefRast 单线程运行,禁用异步命令处理。
  • 用途: 排查多线程同步问题。

(6) ForceHeapAlloc

  1. 类型: DWORD
  2. 作用:
  • 设置为 1: 使用进程堆(HeapAlloc)而非专用内存池分配资源。
  • 用途: 检测内存管理问题(如泄漏或越界访问)。

(7) AllowAsync

  1. 类型: DWORD
  2. 作用:
  • 设置为 1: 允许 RefRast 的异步线程处理命令缓冲区(模拟真实硬件行为)。
  • 默认行为: 异步线程需完成所有工作后主线程才继续。
  • 用途: 测试多线程命令提交的稳定性。

(8) SimulateInfinitelyFastHW

  1. 类型: DWORD
  2. 作用:
  • 设置为 1: RefRast 跳过实际渲染操作,仅模拟命令提交流程。
  • 用途:
  • 性能工具: 测量 CPU 端驱动开销(如 API 调用延迟)。

快速验证应用逻辑,忽略 GPU 执行时间。

  • 3. 典型应用场景

(1) 驱动开发调试

  • 问题复现: 启用 Debug=1 + SingleThreaded=1 简化多线程问题定位。
  • GPU 同步验证: 使用 FenceEachEntryPoint=1 检查命令提交顺序错误。

(2) 应用兼容性测试

  • 内存问题检测: 设置 ForceHeapAlloc=1 结合工具(如 DrMemory)捕捉泄漏。
  • 多显示器隔离: 通过 D3D10RefGdiDisplayMask 限制输出到特定显示器。

(3) 性能分析

  • CPU 开销测量: 启用 SimulateInfinitelyFastHW=1 剥离 GPU 时间,专注驱动逻辑耗时。
  • 异步行为验证: 对比 AllowAsync=0 和 AllowAsync=1 的性能差异。
http://www.lqws.cn/news/584713.html

相关文章:

  • 【C语言】知识总结·内存函数
  • 三态门Multisim电路仿真——硬件工程师笔记
  • 优雅草蜻蜓HR人才招聘系统v2.0.9上线概要 -优雅草新产品上线
  • Amazon Athena:无服务器交互式查询服务的终极解决方案
  • 33. 搜索旋转排序数组
  • pytorch底层原理学习--PyTorch 架构梳理
  • FreePDFv3.0.0:颠覆你的文献阅读习惯
  • 16014.rtsp推流服务器
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set
  • TDH社区开发版安装教程
  • [学习]M-QAM的数学原理与调制解调原理详解(仿真示例)
  • [面试]手写题-Promise.all() Promise.race()
  • 机器学习20-线性网络思考
  • 第三十六章 CAN——控制器局域网络接口
  • 字节跳动 C++ QT PC客户端面试
  • 论文中用matplotlib画的图,如何保持大小一致。
  • Vue2中使用DHTMLX Gantt
  • 深入理解Webpack的灵魂:Tapable插件架构解析
  • 使用Dirichlet分布进行随机初始化
  • 文心大模型 4.5 系列开源首发:技术深度解析与应用指南
  • StackGAN(堆叠生成对抗网络)
  • vscode 改注释的颜色,默认是灰色的,想改成红色
  • Prompt Enginering
  • 会议室预约系统的典型架构
  • Prompt 精通之路(一)- AI 时代的新语言:到底什么是 Prompt?为什么它如此重要?
  • Python 数据分析与机器学习入门 (五):Matplotlib 数据可视化基础
  • ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
  • 使用nomachine远程连接ARM设备桌面
  • 【Vscode】Vscode切换成中文语言
  • Java历史:从橡树到火星探索,从微软法律战到Spring、Gradle