Flusso dell'operazione WDDM (Windows Display Driver Model)
Il diagramma seguente illustra il flusso delle operazioni WDDM che si verificano da quando viene creato un dispositivo di rendering a quando il contenuto viene presentato alla visualizzazione. Le informazioni che seguono il diagramma descrivono in modo più dettagliato la sequenza ordinata del flusso dell'operazione.
Creazione di un dispositivo di rendering
Dopo che un'applicazione richiede di creare un dispositivo di rendering:
1: Il sottosistema del kernel grafico DirectX (Dxgkrnl) chiama la funzione DxgkDdiCreateDevice del driver miniport (KMD).
KmD inizializza l'accesso diretto alla memoria (DMA) restituendo un puntatore a una struttura DXGK_DEVICEINFO riempita nel membro pInfo della struttura DXGKARG_CREATEDEVICE .
2: Se la chiamata a DxgkDdiCreateDevice ha esito positivo, il runtime Direct3D chiama la funzione CreateDevice (UMD) del driver di visualizzazione in modalità utente.
3: Nella chiamata CreateDevice , UMD deve chiamare in modo esplicito la funzione pfnCreateContextCb del runtime per creare uno o più contesti GPU, che sono thread GPU di esecuzione nel dispositivo appena creato. Il runtime restituisce informazioni a UMD nei membri pCommandBuffer e CommandBufferSize della struttura D3DDDICB_CREATECONTEXT per inizializzare il buffer dei comandi.
Creazione di superfici per un dispositivo
Dopo che un'applicazione richiede di creare superfici per il dispositivo di rendering:
4: Il runtime Direct3D chiama la funzione CreateResource di UMD.
5: CreateResource chiama la funzione pfnAllocateCb fornita dal runtime.
6: il runtime chiama la funzione DxgkDdiCreateAllocation di KMD , specificando il numero e i tipi di allocazioni da creare. DxgkDdiCreateAllocation restituisce informazioni sulle allocazioni in una matrice di strutture DXGK_ALLOCATIONINFO nel membro pAllocationInfo della struttura DXGKARG_CREATEALLOCATION .
Invio del buffer dei comandi alla modalità kernel
Dopo che un'applicazione richiede di disegnare in una superficie:
7: Il runtime Direct3D chiama la funzione UMD correlata all'operazione di disegno, ad esempio DrawPrimitive2.
8: Il runtime Direct3D chiama la funzione Present o Flush di UMD per fare in modo che il buffer dei comandi venga inviato in modalità kernel. Nota: UMD invia anche il buffer dei comandi quando il buffer dei comandi è pieno.
9: In risposta al passaggio 8, UMD chiama una delle seguenti funzioni fornite dal runtime:
- Funzione pfnPresentCb del runtime se è stato chiamato Present .
- Funzione pfnRenderCb del runtime se Flush è stato chiamato o il buffer dei comandi è pieno.
10: la funzione DxgkDdiPresent di KMD viene chiamata se è stato chiamato pfnPresentCb o la funzione DxgkDdiRender o DxgkDdiRenderKm se è stato chiamato pfnRenderCb . KmD convalida il buffer dei comandi, scrive nel buffer DMA nel formato dell'hardware e produce un elenco di allocazione che descrive le superfici usate.
Invio del buffer DMA all'hardware
11: Dxgkrnl chiama la funzione DxgkDdiBuildPagingBuffer di KMD per creare buffer DMA per scopi speciali che spostano le allocazioni specificate nell'elenco di allocazione da e verso la memoria accessibile dalla GPU. Questi buffer DMA speciali sono noti come buffer di paging. DxgkDdiBuildPagingBuffer non viene chiamato per ogni fotogramma.
12: Dxgkrnl chiama la funzione DxgkDdiSubmitCommand di KMD per accodare i buffer di paging all'unità di esecuzione della GPU.
13: Dxgkrnl chiama la funzione DxgkDdiPatch del KMD per assegnare indirizzi fisici alle risorse nel buffer DMA.
14: Dxgkrnl chiama la funzione DxgkDdiSubmitCommand di KMD per accodare il buffer DMA all'unità di esecuzione della GPU. Ogni buffer DMA inviato alla GPU contiene un identificatore di recinto, ovvero un numero. Al termine dell'elaborazione del buffer DMA, la GPU genera un interrupt.
15: kmd riceve una notifica dell'interruzione nella funzione DxgkDdiInterruptRoutine . Il kmD deve leggere, dalla GPU, l'identificatore di isolamento del buffer DMA appena completato.
16: KMD deve chiamare la funzione DxgkCbNotifyInterrupt per notificare a DXGK che il buffer DMA è stato completato. Il KMD deve anche chiamare la funzione DxgkCbQueueDpc per accodare una chiamata di procedura posticipata (DPC).
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per