Eingabe-Assembler-Stufe
Die Direct3D 10- und höher-API unterteilt Funktionsbereiche der Pipeline in Phasen; Die erste Phase in der Pipeline ist die Input-Assembler-Phase (IA).
Der Zweck der Eingabe-Assembler-Phase besteht darin, primitive Daten (Punkte, Linien und/oder Dreiecke) aus vom Benutzer gefüllten Puffern zu lesen und die Daten in Grundtypen zusammenzustellen, die von den anderen Pipelinephasen verwendet werden. Die IA-Phase kann Scheitelpunkte zu verschiedenen primitiven Typen zusammensetzen (z. B. Linienlisten, Dreiecksstreifen oder Grundtypen mit Adjacency). Neue primitive Typen (z. B. eine Zeilenliste mit Adjazenz oder eine Dreiecksliste mit Adjazenz) wurden hinzugefügt, um den Geometrie-Shader zu unterstützen.
Adjacency-Informationen sind für eine Anwendung nur in einem Geometrie-Shader sichtbar. Wenn ein Geometrieshader mit einem Dreieck einschließlich Adjazenz aufgerufen würde, enthalten die Eingabedaten für instance drei Scheitelpunkte für jedes Dreieck und 3 Scheitelpunkte für Adjacencydaten pro Dreieck.
Wenn die Eingabe-Assembler-Phase zum Ausgeben von Adjacency-Daten angefordert wird, müssen die Eingabedaten Adjacencydaten enthalten. Dies kann die Bereitstellung eines Dummy-Scheitelpunkts (in Form eines entarteten Dreiecks) oder das Kennzeichnen eines der Vertexattribute erfordern, unabhängig davon, ob der Scheitelpunkt vorhanden ist oder nicht. Dies müsste auch von einem Geometrie-Shader erkannt und behandelt werden, obwohl die Degenerierung der Geometrie in der Rasterisierungsphase erfolgt.
Beim Zusammenstellen von Grundtypen besteht ein sekundärer Zweck der IA darin, vom System generierte Werte anzufügen, um Shader effizienter zu machen. Systemgenerierte Werte sind Textzeichenfolgen, die auch als Semantik bezeichnet werden. Alle drei Shaderphasen werden aus einem gemeinsamen Shaderkern erstellt, und der Shaderkern verwendet vom System generierte Werte (z. B. eine primitive ID, eine instance-ID oder eine Vertex-ID), sodass eine Shaderphase die Verarbeitung nur auf die Grundtypen, Instanzen oder Scheitelpunkte reduzieren kann, die noch nicht verarbeitet wurden.
Wie im Pipelineblockdiagramm gezeigt, werden die Daten an die Vertexshaderphase ausgegeben, sobald die IA-Phase Daten aus dem Speicher liest (die Daten zu Grundtypen zusammenfügt und vom System generierte Werte anfügt).
In diesem Abschnitt
Thema | BESCHREIBUNG |
---|---|
Erste Schritte mit der Input-Assembler Stage |
Es sind einige Schritte erforderlich, um die Eingabe-Assembler-Phase (IA) zu initialisieren. Sie müssen beispielsweise Pufferressourcen mit den Von der Pipeline benötigten Vertexdaten erstellen, der IA-Phase mitteilen, wo sich die Puffer befinden und welche Art von Daten sie enthalten, und den Typ der Grundtypen angeben, die aus den Daten zusammengesetzt werden sollen. |
Primitive Topologien |
Direct3D 10 und höher unterstützt mehrere primitive Typen (oder Topologien), die durch den D3D_PRIMITIVE_TOPOLOGY aufgezählten Typ dargestellt werden. Diese Typen definieren, wie Scheitelpunkte von der Pipeline interpretiert und gerendert werden. |
Verwenden der Input-Assembler-Phase ohne Puffer |
Das Erstellen und Binden von Puffern ist nicht erforderlich, wenn Ihre Shader keine Puffer erfordern. Dieser Abschnitt enthält ein Beispiel für einfache Vertex- und Pixelshader, die ein einzelnes Dreieck zeichnen. |
Verwenden von System-Generated-Werten |
Systemgenerierte Werte werden von der IA-Phase (basierend auf der vom Benutzer bereitgestellten Eingabesemantik) generiert, um bestimmte Effizienzen bei Shadervorgängen zu ermöglichen. |