次の方法で共有


間接ディスプレイ ドライバーのデバッグ

間接ディスプレイ ドライバー (ID) は UMDF ドライバーであるため、 UMDF ドライバーの読み込みに失敗した理由や UMDF デバイスの起動に失敗する理由の決定など、UMDF デバッグ ドキュメントが適しています。 このページでは、間接的な表示固有のデバッグ情報を提供します。

レジストリ コントロール

間接ディスプレイ ドライバー クラス eXtension (IccDx) には、ID のデバッグを支援するために使用できるいくつかのレジストリ設定があります。 すべてのレジストリ値は、 HKLM\System\CurrentControlSet\Control\GraphicsDrivers レジストリ キーの下にあります。

値の名前 詳細
TerminateIndirectOnStall 0 の値を指定すると、使用可能なフレームから 10 秒以内にフレームが処理されない場合にドライバーを終了するウォッチドッグが無効になります。 その他の値はウォッチドッグを有効のままにします。
IddCxDebugCtrl IddCx のさまざまなデバッグ側面を有効にしたビット フィールド。 この後の表を参照してください。

Note

TerminateIndirectOnStall レジストリ値を使用してウォッチドッグを無効にすると、HLK テストは失敗します。

IddCxDebugCtrl 値

IddCxDebugCtrl のビット 意味
0x0001 IddCx がエラーを検出したときにデバッガーに中断する
0x0002 IddCx が読み込まれるときにデバッガーに中断する
0x0004 IddCx が読み込まれないときにデバッガーに中断する
0x0008 IddCx DriverEntry が呼び出されたときにデバッガーに中断する
0x0010 ドライバーバインドが呼び出されたときにデバッガーにブレークインする
0x0020 ドライバー開始が呼び出されたときにデバッガーにブレークインする
0x0040 ドライバーアンバインドが呼び出されたときにデバッガーにブレークインする
0x0080 ドライバーが DDI 呼び出しに時間がかかりすぎる終了 DDI ウォッチドッグを無効にします。
0x0100 未使用
0x0200 デバッグ オーバーレイを有効にする(以下を参照)
0x0400 フレーム内ダーティ rect の上に色付きのアルファ ボックスをオーバーレイします。0x0200を設定する必要があります
0x0800 フレームにプリフェッチ統計をオーバーレイする
0x2000 IddCx は、フレームごとにキャプチャ フレーム レジストリ値に対してクエリを実行します。0x0200を設定する必要がある

Note

オーバーレイ関数を機能させるには、ドライバーによって作成され、 IddCxSwapChainSetDevice に渡される Direct3D デバイスを、 D3D11_CREATE_DEVICE_BGRA_SUPPORT フラグを使用して作成する必要があります。

IddCx WPP トレース

Iddcx は、 WPP インフラストラクチャ を使用してデバッグ情報をログに記録します。 WPP 情報はファイルにキャプチャでき、このキャプチャの進行中はカーネル デバッガーに表示できます。

IddCx WPP トレースのキャプチャ

WPP トレースを有効にする方法はいくつかあります。 便利な方法の 1 つは、 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

キャプチャされる内容の制御

logman.exe の Flags パラメーター (この場合は0x4f4) は、どの WPP メッセージ IddCx ログを制御します。 この意味の値は、Windows ビルド 19041 以降で変更されています。

Windows ビルド 19041 以降のフラグの意味

Flags はビット フィールドであり、各ビットはその種類のメッセージをキャプチャするかどうかを制御します。

フラグビット キャプチャされたメッセージの種類
0x001 未使用
0x002 未使用
0x004 エラー
0x008 デバッグ オーバーレイが有効になっている場合など、問題のないエラー D3D11_CREATE_DEVICE_BGRA_SUPPORT 設定なし
0x010 IddCx オブジェクト
0x020 IddCx への UMDF フレームワーク呼び出し
0x040 IddCx からドライバーへの DDI 呼び出し
0x080 ドライバーから IddCx への低頻度の呼び出し
0x100 ドライバーから IddCx への高周波フレーム関連の呼び出し
0x200 ドライバーから IddCx への高周波カーソル関連の呼び出し
0x400 カーネルから IddCx への呼び出し
0x800 IddCx からカーネルへの呼び出し

0x0f4の通常のログ記録シナリオは、出発点として適しています。 フレームごとの情報を表示する場合は、0x1f4 を開始することをお勧めします。

