Utilisation de valeurs System-Generated

Les valeurs générées par le système sont générées par la phase IA (en fonction de la sémantique d’entrée fournie par l’utilisateur) pour permettre une certaine efficacité dans les opérations du nuanceur.

En attachant des données, telles qu’un ID de instance (visible pour VS), un ID de vertex (visible pour VS) ou un ID primitif (visible pour GS/PS), une étape de nuanceur suivante peut rechercher ces valeurs système pour optimiser le traitement à cette étape. Par instance, l’étape VS peut rechercher l’ID de instance pour récupérer des données par vertex supplémentaires pour le nuanceur ou pour effectuer d’autres opérations ; les phases GS et PS peuvent utiliser l’ID primitif pour récupérer les données par primitive de la même façon.

VertexID

Un ID de vertex est utilisé par chaque étape du nuanceur pour identifier chaque sommet. Il s’agit d’un entier non signé 32 bits dont la valeur par défaut est 0. Elle est affectée à un sommet lorsque la primitive est traitée par l’étape IA. Attachez la sémantique vertex-id à la déclaration d’entrée du nuanceur pour informer la phase IA de générer un ID par vertex.

L’IA ajoute un ID de vertex à chaque sommet à utiliser par les étapes du nuanceur. Pour chaque appel de dessin, l’ID de vertex est incrémenté de 1. Dans les appels de dessin indexés, le nombre revient à la valeur de début. Pour ID3D11DeviceContext::D rawIndexed et ID3D11DeviceContext::D rawIndexedInstanced, l’ID de vertex représente la valeur d’index. Si l’ID de vertex dépasse 2³² à 1, il est encapsulé à 0.

Pour tous les types primitifs, un ID de vertex est associé aux vertex (quelle que soit la distinction).

PrimitiveID

Un ID primitif est utilisé par chaque étape du nuanceur pour identifier chaque primitive. Il s’agit d’un entier non signé 32 bits dont la valeur par défaut est 0. Elle est affectée à une primitive lorsque la primitive est traitée par l’étape 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 le nuanceur geometry ou l’étape de nuanceur de pixels (selon la première phase active après l’étape IA). Pour chaque appel de dessin indexé, l’ID primitif est incrémenté de 1. Toutefois, 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 de instance. Si l’id de instance dépasse 2³² à 1, il est encapsulé à 0.

L’étape du nuanceur de pixels 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.

La génération automatique d’un ID primitif pour les primitives adjacentes n’est pas prise en charge. Pour les types primitifs avec adjacence, comme une bande de triangles avec adjacence, un ID primitif est uniquement conservé pour les primitives intérieures (primitives non adjacentes), tout comme l’ensemble des primitives dans une bande de triangles sans adjacence.

InstanceID

Un ID de instance est utilisé par chaque étape du nuanceur pour identifier le 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 IA ajoute un ID instance à chaque sommet si la déclaration d’entrée du nuanceur de vertex inclut la sémantique d’id instance. Pour chaque appel de dessin indexé, instance ID est incrémenté de 1. Tous les autres appels de dessin ne modifient pas la valeur de instance id. Si instance id 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 instances dans la phase IA.

illustration des valeurs système d’une bande de triangles instance

Ces tableaux 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 pleines relient les sommets dans les primitives, les lignes en pointillés relient les sommets adjacents.

Les tableaux suivants montrent les valeurs générées par le système pour l’instance U.

Données de 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

 

Valeur Valeur Valeur
PrimitiveID 0 1 2
InstanceID 0 0 0

 

Les tableaux suivants indiquent les valeurs générées par le système pour le instance V.

Données de 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

 

Valeur Valeur Valeur
PrimitiveID 0 1 2
InstanceID 1 1 1

 

L’assembleur d’entrée génère les id (vertex, primitive et instance) ; notez également que chaque instance reçoit un id de instance unique. Les données se terminent par la coupe de bande, qui sépare chaque instance de la bande triangle.

Étape d’assembleur d’entrée