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.
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.
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.
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.
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.
Rubriques connexes
Mémoires tampons de sommets et d’index
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour