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
相关推荐
Forsete16 小时前
LINUX驱动开发#9——定时器
linux·驱动开发·单片机
梦帮科技18 小时前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
Lois_Luo18 小时前
关闭Win10强制所有应用以管理员身份运行
windows
luoyayun36119 小时前
实现Windows系统标题栏颜色跟随主题动态切换
windows·系统标题栏颜色·标题栏颜色
猫头虎20 小时前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy
呉師傅1 天前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
JMchen1231 天前
AI编程与软件工程的学科融合:构建新一代智能驱动开发方法学
驱动开发·python·软件工程·ai编程
梦帮科技1 天前
OpenClaw 桥接调用 Windows MCP:打造你的 AI 桌面自动化助手
人工智能·windows·自动化
春日见1 天前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
C++ 老炮儿的技术栈1 天前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt