Utilisation des valeurs générées par le système
Les valeurs générées par le système sont générées par l’étape d’assembleur d’entrée (IA) (basée sur la sémantique d’entrée fournie par l’utilisateur) pour permettre certaines efficacités dans les opérations de nuanceur. En attachant des données, telles qu’un ID d’instance (visible à l’étape Vs), un ID de vertex (visible par VS) ou un ID primitif (visible à l’étape/ GS) de nuanceur de pixels (PS), une étape de nuanceur (PS) ultérieure peut rechercher ces valeurs système pour optimiser le traitement à cette étape.
Par exemple, l’étape VS peut rechercher l’ID d’instance pour récupérer des données supplémentaires par vertex pour le nuanceur ou effectuer d’autres opérations ; les phases GS et PS peuvent utiliser l’ID primitif pour saisir les données par primitive de la même façon.
VertexID
Un ID de vertex est utilisé par chaque étape de nuanceur pour identifier chaque sommet. Il s’agit d’un entier non signé 32 bits dont la valeur par défaut est 0. Il est affecté à un sommet lorsque la primitive est traitée par l’étape d’assembleur d’entrée (IA). Attachez la sémantique de vertex-ID à la déclaration d’entrée du nuanceur pour informer l’étape IA de générer un ID par vertex.
L’IA ajoute un ID de vertex à chaque vertex à utiliser par les étapes du nuanceur. Pour chaque appel de dessin, l’ID de vertex est incrémenté de 1. Entre les appels de dessin indexés, le nombre revient à la valeur de début. Si l’ID de vertex dépasse (dépasse 2³² à 1), il s’encapsule à 0.
Pour tous les types primitifs, les sommets ont un ID de vertex associé à eux (quel que soit l’adjacency).
PrimitiveID
Un ID primitif est utilisé par chaque étape de nuanceur pour identifier chaque primitive. Il s’agit d’un entier non signé 32 bits dont la valeur par défaut est 0. Il est affecté à une primitive lorsque la primitive est traitée par l’étape d’assembleur d’entrée (IA). Pour informer l’étape IA de générer un ID primitif, attachez la sémantique primitive-ID à la déclaration d’entrée du nuanceur.
L’étape IA ajoute un ID primitif à chaque primitive à utiliser par l’étape de nuanceur geometry (GS) ou l’étape de nuanceur de vertex (VS) (selon la première étape active après la phase IA). Pour chaque appel de dessin indexé, l’ID primitif est incrémenté de 1, mais l’ID primitif est réinitialisé à 0 chaque fois qu’une nouvelle instance commence. Tous les autres appels de dessin ne modifient pas la valeur de l’ID d’instance. Si l’ID d’instance dépasse 2³² à 1, il est encapsulé à 0.
L’étape du nuanceur de pixels (PS) n’a pas d’entrée distincte pour un ID primitif. Toutefois, toute entrée de nuanceur de pixels qui spécifie un ID primitif utilise un mode d’interpolation constante.
Il n’existe aucune prise en charge de la génération automatique d’un ID primitif pour les primitives adjacentes. Pour les types primitifs avec addjacency, comme une bande de triangles avec addjacency, un ID primitif n’est conservé que pour les primitives intérieures (primitives non adjacentes), tout comme l’ensemble de primitives dans une bande de triangles sans adjacency.
InstanceID
Un ID d’instance est utilisé par chaque étape du nuanceur pour identifier l’instance de la géométrie en cours de traitement. Il s’agit d’un entier non signé 32 bits dont la valeur par défaut est 0.
L’étape d’assembleur d’entrée (IA) ajoute un ID d’instance à chaque sommet si la déclaration d’entrée du nuanceur de vertex inclut la sémantique de l’ID d’instance. Pour chaque appel de dessin indexé, l’ID d’instance est incrémenté de 1. Tous les autres appels de dessin ne modifient pas la valeur de l’ID d’instance. Si l’ID d’instance dépasse 2³² à 1, il est encapsulé à 0.
Exemple
L’illustration suivante montre comment les valeurs système sont attachées à une bande de triangles instancené dans l’étape d’assembleur d’entrée (IA).
Ces tables affichent les valeurs système générées pour les deux instances de la même bande de triangles. La première instance (instance U) est affichée en bleu, la deuxième instance (instance V) est affichée en vert. Les lignes solides connectent les sommets dans les primitives, les lignes pointillées connectent les sommets adjacents.
Les tableaux suivants indiquent les valeurs générées par le système pour l’instance U.
Données du vertex | C,U | D,U | E,U | F,U | G,U | H,U | I,U | J,U | K,U | L,U |
---|---|---|---|---|---|---|---|---|---|---|
VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
L’instance de bande triangle U a 3 primitives de triangle, avec les valeurs générées par le système suivantes :
Valeur 1 | Valeur 2 | Valeur 3 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 0 | 0 | 0 |
Les tableaux suivants montrent les valeurs générées par le système pour l’instance V.
Données du vertex | C,V | D,V | E,V | F,V | G,V | H,V | I,V | J,V | K,V | L,V |
---|---|---|---|---|---|---|---|---|---|---|
VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
L’instance de bande de triangleS V a 3 primitives de triangle, avec les valeurs générées par le système suivantes :
Valeur 1 | Valeur 2 | Valeur 3 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 1 | 1 | 1 |
L’étape d’assembleur d’entrée (IA) génère les ID (sommets, primitives et instance) ; notez également que chaque instance reçoit un ID d’instance unique. Les données se terminent par la coupe de bandes, qui sépare chaque instance de la bande de triangles.
Rubriques connexes
Étape d’assembleur d’entrée (IA)