Verwenden System-Generated Werte
Vom System generierte Werte werden von der IA-Phase (basierend auf der vom Benutzer bereitgestellten Eingabesemantik) generiert, um bestimmte Effizienzen bei Shadervorgängen zu ermöglichen.
Durch anfügen von Daten, z. B. eine Instanz-ID (sichtbar für VS), eine Scheitelpunkt-ID (sichtbar für VS) oder eine primitive ID (sichtbar für GS/PS), kann eine nachfolgende Shaderphase nach diesen Systemwerten suchen, um die Verarbeitung in dieser Phase zu optimieren. Beispielsweise kann die VS-Phase nach der Instanz-ID suchen, um zusätzliche Pro-Scheitelpunkt-Daten für den Shader zu erhalten oder andere Vorgänge durchzuführen. Die GS- und PS-Phasen können die primitive ID verwenden, um primitive Daten auf die gleiche Weise zu greifen.
VertexID
Jede Shaderstufe verwendet eine Scheitelpunkt-ID, um jeden Scheitelpunkt zu identifizieren. Es handelt sich um eine 32-Bit-Ganzzahl ohne Vorzeichen, deren Standardwert 0 ist. Sie wird einem Scheitelpunkt zugewiesen, wenn der Primitive von der IA-Phase verarbeitet wird. Fügen Sie die Vertex-ID-Semantik an die Shadereingabedeklaration an, um die IA-Phase zu informieren, eine Scheitelpunkt-ID zu generieren.
Die IA fügt jedem Scheitelpunkt eine Scheitelpunkt-ID zur Verwendung durch Shaderstufen hinzu. Für jeden Draw-Aufruf wird die Scheitelpunkt-ID um 1 erhöht. Bei indizierten Zeichnen-Aufrufen wird die Anzahl auf den Startwert zurückgesetzt. Für ID3D11DeviceContext::D rawIndexed und ID3D11DeviceContext::D rawIndexedInstancedstellt die Scheitelpunkt-ID den Indexwert dar. Wenn die Scheitelpunkt-ID überläuft (überschreitet 2* bis 1), wird sie auf 0 (0) umbrechen.
Für alle primitiven Typen sind Scheitelpunkte mit einer Scheitelpunkt-ID verknüpft (unabhängig von der Adjakenz).
PrimitiveID
Jede Shaderstufe verwendet eine primitive ID, um die einzelnen Primitiven zu identifizieren. Es handelt sich um eine 32-Bit-Ganzzahl ohne Vorzeichen, deren Standardwert 0 ist. Sie wird einem Primitiv zugewiesen, wenn der Primitive von der IA-Phase verarbeitet wird. Um die IA-Phase zu informieren, eine primitive ID zu generieren, fügen Sie die Primitive-ID-Semantik an die Shadereingabedeklaration an.
Die IA-Stufe fügt jedem Primitiv eine primitive ID hinzu, die vom Geometrie-Shader oder der Pixel-Shader-Stufe verwendet werden kann (je nachdem, welcher Schritt nach der IA-Phase die erste aktive Phase ist). Für jeden indizierten Draw-Aufruf wird die primitive ID um 1 erhöht. Die primitive ID wird jedoch auf 0 zurückgesetzt, wenn eine neue Instanz beginnt. Alle anderen Draw-Aufrufe ändern den Wert der Instanz-ID nicht. Wenn die Instanz-ID überläuft (überschreitet 2* bis 1), wird sie auf 0 (0) umbruch.
Die Pixel-Shader-Stufe verfügt nicht über eine separate Eingabe für eine primitive ID. Jede Pixel-Shadereingabe, die eine primitive ID angibt, verwendet jedoch einen konstanten Interpolationsmodus.
Es gibt keine Unterstützung für das automatische Generieren einer primitiven ID für angrenzende Primitive. Bei primitiven Typen mit Adjazienz, z. B. einem Dreiecksstreifen mit Adjakenz, wird eine primitive ID nur für die inneren Primitiven (die nicht angrenzenden Primitiven) beibehalten, genau wie die Gruppe primitiver Typen in einem Dreiecksstreifen ohne Adjakenz.
InstanceID
Eine Instanz-ID wird von jeder Shaderstufe verwendet, um die Instanz der Geometrie zu identifizieren, die gerade verarbeitet wird. Es handelt sich um eine 32-Bit-Ganzzahl ohne Vorzeichen, deren Standardwert 0 ist.
Die IA-Phase fügt jedem Scheitelpunkt eine Instanz-ID hinzu, wenn die Vertex-Shadereingabedeklaration die Instanz-ID-Semantik enthält. Für jeden indizierten Draw-Aufruf wird die Instanz-ID um 1 erhöht. Alle anderen Draw-Aufrufe ändern den Wert der Instanz-ID nicht. Wenn die Instanz-ID überläuft (überschreitet 2* bis 1), wird sie auf 0 (0) umbrechen.
Beispiel
Die folgende Abbildung zeigt, wie Systemwerte an einen instanziierten Dreiecksstreifen in der IA-Phase angefügt werden.

In diesen Tabellen werden die Systemwerte angezeigt, die für beide Instanzen desselben Dreiecksstreifens generiert werden. Die erste Instanz (Instanz U) wird blau dargestellt, die zweite Instanz (Instanz V) in Grün. Die soliden Linien verbinden die Scheitelungen in den Primitiven, die gestrichelten Linien verbinden die angrenzenden Scheitelungen.
Die folgenden Tabellen zeigen die vom System generierten Werte für die Instanz U.
| Scheitelpunktdaten | C,U | D, U | E,U | Fick dich | 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 |
| Wert | Wert | Wert | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 0 | 0 | 0 |
Die folgenden Tabellen zeigen die vom System generierten Werte für die Instanz V.
| Scheitelpunktdaten | 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 |
| Wert | Wert | Wert | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 1 | 1 | 1 |
Der Eingabe-Assembler generiert die IDs (Scheitelpunkt, Primitiv und Instanz). Beachten Sie auch, dass jede Instanz eine eindeutige Instanz-ID erhält. Die Daten enden mit dem Striptrip, der jede Instanz des Dreiecksstreifens trennt.