Condividi tramite


Invio di un buffer di comandi

Per passare un buffer di comandi tramite lo stack di grafica di Windows Vista, è necessario eseguire la sequenza di operazioni seguente:

  1. Il driver di visualizzazione in modalità utente avvia un invio del buffer dei comandi se il runtime Direct3D chiama una delle seguenti funzioni del driver di visualizzazione in modalità utente per eseguire l'operazione specificata:

    • Funzione Present per visualizzare la grafica.
    • Funzione Flush per inviare comandi hardware.
    • Funzione Lock per bloccare una risorsa, usata nel batch di comandi corrente.

    Si noti che il driver di visualizzazione in modalità utente avvia sempre un invio del buffer dei comandi ogni volta che il buffer dei comandi è pieno.

  2. Il driver di visualizzazione in modalità utente chiama la funzione pfnRenderCb del runtime Direct3D per inviare il buffer dei comandi al runtime.

  3. Il sottosistema kernel grafico DirectX chiama la funzione DxgkDdiRender o DxgkDdiRenderKm del driver miniport di visualizzazione per convalidare il buffer dei comandi, scrivere un buffer DMA nel formato dell'hardware e produrre un elenco di allocazione che descrive le superfici utilizzate. Si noti che il buffer DMA non è ancora stato sottoposto a patch, ovvero indirizzi fisici assegnati. Nota Se il runtime ha avviato l'invio del buffer dei comandi chiamando la funzione Present del driver di visualizzazione in modalità utente, il sottosistema grafico chiama la funzione DxgkDdiPresent del driver miniport di visualizzazione, anziché DxgkDdiRender o DxgkDdiRenderKm.

  4. La gestione memoria video chiama la funzione DxgkDdiBuildPagingBuffer del driver miniport di visualizzazione per creare buffer DMA speciali, noti come buffer di paging, che spostano le allocazioni specificate nell'elenco di allocazione che accompagnano il buffer DMA da e verso la memoria accessibile dalla GPU. Per altre informazioni, vedere Paging delle risorse di memoria video.

  5. L'utilità di pianificazione GPU chiama la funzione DxgkDdiPatch del driver miniport di visualizzazione per assegnare indirizzi fisici alle risorse nel buffer DMA. Tuttavia, l'utilità di pianificazione non è necessaria per chiamare DxgkDdiPatch per assegnare indirizzi fisici al buffer di paging perché gli indirizzi fisici per il buffer di paging sono stati passati e assegnati durante la chiamata DxgkDdiBuildPagingBuffer .

  6. L'utilità di pianificazione GPU chiama la funzione DxgkDdiSubmitCommand del driver miniport di visualizzazione per richiedere che il driver accoda il buffer di paging all'unità di esecuzione gpu.

  7. L'utilità di pianificazione GPU chiama la funzione DxgkDdiSubmitCommand del driver miniport di visualizzazione per richiedere che il driver accoda il buffer DMA all'unità di esecuzione gpu. Ogni buffer DMA inviato alla GPU contiene un identificatore di recinto. Al termine dell'elaborazione del buffer DMA, la GPU genera un interrupt.

  8. Il driver miniport di visualizzazione riceve una notifica dell'interrupt nella funzione DxgkDdiInterruptRoutine . Il driver miniport di visualizzazione deve leggere, dalla GPU, l'identificatore di isolamento del buffer DMA appena completato.

  9. Il driver miniport di visualizzazione deve chiamare la funzione DxgkCbNotifyInterrupt per notificare all'utilità di pianificazione GPU che il buffer DMA è stato completato.

  10. Il driver miniport di visualizzazione deve chiamare la funzione DxgkCbQueueDpc per accodare una chiamata di procedura posticipata (DPC).

  11. Il DPC del driver miniport di visualizzazione riceve una notifica per gestire la maggior parte dell'elaborazione del buffer DMA.