Partager via


Demande et utilisation de la mémoire Surface

Le pilote d’affichage en mode utilisateur reçoit des appels à sa fonction CreateResource lorsque le runtime Microsoft Direct3D nécessite la création d’une liste de surfaces. Le runtime Direct3D spécifie un handle de ressource à la liste des surfaces que le pilote d’affichage en mode utilisateur utilise pour rappeler dans le runtime. Le pilote d’affichage en mode utilisateur crée un objet de ressource pour représenter la liste des surfaces, génère un handle unique pour cet objet et retourne le handle au runtime Direct3D. Le runtime utilise ce handle unique dans les appels de pilotes suivants pour identifier la liste des surfaces. Le runtime identifie une surface particulière en spécifiant l’index de la surface dans le tableau contenu dans le membre pSurfList de la structure D3DDDIARG_CREATERESOURCE .

Étant donné que le pilote d’affichage en mode utilisateur reçoit le handle de ressource défini par le pilote dans les appels qui font référence à la ressource, le pilote n’est pas obligé d’effectuer une recherche de handle coûteuse afin de localiser l’objet de ressource défini par le pilote. De même, afin que le runtime n’ait pas non plus besoin d’effectuer une recherche de handle, le pilote d’affichage en mode utilisateur utilise le handle de ressource défini par le runtime Direct3D lorsque le pilote d’affichage en mode utilisateur rappelle le runtime.

Le pilote d’affichage en mode utilisateur appelle la fonction pfnAllocateCb pour allouer de la mémoire pour les surfaces. Dans l’appel pfnAllocateCb , le pilote d’affichage en mode utilisateur peut transmettre des données privées pour la liste des surfaces et pour chaque surface individuelle dans les membres pPrivateDriverData des structures D3DDDICB_ALLOCATE et D3DDDI_ALLOCATIONINFO , respectivement. Toutefois, le pilote d’affichage en mode utilisateur ne peut pas recevoir de données privées des membres pPrivateDriverData . Le pilote d’affichage en mode utilisateur peut allouer de la mémoire pour ces données privées et libérer la mémoire après le retour de l’appel pfnAllocateCb , ou peut utiliser la mémoire de pile pour transmettre ces données privées. La fonction pfnAllocateCb retourne au pilote d’affichage en mode utilisateur un handle à chaque allocation pour chaque surface allouée.

Note Le pilote d’affichage en mode utilisateur doit appeler la fonction pfnAllocateCb une fois pour chaque surface partagée pour chaque appareil. Par exemple, si l’appareil 1 crée une surface partagée qui est également utilisée par les appareils 2, 3 et 4, les appareils 2, 3 et 4 doivent également appeler pfnAllocateCb une fois pour la surface partagée afin de récupérer le handle d’allocation.

Le pilote d’affichage en mode utilisateur doit suivre chaque surface à chaque handle d’allocation, généralement en conservant une table de handle surface à allocation. Le pilote d’affichage en mode utilisateur doit stocker chaque handle d’allocation dans l’objet de ressource défini par le pilote.

Lorsque le runtime Direct3D effectue une opération sur une surface précédemment allouée (par exemple, dans un appel à la fonction Blt du pilote d’affichage en mode utilisateur), le pilote d’affichage en mode utilisateur reçoit le handle à la ressource, éventuellement avec un index surface. Le pilote d’affichage en mode utilisateur utilise ce handle de ressource pour récupérer l’objet de ressource défini par le pilote. Le pilote obtient les handles d’allocation qui sont stockés dans l’objet de ressource et les assemble dans la mémoire tampon de commande. Le pilote d’affichage en mode utilisateur utilise les handles d’allocation qui correspondent aux surfaces lors de l’appel de la fonction pfnRenderCb pour envoyer une mémoire tampon de commandes au pilote de miniport d’affichage. Le pilote miniport d’affichage peut appeler la fonction DxgkCbGetHandleData pour déterminer à quelles allocations de surface le pilote d’affichage en mode utilisateur fait référence.