间接显示驱动程序 (IDD) 是 UMDF 驱动程序,因此 UMDF 调试文档(例如 确定 UMDF 驱动程序加载失败的原因或 UMDF 设备无法启动)是一个很好的起点。注意本文使用windbg进行调试。

注册表控件

Indirect Display Driver Class eXtension (IccDx) 具有一些可用于帮助调试 IDD 的注册表设置。 所有注册表值都位于HKLM\System\CurrentControlSet\Control\GraphicsDrivers注册表项下。

值名称详细信息
TerminateIndirectOnStall如果监视器在帧可用后 10 秒内未处理帧,则零值将禁用终止驱动程序的监视器。 任何其他值都将使监视器保持启用状态。
IddCxDebugCtrl启用 IddCx 的不同调试方面的位字段。 请参阅下表。
IddCxDebugCtrl 值
IddCxDebugCtrl 中的位含义
0x0001当 IddCx 检测到错误时中断调试器
0x0002加载 IddCx 时中断调试器
0x0004卸载 IddCx 时中断调试器
0x0008调用 IddCx DriverEntry 时中断调试器
0x0010调用驱动程序绑定时中断调试器
0x0020调用驱动程序启动时中断调试器
0x0040调用驱动程序取消绑定时中断调试器
0x0080禁用 DDI 监视器,该监视器终止驱动程序在 DDI 调用中花费的时间过长
0x0100未使用
0x0200启用调试覆盖,请参阅下文
0x0400在框架中的脏凹槽上覆盖彩色 alpha 框;需要设置0x0200
0x0800将 pref 统计信息叠加到帧中
0x2000IddCx 将查询每个帧的捕获帧注册表值;得设置0x0200

若要运行任何覆盖函数,必须启用 D3D11_CREATE_DEVICE_BGRA_SUPPORT 标志创建由驱动程序创建并传递给 IddCxSwapChainSetDevice 的 Direct3D 设备。

IddCx WPP 跟踪

Iddcx 应用 WPP 基础结构 来记录调试信息。 WPP 信息可以捕获到文件中,当此捕获正在进行时,它可以显示在内核调试器中。

捕获 IddCx WPP 跟踪

可借助多种方式启用 WPP 跟踪。 一种便捷方法是在 logman.exe 程序中使用 生成。 倘若将以下行复制到批处理文件并从提升的命令提示符运行,则会将 IddCx WPP 跟踪收集到 IddCx.etl 档案中。

@echo off
echo Starting WPP tracing....
logman create trace IddCx -o IddCx.etl -ets -ow -mode sequential -p  {D92BCB52-FA78-406F-A9A5-2037509FADEA} 0x4f4 0xFF
echo Tracing enabled
pause
echo Stopping WPP tracing....
logman -stop IddCx -ets