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