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
相关推荐
fly五行9 小时前
Windows 系统下使用 Docker 安装 Milvus 向量数据库
windows·docker·milvus
hello kitty w9 小时前
Python学习(11) ----- Python的泛型
windows·python·学习
加号310 小时前
【C#】获取电脑网卡MAC地址
windows·c#
QT 小鲜肉10 小时前
【个人成长笔记】在本地Windows系统中如何正确使用adb pull命令,把Linux系统中的文件或文件夹复制到本地中(亲测有效)
linux·windows·笔记·学习·adb
-指短琴长-12 小时前
Docker基础【Ubuntu安装/Windows安装】
windows·ubuntu·docker
shykevin14 小时前
uni-app x导航区域跳转
windows·uni-app
熙xi.14 小时前
Linux I²C 总线驱动开发:从架构到实战的完整指南
linux·c语言·驱动开发
讨喜Dobi15 小时前
深浅复制
windows
彷徨而立16 小时前
【C/C++】只知道窗口句柄,如何擦除窗口内容,清理窗口?
c语言·c++·windows
guojikun17 小时前
一键配置 Web 前端开发环境(PowerShell 自动化脚本)
windows·web前端·powershell