Windows ビルド 19041 より前の意味のフラグ

フラグはレベルとして扱われ、レベルを上げるごとに、前のレベルのすべてのメッセージと共に新しい種類のメッセージが追加されました。

フラグ レベルの値 キャプチャされたメッセージの種類
1 非使用
2 エラー
3 警告
4 情報
5 詳細

IddCx WPP トレースのデコード

すべての WPP トレースと同様に、WPP 情報は pdb ファイルに格納されるため、デコードするにはその情報を含む pdbs へのアクセスが必要です。 Windows ビルド 19560 以降、パブリック シンボル サーバー上の IddCx.pdb には、WPP メッセージをデコードするために必要な WPP 情報が含まれています。 Windows ビルド 19560 より前では、パブリック シンボル サーバー上の IddCx.pdb には、WPP デコードを有効にするために必要な WPP 情報が 含まれていません

標準の WPP デコード ツールを使用して、メッセージのデコードと表示を行うことができます。

IddCx エラーのデバッグ

間接ディスプレイ ドライバーの開発中に、IddCx がエラーを検出したときに追加情報を取得すると便利です。 前述のように、IddCx がエラーを検出したときにデバッガーに中断するように IddCx を構成できますが、エラーのコンテキストを理解するために、最後のいくつかのトレース メッセージに IddCx エラー メッセージを表示することも便利です。

上記のセクションを使用すると、 logman.exe を使用して WPP トレースを有効にし、次の情報を使用して、エラーの時点でカーネル デバッガーのメモリ内 WPP バッファーを表示できます。

Note

これを機能させるには、デバッガーが WPP デコード情報を含む IddCx.pdb を取得するために、カーネル デバッガー (ユーザー モード デバッガーではなく) と Windows ビルド 19560 以降を使用する必要があります。

次の例では、間接ディスプレイ ドライバーは IddCxMonitorArrivalを呼び出します。 処理の一環として、IddCx はドライバーの EvtIddCxMonitorQueryTargetModes DDI を呼び出します。 この例では、ドライバーがDISPLAYCONFIG_VIDEO_SIGNAL_INFOモードを返しました。AdditionalSignalInfo.vSyncFreqDivider を 0 に設定します。これは無効であり、エラーの原因になります。

使用されるデバッガー コマンドの一覧を次に示します。

コマンド 意味
!wmitrace.bufdump すべてのログ バッファーを名前と共に一覧表示します。IddCx は、logman.exe コマンド ラインから取得した名前です。
!wmitrace.logdump LogBufferName 次の例の IddCx である、指定されたログ バッファーの内容をデコードして表示します。

この例のデバッガー出力を次に示します。

0: kd> !wmitrace.bufdump
(WmiTrace) BufDump
    LoggerContext Array @ 0xFFFFE6055EB0AC40 [64 Elements]

 Logger Context  Number Available   Size    NPP Usage   PP Usage
================ ====== ========= ======== =========== ==========
ffffe6055ee6c800      4         2     4096       16384             Circular Kernel Context Logger
ffffe6055eaa8640      2         2    65536      131072             Eventlog-Security
ffffe6055eb83a00      2         1    65536      131072             DefenderApiLogger
ffffe6055ebb6a00      2         2    65536      131072             DefenderAuditLogger
ffffe6055eb74040      2         1    16384       32768             DiagLog
ffffe6055eb74640      4         2    65536      262144             Diagtrack-Listener
ffffe6055eaa8040      2         2    65536                 131072  EventLog-Application
ffffe6055eb7c040      2         1    65536      131072             EventLog-System
ffffe6055eb7c640      5         3    65536      327680             LwtNetLog
ffffe6055eb85040      4         2    65536      262144             Microsoft-Windows-Rdp-Graphics-RdpIdd-Trace
ffffe6055eb85680      8         6   131072     1048576             NetCore
ffffe6055eb89040      4         4     4096       16384             NtfsLog
ffffe6055eb89640      8         6   131072     1048576             RadioMgr
ffffe605683ef040      3         2     4096                  12288  WindowsUpdate_trace_log
ffffe6055eb8f640      2         2     2048        4096             UBPM
ffffe6055eb108c0      4         2    16384       65536             WdiContextLog
ffffe6055eb968c0      4         2    81920      327680             WiFiSession
ffffe60567e8a6c0      5         3     8192       40960             IddCx
ffffe605658379c0     10         9     3072       30720             umstartup
ffffe605659d4840     10         9   131072     1310720             SCM
ffffe605655af9c0      2         1    65536      131072             UserNotPresentTraceSession
ffffe605659d6840      2         1     4096        8192             COM
ffffe60565925080     10         8    20480      204800             Terminal-Services-LSM
ffffe60565956080     10         9    20480      204800             Terminal-Services-RCM
ffffe6055eba39c0     50        49     3072      153600             UserMgr
ffffe60567388280      2         2    32768       65536             WFP-IPsec Diagnostics
ffffe605678a3040      5         3     4096       20480             MpWppTracing-20200424-092923-00000003-ffffffff
ffffe60567e35080      2         1    65536      131072             ScreenOnPowerStudyTraceSession
ffffe605655e0a00      5         3     4096       20480             SHS-04242020-092951-7-7f
ffffe605692054c0      4         4     8192       32768             RdpIdd
ffffe60567f597c0      4         3    65536      262144             SgrmEtwSession
ffffe605678a9a00      4         4     8192       32768             DispBrok-DeskSrv
ffffe60569286680      4         4     8192       32768             DispBrok-Desk
ffffe605668026c0      4         4     8192       32768             DispBrok
================ ====== ========= ======== =========== ==========
                    195       159             6651904     143360

