Partager via


Présentation des mémoires tampons

Une ressource de mémoire tampon est une collection de données entièrement typées, regroupées en éléments. Les tampons stockent des données, telles que les coordonnées de texture dans une mémoire tampon de vertex, les index dans une mémoire tampon d’index, les constantes de nuanceur dans une mémoire tampon constante, les vecteurs de position, les vecteurs normaux ou l’état de l’appareil.

Un élément de mémoire tampon est constitué de 1 à 4 composants. Les éléments de mémoire tampon peuvent inclure des valeurs de données packées (telles que des valeurs de surface R8G8B8A8), des entiers 8 bits uniques ou quatre valeurs à virgule flottante 32 bits.

Une mémoire tampon est créée en tant que ressource non structurée. Étant donné qu’elle n’est pas structurée, une mémoire tampon ne peut pas contenir de niveaux mipmap, elle ne peut pas être filtrée lors de la lecture, et elle ne peut pas être multisamplée.

Types de mémoires tampons

Voici les types de ressources de mémoire tampon pris en charge par Direct3D 11.

Mémoire tampon de vertex

Une mémoire tampon de vertex contient les données de vertex utilisées pour définir votre géométrie. Les données de vertex incluent les coordonnées de position, les données de couleur, les données de coordonnées de texture, les données normales, et ainsi de suite.

L’exemple le plus simple d’une mémoire tampon de vertex est celui qui contient uniquement des données de position. Elle peut être visualisées comme l’illustration suivante.

illustration d’une mémoire tampon de vertex qui contient des données de position

Plus souvent, une mémoire tampon de vertex contient toutes les données nécessaires pour spécifier entièrement les sommets 3D. Par exemple, il peut s’agir d’une mémoire tampon de vertex qui contient une position par vertex, des coordonnées normales et de texture. Ces données sont généralement organisées en tant qu’ensembles d’éléments par vertex, comme illustré dans l’illustration suivante.

illustration d’une mémoire tampon de vertex qui contient des données de position, normales et de texture

Cette mémoire tampon de vertex contient des données par vertex ; chaque vertex stocke trois éléments (position, normal et coordonnées de texture). La position et la normale sont généralement spécifiées à l’aide de trois floats 32 bits et des coordonnées de texture à l’aide de deux floats 32 bits.

Pour accéder aux données à partir d’une mémoire tampon de vertex, vous devez savoir quel vertex accéder, ainsi que les paramètres de mémoire tampon supplémentaires suivants :

  • Offset : nombre d’octets entre le début de la mémoire tampon et les données du premier sommet.
  • BaseVertexLocation : nombre d’octets du décalage au premier sommet utilisé par l’appel de dessin approprié.

Avant de créer une mémoire tampon de vertex, vous devez définir sa disposition. Une fois l’objet de disposition d’entrée créé, vous le liez à l’étape d’assembleur d’entrée (IA).

Mémoire tampon d’index

Les mémoires tampons d’index contiennent des décalages entiers en mémoires tampons de vertex et sont utilisées pour afficher les primitives plus efficacement. Une mémoire tampon d’index contient un ensemble séquentiel d’index 16 bits ou 32 bits ; chaque index est utilisé pour identifier un sommet dans une mémoire tampon de vertex. Une mémoire tampon d’index peut être visualisées comme l’illustration suivante.

illustration d’une mémoire tampon d’index

Les index séquentiels stockés dans une mémoire tampon d’index se trouvent avec les paramètres suivants :

  • Offset : nombre d’octets de l’adresse de base de la mémoire tampon d’index.
  • StartIndexLocation : spécifie le premier élément de mémoire tampon d’index de l’adresse de base et le décalage. L’emplacement de début représente le premier index à afficher.
  • IndexCount : nombre d’index à afficher.

Début de la mémoire tampon d’index = Adresse de base de la mémoire tampon d’index + offset (octets) + StartIndexLocation * ElementSize (octets) ;

Dans ce calcul, ElementSize est la taille de chaque élément de mémoire tampon d’index, soit deux ou quatre octets.

Mémoire tampon constante

Une mémoire tampon constante vous permet de fournir efficacement des données de constantes de nuanceur au pipeline. Vous pouvez utiliser une mémoire tampon constante pour stocker les résultats de l’étape de sortie de flux. Conceptuellement, une mémoire tampon constante ressemble à une mémoire tampon de vertex à élément unique, comme illustré dans l’illustration suivante.

illustration d’une mémoire tampon de nuanceur constante

Chaque élément stocke une constante de composant de 1 à 4, déterminée par le format des données stockées.

Une mémoire tampon constante ne peut utiliser qu’un seul indicateur de liaison, qui ne peut pas être combiné avec n’importe quel autre indicateur de liaison.

Pour lire une mémoire tampon de constante de nuanceur à partir d’un nuanceur, utilisez une fonction de chargement HLSL. Chaque étape de nuanceur permet jusqu’à 15 mémoires tampons constantes de nuanceur ; chaque mémoire tampon peut contenir jusqu’à 4 096 constantes.

Mémoires tampons de sommets et d’index