Condividi tramite


Debug dei driver di visualizzazione indiretti

I driver Display indiretti (IDD) sono driver UMDF in modo che la documentazione di debug di UMDF, ad esempio Determinazione del motivo per cui il driver UMDF non riesce a caricare o il dispositivo UMDF non riesce a avviare, è un buon punto di partenza. Questa pagina fornisce informazioni di debug specifiche per la visualizzazione indiretta.

Controllo Registro di sistema

L'eXtension (Indiretto Display Driver Class eXtension) ha alcune impostazioni del Registro di sistema che possono essere usate per facilitare il debug degli ID. Tutti i valori del Registro di sistema si trovano nella chiave del Registro di sistema HKLM\System\CurrentControlSet\Control\GraphicsDrivers .

Nome del valore Dettagli
TerminateIndirectOnStall Un valore zero disabilita il watchdog che termina il driver se non elabora un frame entro 10 secondi dal frame disponibile. Qualsiasi altro valore lascerà abilitato il watchdog.
IddCxDebugCtrl Campo bit che ha abilitato diversi aspetti di debug di IddCx. Vedere la tabella riportata di seguito.

Nota

Se il valore del Registro di sistema TerminateIndirectOnStall viene usato per disabilitare il watchdog, i test HLK avranno esito negativo.

Valori IddCxDebugCtrl

Bit in IddCxDebugCtrl Significato
0x0001 Eseguire l'interruzione nel debugger quando IddCx rileva un errore
0x0002 Eseguire l'interruzione nel debugger quando viene caricato IddCx
0x0004 Eseguire l'interruzione nel debugger quando IddCx viene scaricato
0x0008 Eseguire l'interruzione nel debugger quando viene chiamato IddCx DriverEntry
0x0010 Eseguire l'interruzione nel debugger quando viene chiamato il binding del driver
0x0020 Eseguire l'interruzione nel debugger quando viene chiamato l'avvio del driver
0x0040 Eseguire l'interruzione nel debugger quando viene chiamato il driver non chiamato
0x0080 Disabilita il watchdog DDI che termina il driver richiede troppo tempo nella chiamata DDI
0x0100 Non utilizzato
0x0200 Abilitare la sovrapposizione del debug, vedere di seguito
0x0400 Sovrapporre la scatola alfa colorata sui recti sporchi nella cornice; richiede 0x0200 da impostare
0x0800 Statistiche pref di sovrapposizione in frame
0x2000 IddCx eseguirà una query sui valori del Registro di sistema dei frame di acquisizione ogni frame; richiede 0x0200 da impostare

Nota

Per il funzionamento delle funzioni di sovrapposizione, il dispositivo Direct3D creato dal driver e passato a IddCxSwapChainSetDevice deve essere creato con il flag di D3D11_CREATE_DEVICE_BGRA_SUPPORT .

Tracce WPP iddCx

Iddcx usa l'infrastruttura WPP per registrare le informazioni di debug. Le informazioni WPP possono essere acquisite in un file e, mentre questa acquisizione è in corso, può essere visualizzata nel debugger del kernel.

Acquisizione della traccia WPP iddCx

Esistono diversi modi per abilitare la traccia WPP. Un modo pratico consiste nell'usare la compilazione nel programma logman.exe . Se si copia la riga seguente in un file batch ed è possibile eseguire da un prompt dei comandi con privilegi elevati, raccoglierà le tracce WPP IddCx nel file 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

Controllo di ciò che viene acquisito

Il parametro Flags di logman.exe(0x4f4 in questo caso) controlla i log iddCx dei messaggi WPP. Il valore di questo valore ha una modifica nella build di Windows 19041 e versioni successive.

Flag che significano per Windows build 19041 e versioni successive

I flag sono un campo bit, in cui ogni bit controlla se il tipo di messaggio viene acquisito.

Flag bit Tipo di messaggio acquisito
0x001 Non utilizzato
0x002 Non utilizzato
0x004 Errors
0x008 Errori benigni, ad esempio quando la sovrimpressione di debug è abilitata senza D3D11_CREATE_DEVICE_BGRA_SUPPORT set
0x010 Oggetti IddCx
0x020 Chiamate del framework UMDF in IddCx
0x040 Chiamate DDI da IddCx al driver
0x080 Chiamate a bassa frequenza dal driver a IddCx
0x100 Frame a frequenza elevata correlati alle chiamate dal driver a IddCx
0x200 Cursore a frequenza elevata correlata alle chiamate dal driver a IddCx
0x400 Chiamate dal kernel a IddCx
0x800 Chiamate da IddCx al kernel

Uno scenario di registrazione normale di 0x0f4 è un buon punto di partenza. Se si desidera visualizzare le informazioni per fotogramma, 0x1f4 è un buon punto di partenza.