0: kd> !wmitrace.logdump IddCx
(WmiTrace) LogDump for Logger Id 0x13
Found Buffers: 5 Messages: 537, sorting entries
[1]0EF8.0CF0::04/24/2020-09:43:36.894 [cx][IddCx]DriverEntry: Enter
[1]0EF8.0CF0::04/24/2020-09:43:36.897 [cx][IddCx]?IddCxLibraryInitialize@@YAJXZ: Enter
[1]0EF8.0CF0::04/24/2020-09:43:36.897 [cx][IddCx]?IddCxLibraryInitialize@@YAJXZ: Exit
[1]0EF8.0CF0::04/24/2020-09:43:36.897 [cx][IddCx]DriverEntry: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.904 [cx][IddCx]?IddCxLibraryBindClient@@YAJPEAU_WDF_CLASS_BIND_INFO@@PEAPEAX@Z: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.904 [cx][IddCx]?IddCxLibraryBindClient@@YAJPEAU_WDF_CLASS_BIND_INFO@@PEAPEAX@Z: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplDeviceInitConfig: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplDeviceInitConfig: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplGetVersion: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.910 [cx][IddCx]IddCxImplGetVersion: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.911 [cx][IddCx]IddCxImplDeviceInitialize: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.912 [cx][IddCx]IddCxImplDeviceInitialize: New IddDevice 0x000001642F5E0770 created
[0]0EF8.0CF0::04/24/2020-09:43:36.912 [cx][IddCx]IddCxImplDeviceInitialize: Exit, status=STATUS_SUCCESS
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]IddCxImplAdapterInitAsync: Enter
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]?Init@IddAdapter@@QEAAXPEAUIDDCX_ADAPTER__@@PEAVIddDevice@@PEAUIDDCX_ADAPTER_CAPS@@@Z: New IddAdapter 0x000001642F5E77D0 created, API object 0xFFFFFE9BD0A18978, IddDevice 0x000001642F5E0770
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]?SendUserModeMessage@IddAdapter@@QEAAJIPEAXI0W4DXGK_IDD_ESCAPE_CODE@@PEAI@Z: Sending escape 0x0 to kernel
Unknown( 76): GUID=ac5ec775-ccdb-3c2c-6150-28b4eacacbc4 (No Format Information found).
[0]0EF8.0CF0::04/24/2020-09:43:36.917 [cx][IddCx]IddCxImplAdapterInitAsync: Exit, status=STATUS_SUCCESS
[0]0EF8.0558::04/24/2020-09:43:36.935 [cx][IddCx]?HandleKernelModeMessage@IddAdapter@@QEAAXIPEAXI0PEAI@Z: IddAdapter 0x000001642F5E77D0, processing command START_ADAPTER_COMPLETE from KMD
[0]0EF8.0558::04/24/2020-09:43:36.935 [cx][IddCx]?HandleKernelModeMessage@IddAdapter@@QEAAXIPEAXI0PEAI@Z: IddAdapter 0x000001642F5E77D0, Successful adapter start, Wddm Luid = 0xe6e90, Adapter caps 0x0, Session Id 0, Terminal Luid 0x0
[0]0EF8.0558::04/24/2020-09:43:36.935 [cx][IddCx]?HandleKernelModeMessage@IddAdapter@@QEAAXIPEAXI0PEAI@Z: Exit
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]<lambda_e42696d61f3ea0fd0d39fdb90d856b7b>::operator(): DDI: Calling EvtIddCxAdapterInitFinished DDI, IddAdapter 0xFFFFFE9BD0A18978
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorCreate: Enter
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorCreate: New IddMonitor 0x000001642F5EF720 created, API object 0xFFFFFE9BD0A11A38, IddAdapter 0x000001642F5E77D0
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorCreate: Exit, status=STATUS_SUCCESS
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]IddCxImplMonitorArrival: Enter
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Calling EvtIddCxParseMonitorDescriptio DDI to get mode count, Device 0x000001642F5E0770
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Return successfully from EvtIddCxParseMonitorDescriptio DDI to get mode count, mode count 23
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Calling EvtIddCxParseMonitorDescriptio DDI to get modes, Device 0x000001642F5E0770
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?ParseMonitorDescription@IddDevice@@QEAAXUIDDCX_MONITOR_DESCRIPTION@@AEAV?$vector@UIDDCX_MONITOR_MODE@@V?$allocator@UIDDCX_MONITOR_MODE@@@std@@@std@@AEAI@Z: DDI: Return successfully from EvtIddCxParseMonitorDescriptio DDI to get modes
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?AddMonitorModes@IddMonitor@@AEAAXAEAV?$vector@UTARGET_MONITOR_MODE@@V?$allocator@UTARGET_MONITOR_MODE@@@std@@@std@@@Z: IddMonitor 0x000001642F5EF720, parseMonitorDescription returned 23 modes.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Calling EvtIddCxMonitorQueryTargetModes DDI for mode count, IddMonitor 0x000001642F5EF720
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Return successfully from EvtIddCxMonitorQueryTargetModes DDI, mode count = 0x23
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Calling EvtIddCxMonitorQueryTargetModes DDI to get modes, IddMonitor 0x000001642F5EF720
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?QueryModes@IddMonitor@@AEAAXAEAV?$vector@UIDDCX_TARGET_MODE@@V?$allocator@UIDDCX_TARGET_MODE@@@std@@@std@@@Z: DDI: Return successfully from EvtIddCxMonitorQueryTargetModes DDI
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?StartWatchInternal@IddWatchdog@@AEAAXK@Z: IddWatchdog 0x000001642F5E77F0, still has pending watch not started by watchdog thread.
[0]0EF8.1588::04/24/2020-09:43:36.936 [cx][IddCx]?AddTargetModes@IddMonitor@@AEAAXAEAV?$vector@UTARGET_MONITOR_MODE@@V?$allocator@UTARGET_MONITOR_MODE@@@std@@@std@@@Z: IddMonitor 0x000001642F5EF720, queryTargetModes returned 23 modes.
[0]0EF8.1588::04/24/2020-09:43:55.341 [cx][IddCx] Throwing error (Status 0xc000000d(STATUS_INVALID_PARAMETER)) from function Validate in onecoreuap\windows\core\dxkernel\indirectdisplays\classext\cx\ddivalidation.cpp:412, Msg DISPLAYCONFIG_VIDEO_SIGNAL_INFO.AdditionalSignalInfo.vSyncFreqDivider cannot be zero for target mode
Total of 537 Messages from 5 Buffers

