Partager via


Redimensionnement d’un pool de vignettes

Utilisez l’API ID3D11DeviceContext2::ResizeTilePool pour développer un pool de vignettes si l’application a besoin d’un ensemble plus opérationnel pour le mappage des ressources en mosaïques ou pour réduire si moins d’espace est nécessaire. Une autre option pour les applications consiste à allouer des pools de vignettes supplémentaires pour les nouvelles ressources en mosaïques. Toutefois, si une ressource en mosaïque unique a besoin de plus d’espace qu’initialement disponible dans son pool de vignettes, la croissance du pool de vignettes est une bonne option. Une ressource en mosaïque ne peut pas avoir de mappages dans plusieurs pools de vignettes en même temps.

Lorsqu’un pool de vignettes est développé, des vignettes supplémentaires sont ajoutées à la fin via une ou plusieurs nouvelles allocations par le pilote d’affichage. Cette répartition en allocations n’est pas visible par l’application. La mémoire existante dans le pool de vignettes n’est pas affectée, et les mappages de ressources en mosaïques existants dans cette mémoire restent intacts.

Lorsqu’un pool de vignettes est réduit, les vignettes sont supprimées de la fin. Les vignettes sont supprimées même en dessous de la taille d’allocation initiale, jusqu’à 0, ce qui signifie que les nouveaux mappages ne peuvent pas être effectués au-delà de la nouvelle taille. Toutefois, les mappages existants au-delà de la fin de la nouvelle taille restent intacts et utilisables. Le pilote d’affichage conserve la mémoire tant que les mappages à n’importe quelle partie des allocations que le pilote utilise pour la mémoire du pool de mosaïques restent. Si après avoir réduit une partie de la mémoire a été maintenue en vie parce que les mappages de vignettes pointent vers elle et que le pool de vignettes est resserré (de n’importe quelle quantité), la mémoire existante est réutilisée d’abord avant que des allocations supplémentaires ne se produisent pour traiter la taille de l’opération de croissance.

Pour pouvoir économiser de la mémoire, une application doit non seulement réduire un pool de vignettes, mais également supprimer/remapper les mappages existants au-delà de la fin du nouveau pool de vignettes plus petit.

Le fait de réduire (et de supprimer les mappages) ne produit pas nécessairement des économies de mémoire immédiates. La libération de la mémoire dépend de la précision des allocations sous-jacentes du pilote d’affichage pour le pool de vignettes. Lorsque la réduction est suffisante pour rendre une allocation de pilote d’affichage inutilisée, le pilote d’affichage peut la libérer. Si un pool de vignettes a été agrandi, le fait de réduire les tailles précédentes (et de supprimer/réappliquer les mappages de vignettes en conséquence) est plus susceptible de générer des économies de mémoire, bien que non garantis dans le cas où les tailles ne s’alignent pas exactement sur les tailles d’allocation sous-jacentes choisies par le pilote d’affichage.

Mappages dans un pool de vignettes