Demande de renommer une allocation

Le pilote d’affichage en mode utilisateur doit demander au gestionnaire de mémoire vidéo de renommer une allocation associée à une surface lorsqu’une application indique d’ignorer le contenu de la surface dans le cadre d’une demande de verrouillage de la surface (par exemple, une mémoire tampon de vertex). Le runtime Microsoft Direct3D transmet l’indicateur Ignorer le champ bit pour indiquer qu’il n’a plus besoin du contenu actuel de la surface. Le pilote peut demander au gestionnaire de mémoire vidéo d’allouer une nouvelle allocation pour gérer la demande de verrouillage si l’allocation actuelle contenant le contenu de la surface est occupée, plutôt que de bloquer le thread d’application jusqu’à ce que l’allocation actuelle devienne inactive.

Le pilote d’affichage en mode utilisateur demande au gestionnaire de mémoire vidéo de renommer une allocation lorsque le pilote définit le membre Discard de la structure D3DDDICB_LOCKFLAGS dans un appel à la fonction pfnLockCb . Le gestionnaire de mémoire vidéo détermine s’il doit renommer l’allocation ou si l’application doit se bloquer jusqu’à ce que l’allocation soit inactive en fonction de l’occupation actuelle de l’allocation et de la condition de mémoire actuelle. Pour chaque allocation renommée, le gestionnaire de mémoire vidéo conserve une liste d’allocations qui sont successivement utilisées pour verrouiller les allocations. Le gestionnaire de mémoire vidéo effectue des cycles dans la liste chaque fois que l’application ignore le contenu d’une allocation. La longueur de la liste est déterminée par les exigences de l’application et la pression de mémoire. Le gestionnaire de mémoire vidéo tente de conserver la liste suffisamment longtemps pour éviter de bloquer le thread d’application sur une demande de verrouillage. Toutefois, sous la pression de la mémoire, le gestionnaire de mémoire vidéo peut réduire la liste pour éviter de provoquer une pression supplémentaire sur la mémoire.

Pour imposer une limite à la longueur de la liste de renommage d’une allocation, le pilote définit le membre MaximumRenamingListLength de la structure DXGK_ALLOCATIONINFO lors de la création de l’allocation. Si le pilote définit MaximumRenamingListLength sur une valeur différente de zéro, le gestionnaire de mémoire vidéo détermine la longueur appropriée de la liste de renommage sans dépasser la limite imposée par le pilote. Si le pilote définit MaximumRenamingListLength sur 0, le gestionnaire de mémoire peut augmenter la taille de la liste de renommage à n’importe quelle taille nécessaire pour améliorer les performances.

Notez que lorsque le pilote d’affichage en mode utilisateur définit le membre Ignorer de D3DDDICB_LOCKFLAGS, le gestionnaire de mémoire vidéo n’appelle pas le pilote de miniport d’affichage pour allouer des allocations supplémentaires pour l’allocation d’origine. Le gestionnaire de mémoire vidéo crée toutes les allocations supplémentaires à l’aide des paramètres de création de l’allocation d’origine. Du point de vue du pilote miniport d’affichage, la même allocation est paginée dans à plusieurs emplacements de segment simultanés.