Partager via


Utilisation de 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 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 du nuanceur de sommet (VS)), un ID de sommet (visible à l'étape VS) ou un ID primitif (visible à l'étape du nuanceur de géométrie (GS)/et à l'étape du nuanceur de pixels (PS)), une étape de nuanceur 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 sommet est utilisé par chaque étape de shader 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 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 ajoutera un identifiant de sommet à chaque sommet pour être utilisé par les étages du shader. 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 sommet associé à eux (quel que soit l’adjacence).

PrimitiveID

Un ID primitif est utilisé par chaque étage du shader 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’étapede l’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 ajoutera un ID primitif à chaque primitive, pour être utilisé par l’étape nuanceur géométrique (GS) ou l’étape nuanceur de sommet (VS), selon quelle est la première étape active après l’étape 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 Pixel Shader (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 adjacence, comme une bande de triangles avec adjacence, un ID primitif est conservé uniquement pour les primitives intérieures (les primitives non adjacentes), tout comme l’ensemble des primitives dans une bande de triangles sans adjacence.

ID d'instance

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 'assembleur d'entrée (IA) ajoutera un ID d'instance à chaque sommet si la déclaration d'entrée du nuanceur de sommets 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 de

L’illustration suivante montre comment les valeurs système sont attachées à une bande de triangles instanciée dans l’étape 'Assembleur d'Entrée (IA).

illustration des valeurs système pour une bande de triangles instanciée

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 de sommet 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
IDPrimitif 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 de sommet 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 triangle V a 3 primitives de triangles, avec les valeurs générées par le système suivantes :

Valeur 1 Valeur 2 Valeur 3
IDPrimitif 0 1 2
InstanceID 1 1 1

 

L’étape d’assembleur d’entrée (IA) génère les ID (sommets, primitives et instances) ; notez également que chaque instance reçoit un ID d’instance unique. Les données se terminent par la découpe, qui sépare chaque instance de la bande de triangles.

Input-Assembler (IA) étape