Verwenden von systemgenerierten Werten
Vom System generierte Werte werden von der Eingabeassemblerphase (IA) (basierend auf der vom Benutzer bereitgestellten Eingabesemantik) generiert, um bestimmte Effizienzen in Shadervorgängen zu ermöglichen. Durch Das Anfügen von Daten, z. B. eine Instanz-ID (sichtbar für die Vertex-Shaderphase (VS)), eine Vertex-ID (sichtbar für VS) oder eine Grundtyp-ID (sichtbar für die Phase Geometry Shader (GS) Pixel Shader (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 Daten pro Vertex für den Shader zu erfassen oder andere Vorgänge auszuführen; Die GS- und PS-Phasen können die Grundtyp-ID verwenden, um daten pro Grundtyp auf die gleiche Weise zu erfassen.
VertexID
Eine Vertex-ID wird von jeder Shaderstufe verwendet, 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 Grundtyp von der Eingabeassemblerphase (Input Assembler, IA) verarbeitet wird. Fügen Sie die Vertex-ID-Semantik an die Shadereingabedeklaration an, um die IA-Phase zu informieren, um eine Pro-Vertex-ID zu generieren.
Die IA fügt jedem Scheitelpunkt eine Scheitelpunkt-ID für die Verwendung durch Shaderphasen hinzu. Für jeden Draw-Aufruf wird die Vertex-ID um 1 erhöht. Bei indizierten Draw-Aufrufen wird die Anzahl wieder auf den Startwert zurückgesetzt. Wenn die Vertex-ID überläuft (überschreitet 2¹²– 1), wird sie auf 0 umgebrochen.
Für alle Grundtypen weisen Scheitelpunkte eine Vertex-ID auf (unabhängig von der Angrenzenden).
PrimitiveID
Eine Grundtyp-ID wird von jeder Shaderstufe verwendet, um jeden Grundtyp zu identifizieren. Es handelt sich um eine 32-Bit-ganzzahl ohne Vorzeichen, deren Standardwert 0 ist. Sie wird einem Grundtyp zugewiesen, wenn der Grundtyp von der Eingabeassemblerphase (Input Assembler, IA) verarbeitet wird. Um die IA-Phase zum Generieren einer Grundtyp-ID zu informieren, fügen Sie die Primitive-ID-Semantik an die Shadereingabedeklaration an.
In der IA-Phase wird jedem Grundtyp eine Grundtyp-ID für die Verwendung durch die Geometry-Shaderphase (GS) oder die Vertexshaderphase (je nachdem, welche erste Stufe nach der IA-Stufe aktiv ist) hinzugefügt. Für jeden indizierten Draw-Aufruf wird die Grundtyp-ID um 1 erhöht, die Grundtyp-ID wird jedoch bei Jedem Start einer neuen Instanz auf 0 zurückgesetzt. Alle anderen Draw-Aufrufe ändern nicht den Wert der Instanz-ID. Wenn die Instanz-ID überläuft (2¹²– 1 überschreitet), wird sie auf 0 umbrochen.
Die Pixelshaderphase (PS) verfügt nicht über eine separate Eingabe für eine Grundtyp-ID. Jede Pixel-Shadereingabe, die eine Grundtyp-ID angibt, verwendet jedoch einen konstanten Interpolationsmodus.
Es gibt keine Unterstützung für die automatische Generierung einer Grundtyp-ID für angrenzende Grundtypen. Bei Primitiventypen mit Adjacency, z. B. einem Dreiecksstreifen mit Angrenzendem, wird eine Grundtyp-ID nur für die inneren Grundtypen (die nicht angrenzenden Grundtypen) beibehalten, genau wie die Gruppe von Grundtypen in einem Dreiecksstreifen ohne Angrenzende.
InstanceID
Eine Instanz-ID wird von jeder Shaderstufe verwendet, um die Instanz der Geometrie zu identifizieren, die derzeit verarbeitet wird. Es handelt sich um eine 32-Bit-ganzzahl ohne Vorzeichen, deren Standardwert 0 ist.
Die Eingabeassemblerphase (Input Assembler, IA) fügt jedem Scheitelpunkt eine Instanz-ID hinzu, wenn die Deklaration des Vertex-Shaders 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 nicht den Wert der Instanz-ID. Wenn die Instanz-ID überläuft (2¹²– 1 überschreitet), wird sie auf 0 umgebrochen.
Beispiel
Die folgende Abbildung zeigt, wie Systemwerte an eine instanzierte Dreiecksleiste in der Eingabeassemblerphase (Input Assembler, IA) angefügt werden.
Diese Tabellen zeigen die Systemwerte, die für beide Instanzen desselben Dreiecksstreifens generiert wurden. Die erste Instanz (Instanz U) wird blau angezeigt, die zweite Instanz (Instanz V) wird grün angezeigt. Die durchgezogenen Linien verbinden die Scheitelpunkte in den Grundtypen, die gestrichelten Linien verbinden die angrenzenden Scheitelpunkte.
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 |
Die Dreiecksstreifeninstanz U verfügt über drei Dreiecksgrundtypen mit den folgenden vom System generierten Werten:
Wert 1 | Wert 2 | Wert 3 | |
---|---|---|---|
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 |
Dreiecksstreifeninstanz V verfügt über drei Dreiecksgrundtypen mit den folgenden vom System generierten Werten:
Wert 1 | Wert 2 | Wert 3 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 1 | 1 | 1 |
Die Eingabeassemblerphase (Input Assembler, IA) generiert die IDs (Scheitelpunkt, Grundtyp und Instanz). Beachten Sie außerdem, dass jede Instanz eine eindeutige Instanz-ID erhält. Die Daten enden mit dem Streifenschnitt, der jede Instanz des Dreiecksstreifens trennt.
Verwandte Themen