Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les valeurs générées par le système sont générées par l’étape 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 par VS), un ID de vertex (visible par VS) ou un ID primitif (visible par GS/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.
Remarque
Ces valeurs générées par le système Direct3D s’appliquent aux applications, qu’elles utilisent le modèle d’application Win32 ou UWP.
VertexID
Un ID de vertex est utilisé par chaque étape du nuanceur pour identifier chaque vertex. 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 IA. Associez la sémantique d’identifiant de sommet à la déclaration d’entrée du shader afin d’indiquer à l’étape IA de générer un identifiant par sommet.
L'IA ajoutera à chaque vertex un identifiant de vertex qui sera utilisé 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. Pour ID3D11DeviceContext::DrawIndexed et ID3D11DeviceContext::DrawIndexedInstanced, l’identifiant de sommet représente la valeur de l’indice. Si l’ID du sommet déborde (c’est-à-dire dépasse 2³² − 1), il revient à 0.
Pour tous les types primitifs, les sommets ont un identifiant de sommet qui leur est associé (quelle que soit l’adjacence).
PrimitiveID
Un identifiant de primitive est utilisé par chaque étape du shader 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 la phase IA. Pour informer l’étape IA de génération d’un ID primitif, attachez la sémantique d’ID primitif à la déclaration d’entrée du nuanceur.
L’étape IA ajoutera un identifiant de primitive à chaque primitive, destiné à être utilisé par le nuanceur de géométrie ou par l’étape du nuanceur de pixels (selon celle qui 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éborde (dépasse 2³² − 1), il revient à 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.
Il n’existe aucune prise en charge de la génération automatique d’un ID primitif pour les primitives adjacentes. Pour les primitives avec adjacence, comme une bande de triangles avec adjacence, un identifiant de primitive n’est conservé que pour les primitives intérieures (les primitives non adjacentes), comme pour l’ensemble des primitives d’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 IA ajoute un ID d’instance à chaque vertex si la déclaration d’entrée du nuanceur de vertex inclut la sémantique d’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’identifiant d’instance. Si l’identifiant d’instance dépasse 2³² − 1, il revient à 0.
Exemple
L’illustration suivante montre comment les valeurs système sont associées à une bande de triangles instanciée à l’étape 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 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 |
| Valeur | Valeur | Valeur | |
|---|---|---|---|
| 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 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 |
| 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 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