Partager via


Introduction aux 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 mémoires 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 données des 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 composé de 1 à 4 composants. Les éléments de mémoire tampon peuvent inclure des valeurs de données compressées (comme 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 ne peut pas être échantillonnée plusieurs fois.

Types de mémoire tampon

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

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, etc.

L’exemple le plus simple d’une mémoire tampon de vertex est celle 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. Un exemple de ceci peut être une mémoire tampon de vertex qui contient la position par sommet, les coordonnées normales et les coordonnées de texture. Ces données sont généralement organisées sous forme d’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, de normale et de texture

Cette mémoire tampon de vertex contient des données par vertex ; chaque sommet stocke trois éléments (coordonnées de position, normale et de texture). La position et la normale sont généralement spécifiées à l’aide de trois floats 32 bits et les 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 sommet 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 entre le décalage et le 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 input-layout créé, vous le liez à l’étape Assembleur d’entrée (IA).

Mémoire tampon d’index

Les mémoires tampons d’index contiennent des décalages d’entiers en mémoires tampons de vertex et sont utilisées pour rendre 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 à partir de l’adresse de base et du 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, qui est de 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. D’un point de vue conceptuel, 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 constante de nuanceur

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 un 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 du 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