windows显示驱动开发-调试间接显示驱动程序(三)

复制代码
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"TriggerUniqueness"=dword:00000001
间接显示屏幕捕获调试功能

从 Windows 内部版本 25164开始,IddCx 能够转储 IddCx 传递给驱动程序的桌面帧。 此功能可用于调试视觉问题。 它可以与调试覆盖(如着色脏框架区域)结合使用。

由于 IddCx 将在每个帧上查找帧捕获的调试注册表设置中的更改, 因此 IddCxDebugCtrl中有一个主控件值,用于控制 IddCx 是否将为每个帧检查捕获注册表值。 这可确保禁用时不会造成性能损失(当 OPM 接口对驱动程序处于活动状态时,将禁用此功能)。

控制捕获的注册表值

以下注册表值位于 HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture 中。 应在设置 IddCxDebugCtrl 值之前创建此注册表文件夹。

名称 缺少默认值 含义
TriggerUniqueness 0 调用每个 IddCx 交换链以获取新帧时,它将读取此值。 如果 TriggerUniqueness 为非零且不同于以前的读取值,则将读取以下值并启用帧捕获。
TargetMask 0xffff 位掩码:适配器上每个目标索引的一位,用于控制该目标的交换链是否应成为此捕获序列的一部分。
CaptureCount 10 每个 enabled-for-capture IddCx 交换链应捕获的帧数。
SkipFrames 0 要在每个捕获的帧之间跳过的帧数。
CaptureSessionID 0 将在其中启用帧捕获的会话。 值为零始终表示控制台会话。
ScaleFactor 100 控制用于确定捕获文件尺寸的比例系数,有效值 1-100
CaptureFolder c:\IddCxImages 将写入捕获文件的文件夹。 如果 c:\IddCxImages 文件夹不存在,则会创建该文件夹。

捕获参数按目标存储,这样捕获会话就可以跨给定目标上的模式更改。

如果在监视对象仍在从以前的捕获捕获中捕获帧时检测到新的非零 TriggerUniqueness 值,则会停止当前捕获并启动新触发的捕获。

使用 REG 文件控制帧捕获

REG 文件是控制帧捕获的好方法。 一个文件可以设置初始值,另一个文件可以更新 TriggerUniqueness

用于设置初始值的 REG 文件
复制代码
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]
"IddCxDebugCtrl"=dword:2200

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:0
用于更新 TriggerUniqueness 的 REG 文件
复制代码
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:1
文件名和格式

捕获的帧采用 PNG 文件格式,文件名格式如下:

S<会话 ID,主机 >为零_Ad<ID 适配器 LUID > 的十六进制值_T<ID 目标 Idx > 的十六进制值_Frame<IDDCX_METADATA 中的帧数。 hhmmss >中 mmddyy format>Time 的 PresentationFrameNumber><<Date.png

下面是一些示例文件名:

  • S0_Ad8ade_T3_Frame2343_020422_173434.png
  • S0_Ad8ade_T3_Frame2344_020422_173434.png
  • S0_Ad8ade_T3_Frame2345_020422_173435.png
WPP 日志记录

对于启动的每个 捕获会话,将为从注册表中读取或默认设置的每个值记录 WPP 消息。

每次捕获帧并将其写入文件时,IddCx 都会添加一条 WPP 消息,其中包含图像文件的完整文件名。

示例捕获设置
从首次连接监视器时捕获帧

下面是捕获第一次插入任何监视器(后跟 REG 文件)的前 20 帧所需的注册表值。

注册表项 说明
CaptureCount 20 设置 20 帧,而不是默认 10 帧
TriggerUniqueness 1 任何非零值都将作为目标对象以零开头作为存储唯一性
在监视器处于活动状态时开始捕获

如果交换链在驱动程序获取每个帧时检查新的唯一性值,则应最后设置 TriggerUniqueness 条目,以确保按预期读取所有参数。 以下示例还将文件分辨率减半以节省空间,并将捕获文件写入 c:\frames 文件夹中。

注册表项 说明
CaptureCount 100 设置 100 帧,而不是默认的 10 帧
ScaleFactor 50 设置 50% 分辨率以节省空间
CaptureFolder c:\frames 设置输出文件夹
TriggerUniqueness 1 任何非零值都将作为目标对象以零开头作为存储唯一性工作
复制代码
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"CaptureFolder"="c:\\frames"
"ScaleFactor"=dword:00000032
"TriggerUniqueness"=dword:00000001
从远程会话 3 中的第二个目标捕获 10 帧,每个捕获之间有 5 个帧

此捕获还使用调试覆盖来突出显示每个帧的脏区域。

注册表项 说明
IddCxDebugCtrl 还设置了位0x0400 0x0400启用脏区域突出显示,还需要0x2200位
CaptureSessionID 3 启用远程会话 3 中的捕获
TargetMask 0x2 位 1 对应于目标 Idx 1
SkipFrames 5 跳过每个捕获之间的 5 帧捕获
TriggerUniqueness 1 任何非零值都将作为目标对象以零开头作为存储唯一性
复制代码
Windows Registry Editor Version 5.00  

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]  
"IddCxDebugCtrl"=dword:2600

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureSessionID"=dword:00000003
"TargetMask"=dword:00000002
"SkipFrames"=dword:00000005    
"TriggerUniqueness"=dword:00000001
相关推荐
sukalot2 小时前
windows显示驱动开发-间接显示驱动程序
驱动开发
清静诗意10 小时前
Windows 11 WSL2 迁移到非系统盘(E 盘)教程
windows·wsl
王小义笔记10 小时前
windows电脑如何执行openssl rand命令
windows·openssl
私人珍藏库11 小时前
[Windows] 3D软件 Blender 5.0 alpha版
windows·3d·建模
Saniffer_SH14 小时前
【高清视频】CXL 2.0 over Fibre演示和答疑 - 将内存拉到服务器10米之外
运维·服务器·网络·人工智能·驱动开发·计算机外设·硬件工程
努力还债的学术吗喽16 小时前
pycharm找不到Tencent Cloud CodeBuddy如何安装[windows]?pycharm插件市场找不到插件如何安装?
ide·windows·pycharm·插件·plugin·codebuddy
两千次17 小时前
写csv测试
服务器·数据库·windows
安当加密17 小时前
SLA操作系统双因素认证实现Windows远程桌面OTP双因子安全登录—从零搭建企业级RDP安全加固体系
windows·安全
nice_lcj52018 小时前
Java 集合框架之 List 全面解析(从概念到实践)
java·windows·list