Enumerazione dei dispositivi figlio di una scheda di visualizzazione

La sequenza di passaggi seguente descrive in che modo il driver della porta di visualizzazione, il driver miniport e il gestore della rete presente video (VidPN) collaborano al momento dell'inizializzazione per enumerare i dispositivi figlio di una scheda di visualizzazione.

  1. Il driver della porta di visualizzazione chiama la funzione DxgkDdiStartDevice del driver miniport di visualizzazione. DxgkDdiStartDevice restituisce (nel parametro NumberOfChildren ) il numero di dispositivi che sono (o potrebbero diventare tramite ancoraggio) elementi figlio della scheda di visualizzazione. DxgkDdiStartDevice restituisce anche (nel parametro NumberOfVideoPresentSources ) il numero N di origini video presenti supportate dalla scheda di visualizzazione. Questi video presenti fonti saranno successivamente identificati dai numeri 0, 1, ... N -1.

  2. Il driver della porta di visualizzazione chiama la funzione DxgkDdiQueryChildRelations del driver miniport di visualizzazione, che enumera i dispositivi figlio della scheda di visualizzazione. DxgkDdiQueryChildRelations riempie una matrice di strutture DXGK_CHILD_DESCRIPTOR : una per ogni dispositivo figlio. Si noti che tutti i dispositivi figlio della scheda di visualizzazione sono su scheda: i monitoraggi e altri dispositivi esterni che si connettono alla scheda di visualizzazione non sono considerati dispositivi figlio. Per altre informazioni, vedere Dispositivi figlio dell'adattatore di visualizzazione. DxgkDdiQueryChildRelations deve enumerare i dispositivi figlio potenziali e i dispositivi figlio presenti fisicamente in fase di inizializzazione. Ad esempio, se la connessione di un computer portatile a una stazione di ancoraggio comporterà l'aspetto di un nuovo output video, DxgkDdiQueryChildRelations deve enumerare tale output video indipendentemente dal fatto che il computer sia ancorato in fase di inizializzazione. Inoltre, se la connessione di un dongle a un connettore di output video consentirà a diversi monitor di condividere il connettore, DxgkDdiQueryChildRelations deve enumerare un dispositivo figlio per ogni ramo del dongle, indipendentemente dal fatto che il dongle sia connesso in fase di inizializzazione.

  3. Per ogni dispositivo figlio (enumerato come descritto nel passaggio 1) con un valore di consapevolezza HPD di HpdAwarenessInterruptible o HpdAwarenessPolled, il driver della porta di visualizzazione chiama la funzione DxgkDdiQueryChildStatus del driver display miniport per determinare se al dispositivo figlio è connesso un dispositivo esterno.

  4. Il driver della porta di visualizzazione crea un PDO per ogni dispositivo figlio che soddisfa una delle condizioni seguenti:

    • Il dispositivo figlio ha un valore di consapevolezza HPD di HpdAwarenessAlwaysConnected.
    • Il dispositivo figlio ha un valore di consapevolezza HPD di HpdAwarenessPolled o HpdAwarenessInterruptible e il sistema operativo conosce da una query o una notifica precedente che il dispositivo figlio ha un dispositivo esterno connesso.
  5. Il driver della porta di visualizzazione chiama la funzione DxgkDdiQueryDeviceDescriptor del driver miniport di visualizzazione per ogni dispositivo figlio che soddisfa una delle condizioni seguenti:

    • Il dispositivo figlio è noto per avere un dispositivo esterno connesso.
    • Si presuppone che il dispositivo figlio abbia un dispositivo esterno connesso.
    • Il dispositivo figlio ha un tipo typeOther.

    DxgkDdiQueryDeviceDescriptor restituisce un blocco EDID (Extended Display Information Data) se il monitor connesso (o un altro dispositivo di visualizzazione) supporta i descrittori EDID.

    Nota: durante l'inizializzazione, il driver della porta di visualizzazione chiama DxgkDdiQueryDeviceDescriptor per ogni monitor per ottenere il primo blocco a 128 byte dell'EDID del monitor. In questo modo il driver della porta di visualizzazione deve essere in fase di inizializzazione: ID hardware PnP, ID istanza, ID di istanza, ID compatibile e testo del dispositivo. In un secondo momento, il driver di funzione della classe di monitoraggio (Monitor.sys) chiama DxgkDdiQueryDeviceDescriptor per ogni monitor per ottenere il primo blocco EDID a 128 byte e altri blocchi di estensione EDID a 128 byte. Ciò significa che il driver miniport di visualizzazione verrà chiamato due volte per fornire il primo blocco a 128 byte dell'EDID di ogni monitor.

  6. Il gestore VidPN ottiene gli identificatori per tutte le origini video presenti e le destinazioni video presenti nelle destinazioni supportate dalla scheda di visualizzazione. I video presenti fonti sono identificati dai numeri 0, 1, ... N - 1, dove N è il numero di origini restituite dalla funzione DxgkDdiStartDevice del driver miniport di visualizzazione. Le destinazioni presenti nel video hanno identificatori integer univoci creati in precedenza dal driver miniport di visualizzazione durante DxgkDdiQueryChildRelations. Ogni dispositivo figlio di tipo TypeVideoOutput è associato a una destinazione del video presente e il membro ChildUid della struttura di DXGK_CHILD_DESCRIPTOR del dispositivo figlio viene usato come identificatore per la destinazione del video presente.

  7. Il responsabile VidPN usa la procedura seguente per compilare un VidPN iniziale.

    • Se nel Registro di sistema viene registrato un vidPN valido noto, usarlo come VidPN iniziale.

    • In caso contrario, chiamare la funzione DxgkDdiRecommendFunctionalVidPn del driver miniport di visualizzazione per ottenere un VidPN iniziale.

    • Se DxgkDdiRecommendFunctionalVidPn non riesce a restituire un VidPN funzionale accettabile, creare un vidPN semplice contenente un percorso presente video; ovvero una coppia (di origine, di destinazione). Chiamare la funzione DxgkDdiIsSupportedVidPn del driver miniport di visualizzazione per verificare che il VidPN proposto funzioni. Se DxgkDdiIsSupportedVidPn segnala che il VidPN proposto non funzionerà, continuare a provare fino a quando non viene trovato un VidPN appropriato.

    • Chiamare la funzione DxgkDdiEnumVidPnCofuncModality del driver miniport per determinare le modalità di origine e di destinazione disponibili per VidPN.