Flag che significano prima della build di Windows 19041

I flag sono stati trattati come livello, ogni livello crescente ha aggiunto un nuovo tipo di messaggio insieme a tutti i messaggi dei livelli precedenti.

Valore del livello flag Tipo di messaggio acquisito
1 Non usato
2 Errors
3 Avvisi
4 Informazioni
5 Dettagliato

Decodifica della traccia WPP IddCx

Analogamente a tutte le tracce WPP, le informazioni WPP vengono archiviate nei file pdb e quindi l'accesso a pdbcon tali informazioni sono necessarie per decodificare. A partire da Windows build 19560, iddCx.pdb nel server dei simboli pubblici contiene le informazioni WPP necessarie per decodificare i messaggi WPP. Prima di Windows build 19560, iddCx.pdb nel server dei simboli pubblici non contiene le informazioni WPP necessarie per abilitare la decodifica WPP.

Qualsiasi strumento di decodifica WPP standard può essere usato per decodificare e visualizzare i messaggi.

Debug degli errori IddCx

Durante lo sviluppo di un driver di visualizzazione indiretta è spesso utile ottenere informazioni aggiuntive quando IddCx rileva un errore. Come descritto in precedenza, è possibile configurare IddCx per l'interruzione nel debugger quando IddCx rileva un errore, ma è anche utile visualizzare il messaggio di errore IddCx negli ultimi messaggi di traccia per comprendere il contesto dell'errore.

Usando la sezione precedente, è possibile abilitare la traccia WPP usando logman.exe e con le informazioni seguenti viene visualizzato il buffer WPP in memoria nel debugger del kernel in corrispondenza del punto dell'errore.

Nota

Per eseguire questa operazione, è necessario usare un debugger del kernel (non un debugger in modalità utente) e Windows build 19560 o versione successiva per consentire al debugger di ottenere l'IDdCx.pdb che contiene le informazioni di decodifica WPP.

Nell'esempio seguente un driver Di visualizzazione indiretta chiama IddCxMonitorArrival. Come parte dell'elaborazione, IddCx chiama l'iddCx DDI del driver EvtIddCxMonitorQueryTargetModes . In questo esempio il driver ha restituito una modalità con DISPLAYCONFIG_VIDEO_SIGNAL_INFO. AdditionalSignalInfo.vSyncFreqDivider impostato su zero che non è valido e genera un errore.

Ecco un elenco dei comandi del debugger usati:

Comando Significato
!wmitrace.bufdump Elencare tutti i buffer di registrazione insieme al nome, IddCx è il nome dei dati, proviene dalla riga di comando logman.exe
!wmitrace.logdump LogBufferName Decodifica e visualizza il contenuto del buffer di registrazione specificato, ovvero IddCx nell'esempio seguente

Di seguito è riportato l'output del debugger per questo esempio:

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

L'ultima riga indica il motivo dell'errore.

Funzionalità di debug dell'acquisizione della schermata di visualizzazione indiretta

A partire da Windows build 25164, IddCx ha la possibilità di eseguire il dump del frame desktop che IddCx passa al driver. Questa funzionalità può essere usata per eseguire il debug dei problemi visivi. Può essere combinato con le sovrimpressioni di debug, ad esempio aree dirty di ombreggiatura di un frame.

Poiché IddCx cercherà le modifiche nell'impostazione del Registro di sistema di debug per l'acquisizione dei fotogrammi in ogni fotogramma, è presente un valore del controllo master in IddCxDebugCtrl che controlla se IddCx controllerrà il valore del Registro di sistema di acquisizione ogni fotogramma. Ciò garantisce che non vi sia alcuna penalità per le prestazioni quando è disabilitata.

Nota

Questa funzionalità è disabilitata quando l'interfaccia OPM è attiva per il driver.

Valori del Registro di sistema che controllano l'acquisizione

I valori del Registro di sistema seguenti si trovano in HKLM\System\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture. Questa cartella del Registro di sistema deve essere creata prima che venga impostato il valore IddCxDebugCtrl.

Nome Impostazione predefinita se mancante Significato
TriggerUniqueness 0 Quando ogni porta di scambio IddCx viene chiamata per acquisire un nuovo frame, leggerà questo valore. Se TriggerUniqueness è diverso da zero e diverso dal valore letto in precedenza, i valori seguenti verranno letti e l'acquisizione dei fotogrammi verrà abilitata.
Maschera di destinazione 0xffff Maschera di bit, un bit per ogni indice di destinazione nell'adapter che controlla se la porta di scambio per tale destinazione deve far parte di questa sequenza di acquisizione.
CaptureCount 10 Numero di fotogrammi che devono essere acquisiti da ogni porta di scambio IddCx abilitata per l'acquisizione.
SkipFrame 0 Numero di fotogrammi da ignorare tra ogni fotogramma acquisito.
CaptureSessionID 0 Sessione in cui verrà abilitata l'acquisizione dei fotogrammi. Il valore zero indica sempre la sessione della console.
ScaleFactor 100 Controlla il fattore di scala utilizzato per decidere quali dimensioni del file acquisito, valori validi da 1 a 100
CaptureFolder c:\IddCxImages Cartella in cui verranno scritti i file di acquisizione. Se non esiste, verrà creata una cartella c:\IddCxImages .

