間接ディスプレイ ドライバーのデバッグ
間接ディスプレイ ドライバー (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