Panoramica del driver di visualizzazione indiretto
Il modello di driver di visualizzazione indiretto (IDD) fornisce un modello di driver in modalità utente semplice per supportare i monitor non connessi agli output di visualizzazione GPU tradizionali. Alcuni scenari tipici in cui è necessario un IDD includono:
- Streaming dell'output di visualizzazione su una rete in un client remoto (visualizzazione remota).
- Creazione di monitor virtuali per applicazioni come ambienti desktop virtuale (schermi virtuali).
- Connessione di un dongle a un PC tramite USB con un normale monitor (VGA, DVI, HDMI, DP e così via) collegato.
Implementazione IDD
Un IDD è il driver UMDF fornito da terze parti per il dispositivo. È possibile sviluppare un IDD usando la funzionalità esposta dall'eXtensione iddCx (classe di driver di visualizzazione indiretta) per interfacciarsi con i sottosistemi grafici windows nei modi seguenti:
- Creare la scheda grafica che rappresenta il dispositivo di visualizzazione indiretto.
- Il report monitora la connessione e la disconnessione dal sistema.
- Fornire descrizioni dei monitoraggi connessi.
- Fornire le modalità di visualizzazione disponibili.
- Supportare altre funzionalità di visualizzazione, ad esempio cursore del mouse hardware, gamma, comunicazioni I2C e contenuto protetto.
- Elaborare le immagini desktop da visualizzare sul monitor.
Poiché un IDD è un driver UMDF, è anche responsabile dell'implementazione di tutte le funzionalità UMDF , ad esempio comunicazioni dei dispositivi, risparmio energia, plug and play e così via.
L'IDD viene eseguito nella sessione 0 senza componenti in esecuzione nella sessione utente, pertanto qualsiasi instabilità del driver non influisce sulla stabilità del sistema nel suo complesso.
Il diagramma seguente offre una panoramica dell'architettura.
Modello in modalità utente
L'IDD è un modello solo in modalità utente senza supporto per i componenti in modalità kernel. Di conseguenza, il driver è in grado di usare qualsiasi API DirectX per elaborare l'immagine desktop. In effetti, IddCx fornisce l'immagine desktop per codificare in una superficie DirectX.
Il driver non deve chiamare API in modalità utente non appropriate per l'uso del driver, ad esempio GDI, API di windowing, OpenGL o Vulkan.
Il IDD deve essere compilato come driver di Windows universale in modo che possa essere usato in più piattaforme Windows.
In fase di compilazione:
- L'IDD di UMDF dichiara la versione di IddCx su cui è stata compilata.
- Il sistema operativo garantisce che la versione corretta di IddCx venga caricata al caricamento del driver.
Callback iddCx e convenzioni di denominazione delle funzioni
Prefisso | Type | Note |
---|---|---|
EVT_IDD_CX_XXX | Funzione di callback IDD | Gli IDD implementano callback specifici di IddCx, ad esempio EVT_IDD_CX_ADAPTER_COMMIT_MODES, e callback WDF pertinenti, ad esempio EVT_WDF_DEVICE_D0_EXIT. |
IddCxXxx | Funzione | Funzioni di estensione della classe IddCx fornite dal sistema che gli IDD possono chiamare; Ad esempio, IddCxAdapterInitAsync. |
PFN_IDDCX_XXX | Puntatori alle funzioni IddCx | Gli IDD non usano questi puntatori. I driver devono invece usare le funzioni IddCxXxx equivalenti. |
Codice di esempio
Microsoft fornisce un'implementazione IDD di esempio in GitHub degli esempi di driver di Windows. Questo esempio illustra come connettere un monitor, come rispondere a un set di modalità e come ricevere fotogrammi.