I parametri di acquisizione vengono archiviati per ogni destinazione che consente a una sessione di acquisizione di estendersi a una modifica della modalità in una determinata destinazione.

Se viene rilevato un nuovo valore TriggerUniqueness diverso da zero mentre un oggetto monitor acquisisce ancora i fotogrammi da un'acquisizione precedente, arresterà l'acquisizione corrente e avvierà quello appena attivato.

Uso dei file REG per controllare l'acquisizione dei frame

I file REG sono un buon modo per controllare le acquisizioni dei fotogrammi. Un file può impostare i valori iniziali e un altro può aggiornare TriggerUniqueness.

File REG per impostare i valori iniziali

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

File REG per aggiornare TriggerUniqueness

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\IddCxFrameCapture]
"TriggerUniqueness"=dword:1

Nome e formato del file

I fotogrammi acquisiti saranno in formato di file PNG con il formato di nome file seguente:

ID sessione S<, zero per la console>_Ad<valore esadecimale dell'adattatore ID LUID>_T<Valore esadecimale idx> di destinazione ID_Frame<numero di frame da IDDCX_METADATA. PresentationFrameNumber>_<Date in mmddyy format>_<Time in hhmmss>.png

Di seguito sono riportati alcuni nomi di file di esempio:

  • S0_Ad8ade_T3_Frame2343_020422_173434.png
  • S0_Ad8ade_T3_Frame2344_020422_173434.png
  • S0_Ad8ade_T3_Frame2345_020422_173435.png

Registrazione WPP

Per ogni nuova sessione di acquisizione avviata, i messaggi WPP verranno registrati per ogni valore letto dal Registro di sistema o impostato per impostazione predefinita.

Ogni volta che un frame viene acquisito e scritto nel file, IddCx aggiungerà un messaggio WPP contenente il nome file completo del file di immagine.

Impostazione di acquisizione di esempio

Acquisire fotogrammi da quando un monitor è connesso per la prima volta

Di seguito sono riportati i valori del Registro di sistema necessari per acquisire i primi 20 frame di quando un monitor viene collegato per la prima volta, seguito dal file REG.

Voce del Registro di sistema Valore Note
CaptureCount 20 Impostare 20 frame anziché il valore predefinito 10
TriggerUniqueness 1 Qualsiasi valore diverso da zero funzionerà come oggetto di destinazione inizia con zero come univocità dell'archivio
Windows Registry Editor Version 5.00

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

Avviare l'acquisizione mentre il monitoraggio è attivo

Dato che i swapchain controllano la presenza di un nuovo valore di univocità quando il driver acquisisce ogni frame, è necessario impostare l'ultima voce TriggerUniqueness per assicurarsi che tutti i parametri vengano letti come previsto. Nell'esempio seguente viene anche metà della risoluzione dei file per risparmiare spazio e scrive i file di acquisizione nella cartella c:\frames .

Voce del Registro di sistema Valore Note
CaptureCount 100 Impostare 100 frame anziché il valore predefinito 10
ScaleFactor 50 Impostare la risoluzione del 50% per risparmiare spazio
CaptureFolder c:\frames Impostare la cartella di output
TriggerUniqueness 1 Qualsiasi valore diverso da zero funzionerà man mano che l'oggetto di destinazione inizia con zero come univocità dell'archivio
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

Acquisire 10 fotogrammi dalla seconda destinazione nella sessione remota 3 con 5 fotogrammi tra ogni acquisizione

Questa acquisizione usa anche la sovrimpressione di debug per evidenziare le aree dirty per ognuno dei fotogrammi.

Voce del Registro di sistema Valore Note
IddCxDebugCtrl Impostare anche bit 0x0400 0x0400 abilita l'evidenziazione dell'area dirty, 0x2200 bit necessari
CaptureSessionID 3 Abilita l'acquisizione nella sessione remota 3
Maschera di destinazione 0x2 Bit 1 corrisponde all'IDx 1 di destinazione
SkipFrame 5 Ignorare l'acquisizione di 5 fotogrammi tra ogni acquisizione
TriggerUniqueness 1 Qualsiasi valore diverso da zero funzionerà come oggetto di destinazione inizia con zero come univocità dell'archivio
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