最後の行は、エラーの理由を示します。

間接表示画面キャプチャのデバッグ機能

Windows ビルド 25164以降、IddCx には、IddCx がドライバーに渡すデスクトップ フレームをダンプする機能があります。 この機能を使用して、視覚的な問題をデバッグできます。 フレームのシェーディングダーティ領域などのデバッグ オーバーレイと組み合わせることができます。

IddCx では、すべてのフレームでフレーム キャプチャのデバッグ レジストリ設定の変更が検索されるため、 IddCxDebugCtrl にはマスター コントロール値があり、IddCx が各フレームのキャプチャ レジストリ値をチェックするかどうかを制御します。 これにより、無効にした場合のパフォーマンスの低下がなくなります。

Note

この機能は、OPM インターフェイスがドライバーでアクティブな場合に無効になります。

キャプチャを制御するレジストリ値

HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture には、次のレジストリ値があります。 IddCxDebugCtrl 値が設定される前に、このレジストリ フォルダーを作成する必要があります。

名前 見つからない場合の既定値 意味
TriggerUniqueness 0 新しいフレームを取得するために各 IddCx スワップチェーンが呼び出されると、この値が読み取られます。 TriggerUniqueness が 0 以外 で、以前に読み取られた値と異なる場合、以下の値が読み取られ、フレーム キャプチャが有効になります。
TargetMask 0xffff ビットマスク。アダプター上のターゲット インデックスごとに 1 ビット。そのターゲットのスワップチェーンがこのキャプチャ シーケンスに含まれるかどうかを制御します。
CaptureCount 10 各 enabled-for-capture IddCx スワップチェーンがキャプチャする必要があるフレームの数。
SkipFrames 0 キャプチャされた各フレーム間でスキップするフレームの数。
CaptureSessionID 0 フレーム キャプチャが有効になるセッション。 値 0 は、常にコンソール セッションを意味します。
ScaleFactor 100 キャプチャされたファイルのサイズを決定するために使用されるスケール ファクターを制御します。有効な値は 1 から 100 です。
CaptureFolder c:\IddCxImages キャプチャ ファイルが書き込まれるフォルダー。 c:\IddCxImages フォルダーが存在しない場合は作成されます。

