Stream-Output Stage
Der Zweck der Streamausgabephase besteht in der kontinuierlichen Ausgabe (oder dem Streamen) von Scheitelpunktdaten aus der Geometry-Shader-Stufe (oder der Vertex-Shader-Stufe, wenn die Geometry-Shader-Phase inaktiv ist) in mindestens einem Puffer im Arbeitsspeicher (siehe Erste Schritte mit der Stream-Output-Phase).
Die Streamausgabephase (Stream-Output Stage, SO) befindet sich in der Pipeline direkt nach der Geometry-Shader-Phase und direkt vor der Rasterungsphase, wie im folgenden Diagramm dargestellt.

Daten, die in den Arbeitsspeicher gestreamt werden, können in einem nachfolgenden Rendering-Durchlauf zurück in die Pipeline gelesen oder in eine Stagingressource kopiert werden (damit sie von der CPU gelesen werden können). Die Menge der aus dem Stream übertragenen Daten kann variieren. Die ID3D11DeviceContext::D rawAuto-API wurde entwickelt, um die Daten zu verarbeiten, ohne dass (gpu) die Menge der geschriebenen Daten abfragen muss.
Wenn ein Dreiecks- oder Linienstreifen an die Eingabe-Assembler-Stufe gebunden ist, wird jeder Strip in eine Liste konvertiert, bevor er herausgestreamt wird. Scheitelungen werden immer als vollständige Primitive geschrieben (z. B. 3 Scheiteltices gleichzeitig für Dreiecke); Unvollständige Primitive werden nie gestreamt. Primitive Typen mit Adjacency verwerfen die Adjacency-Daten, bevor Daten gestreamt werden.
Es gibt zwei Möglichkeiten, Streamausgabedaten in die Pipeline zu übertragen:
- Streamausgabedaten können wieder in die Eingabe-Assembler-Phase eingespeist werden.
- Streamausgabedaten können von programmierbaren Shadern mithilfe von Ladefunktionen (z. B. Laden) 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 Pro-Scheitelpunkt-Daten erfassen, mit einem impliziten Datenschritt, der der Elementbreite in jedem Puffer entspricht (kompatibel mit der Art und Weise, wie Einzelne Elementpuffer für die Eingabe in Shaderstufen gebunden werden können). Wenn die Puffer unterschiedliche Größen haben, wird das Schreiben beendet, sobald einer der Puffer voll ist.
- Wenn Sie Daten in einen einzelnen Puffer streamen, kann der Puffer bis zu 64 Skalarkomponenten von Daten pro Scheitelpunkt (256 Byte oder weniger) erfassen, oder der Scheitelpunkt-Stride 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. |