Stream-Output Phase
Der Zweck der Stream-Ausgabephase besteht darin, kontinuierlich Vertexdaten aus der Geometry-Shader-Phase (oder der Vertex-Shader-Stufe, wenn die Geometry-Shader-Phase inaktiv ist) in einen oder mehrere Puffer im Arbeitsspeicher auszugeben (siehe Erste Schritte mit der Stream-Output Stage).
Die Streamausgabephase (STREAM-Output Stage, SO) befindet sich in der Pipeline direkt nach der Geometrie-Shader-Phase und kurz vor der Rasterphase, wie im folgenden Diagramm dargestellt.
Daten, die in den Arbeitsspeicher gestreamt werden, können in einem nachfolgenden Renderingdurchlauf in die Pipeline zurückgelesen oder in eine Stagingressource kopiert werden (damit sie von der CPU gelesen werden können). Die Menge der gestreamten Daten kann variieren. Die ID3D11DeviceContext::D rawAuto-API ist für die Verarbeitung der Daten konzipiert, ohne dass (die GPU) die Menge der geschriebenen Daten abgefragt werden muss.
Wenn ein Dreieck oder Linienstreifen an die Eingabe-Assembler-Phase gebunden ist, wird jeder Streifen in eine Liste konvertiert, bevor er gestreamt wird. Scheitelpunkte werden immer als vollständige Primitive ausgeschrieben (z. B. 3 Scheitelpunkte gleichzeitig für Dreiecke); unvollständige Primitive werden nie gestreamt. Primitive Typen mit Adjazenz verwerfen die Adjacency-Daten, bevor Daten gestreamt werden.
Es gibt zwei Möglichkeiten, Streamausgabedaten in die Pipeline einzuspeisen:
- Streamausgabedaten können in die Eingabe-Assembler-Phase zurückgespeist werden.
- Streamausgabedaten können von programmierbaren Shadern mithilfe von Ladefunktionen (z. B . Load) gelesen werden.
Um einen Puffer als Streamausgaberessource zu verwenden, erstellen Sie den Puffer mit dem Flag D3D11_BIND_STREAM_OUTPUT . Die Streamausgabephase unterstützt bis zu 4 Puffer gleichzeitig.
- Wenn Sie Daten in mehrere Puffer streamen, kann jeder Puffer nur ein einzelnes Element (bis zu 4 Komponenten) von Daten pro Vertex erfassen, wobei ein impliziter Datenschritt der Elementbreite in jedem Puffer entspricht (kompatibel mit der Art und Weise, wie Einzelne Elementpuffer für Eingabe in Shaderphasen gebunden werden können). Wenn die Puffer unterschiedliche Größen aufweisen, wird das Schreiben beendet, sobald einer der Puffer voll ist.
- Wenn Sie Daten in einen einzelnen Puffer streamen, kann der Puffer bis zu 64 skalare Komponenten von Daten pro Vertex (256 Bytes oder weniger) erfassen, oder der Vertexschritt kann bis zu 2048 Bytes betragen.
In diesem Abschnitt
Thema | BESCHREIBUNG |
---|---|
Erste Schritte mit der Stream-Output Stage |
In diesem Abschnitt wird beschrieben, wie Sie einen Geometrie-Shader mit der Streamausgabephase verwenden. |