キャプチャ パラメーターはターゲットごとに格納されます。これにより、キャプチャ セッションを特定のターゲットのモード変更にまたがることができます。

モニター オブジェクトが以前のキャプチャからフレームをキャプチャしている間に、新しい 0 以外の TriggerUniqueness 値が検出された場合、現在のキャプチャが停止され、新しくトリガーされたものが開始されます。

REG ファイルを使用してフレーム キャプチャを制御する

REGファイルは、フレームキャプチャを制御するための良い方法です。 1 つのファイルで初期値を設定でき、別のファイルで 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 の 16 進値>_T<ID ターゲット Idx の 16 進値>_Frame<IDDCX_METADATAのフレーム番号。presentationFrameNumber>_<Date in mmddy format>_<Time in hhmmss>.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 メッセージを追加します。

キャプチャ設定の例

モニターが最初に接続されたときからフレームをキャプチャする

モニターが最初に接続されたときの最初の 20 フレームをキャプチャし、その後に REG ファイルをキャプチャするために必要なレジストリ値を次に示します。

航空整備士美術家 Value メモ
CaptureCount 20 既定の 10 フレームではなく 20 フレームを設定する
TriggerUniqueness 1 ゼロ以外の値は、ターゲット オブジェクトがストアの一意性として 0 で始まる場合に機能します
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"CaptureCount"=dword:00000014
"TriggerUniqueness"=dword:00000001

モニターがアクティブな状態でキャプチャを開始する

スワップチェーンは、ドライバーが各フレームを取得するときに新しい一意性の値にチェック、すべてのパラメーターが期待どおりに読み取られるように最後に TriggerUniqueness エントリを設定する必要があります。 次の例では、領域を節約するためにファイルの解像度を半分にし、キャプチャ ファイルを c:\frames フォルダーに書き込みます。

航空整備士美術家 Value メモ
CaptureCount 100 既定の 10 フレームではなく 100 フレームを設定する
ScaleFactor 50 解像度を 50% に設定して領域を節約する
CaptureFolder c:\frames 出力フォルダーの設定
TriggerUniqueness 1 ゼロ以外の値は、ターゲット オブジェクトがストアの一意性として 0 で始まる場合に機能します
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 の 2 番目のターゲットから 10 フレームをキャプチャし、各キャプチャ間に 5 フレームをキャプチャする

また、このキャプチャでは、デバッグ オーバーレイを使用して、各フレームのダーティ領域が強調表示されます。

航空整備士美術家 Value メモ
IddCxDebugCtrl ビット 0x0400 も設定 0x0400 ダーティ領域の強調表示を有効にします。0x2200 ビットも必要です
CaptureSessionID 3 リモート セッション 3 でキャプチャを有効にする
TargetMask 0等2 ビット 1 はターゲット Idx 1 に対応します
SkipFrames 5 各キャプチャ間で 5 フレームのキャプチャをスキップする
TriggerUniqueness 1 ゼロ以外の値は、ターゲット オブジェクトがストアの一意性として 0 で始まる場合に機能します
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