Envoi d’une mémoire tampon de commande
La séquence d’opérations suivante doit être effectuée pour passer une mémoire tampon de commandes via la pile graphique Windows Vista :
Le pilote d’affichage en mode utilisateur lance une soumission de mémoire tampon de commande si le runtime Direct3D appelle l’une des fonctions de pilote d’affichage en mode utilisateur suivantes pour effectuer l’opération spécifiée :
- Fonction Present pour afficher les graphiques.
- Fonction Flush pour envoyer des commandes matérielles.
- Fonction Verrouiller pour verrouiller une ressource, qui est utilisée dans le lot de commandes actuel.
Notez que le pilote d’affichage en mode utilisateur lance toujours une soumission de mémoire tampon de commande chaque fois que la mémoire tampon de commande est pleine.
Le pilote d’affichage en mode utilisateur appelle la fonction pfnRenderCb du runtime Direct3D pour envoyer la mémoire tampon de commande au runtime.
Le sous-système du noyau graphique DirectX appelle la fonction DxgkDdiRender ou DxgkDdiRenderKm du pilote miniport d’affichage pour valider la mémoire tampon de commandes, écrire une mémoire tampon DMA au format du matériel et produire une liste d’allocation décrivant les surfaces utilisées. Notez que la mémoire tampon DMA n’a pas encore été corrigée (c’est-à-dire, les adresses physiques affectées). Note Si le runtime a lancé la soumission de la mémoire tampon de commande en appelant la fonction Present du pilote d’affichage en mode utilisateur, le sous-système graphique appelle la fonction DxgkDdiPresent du pilote d’affichage miniport, plutôt que DxgkDdiRender ou DxgkDdiRenderKm.
Le gestionnaire de mémoire vidéo appelle la fonction DxgkDdiBuildPagingBuffer du pilote d’affichage miniport pour créer des mémoires tampons DMA à usage spécial, appelées mémoires tampons de pagination, qui déplacent les allocations spécifiées dans la liste d’allocation qui accompagne la mémoire tampon DMA vers et depuis la mémoire accessible par GPU. Pour plus d’informations, consultez Paging Video Memory Resources.
Le planificateur GPU appelle la fonction DxgkDdiPatch du pilote miniport d’affichage pour affecter des adresses physiques aux ressources dans la mémoire tampon DMA. Toutefois, le planificateur n’est pas obligé d’appeler DxgkDdiPatch pour affecter des adresses physiques à la mémoire tampon de pagination, car les adresses physiques de la mémoire tampon de pagination ont été transmises et affectées pendant l’appel de DxgkDdiBuildPagingBuffer .
Le planificateur GPU appelle la fonction DxgkDdiSubmitCommand du pilote miniport d’affichage pour demander que le pilote met en file d’attente la mémoire tampon de pagination vers l’unité d’exécution GPU.
Le planificateur GPU appelle la fonction DxgkDdiSubmitCommand du pilote miniport d’affichage pour demander que le pilote met en file d’attente la mémoire tampon DMA vers l’unité d’exécution GPU. Chaque mémoire tampon DMA envoyée au GPU contient un identificateur de clôture. Une fois que le GPU a terminé le traitement de la mémoire tampon DMA, le GPU génère une interruption.
Le pilote miniport d’affichage est averti de l’interruption dans sa fonction DxgkDdiInterruptRoutine . Le pilote miniport d’affichage doit lire, à partir du GPU, l’identificateur de clôture de la mémoire tampon DMA qui vient de se terminer.
Le pilote miniport d’affichage doit appeler la fonction DxgkCbNotifyInterrupt pour informer le planificateur GPU que la mémoire tampon DMA s’est terminée.
Le pilote miniport d’affichage doit appeler la fonction DxgkCbQueueDpc pour mettre en file d’attente un appel de procédure différée (DPC).
La DPC du pilote miniport d’affichage est avertie pour gérer la plupart du traitement de la mémoire tampon DMA.