Freigeben über


Streamausgabephase (SO)

Die Streamausgabephase (SO) gibt kontinuierlich Vertexdaten aus der vorherigen aktiven Phase in einen oder mehrere Puffer im Arbeitsspeicher aus (oder datenströme). Daten, die in den Arbeitsspeicher gestreamt werden, können als Eingabedaten wieder in die Pipeline umgeleitet oder von der CPU zurückgelesen werden.

Zweck und Verwendung

Diagramm der Position der Streamausgabestufe in der Pipeline

Die Streamausgabestufe streamt primitive Daten aus der Pipeline in den Arbeitsspeicher auf dem Weg zum Rasterizer. Daten aus der vorherigen Phase können in den Arbeitsspeicher gestreamt und/oder an den Rasterizer übergeben werden. Daten, die in den Arbeitsspeicher gestreamt werden, können als Eingabedaten wieder in die Pipeline umgeleitet oder von der CPU zurückgelesen werden.

Daten, die in den Arbeitsspeicher gestreamt werden, können in die Pipeline in einem nachfolgenden Renderingdurchlauf zurückgelesen oder in eine Stagingressource kopiert werden (damit sie von der CPU gelesen werden können). Die Datenmenge, die ausgestreamt wurde, kann variieren; Direct3D wurde entwickelt, um die Daten zu verarbeiten, ohne die GPU (GPU) über die Menge der geschriebenen Daten abzufragen.-->

Es gibt zwei Möglichkeiten, Datenstromausgabedaten in die Pipeline zu übertragen:

  • Streamausgabedaten können in die Eingabeassemblerphase (Input Assembler, IA) zurückgespeist werden.
  • Streamausgabedaten können von programmierbaren Shadern mithilfe von Load-Funktionen gelesen werden.

Eingabe

Vertexdaten aus einer vorherigen Shaderphase.

Ausgabe

Die Streamausgabephase (SO) gibt kontinuierlich Vertexdaten aus der vorherigen aktiven Phase aus, z. B. die Geometry Shader -Stufe (GS) in einen oder mehrere Puffer im Arbeitsspeicher. Wenn die Geometry-Shaderphase (GS) inaktiv ist, gibt die Streamausgabephase (SO) kontinuierlich Vertexdaten aus der Domänen-Shader-Phase (DS) aus, um Puffer im Arbeitsspeicher (oder wenn DS ebenfalls inaktiv ist) aus der Vertex-Shaderphase (VS) auszugeben.

Wenn ein Dreieck oder ein Linienstreifen an die Eingabeassemblerphase (Input Assembler, IA) gebunden ist, wird jeder Streifen in eine Liste konvertiert, bevor sie gestreamt werden. Scheitelpunkte werden immer als vollständige Grundtypen geschrieben (z. B. 3 Scheitelpunkte gleichzeitig für Dreiecke); Unvollständige Grundtypen werden nie ausgestreamt. Primitive Typen mit Angrenzenden verwerfen die Angrenzenden Daten vor dem Streamen von Daten.

Die Streamausgabestufe 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) pro Vertexdaten erfassen, wobei ein impliziter Datenschritt der Elementbreite in jedem Puffer entspricht (kompatibel mit der Art und Weise, wie einzelne Elementpuffer für die Eingabe in Shaderphasen gebunden werden können). Wenn die Puffer unterschiedliche Größen aufweisen, wird das Schreiben beendet, sobald ein Puffer voll ist.
  • Wenn Sie Daten in einen einzelnen Puffer streamen, kann der Puffer bis zu 64 skalare Komponenten pro Vertexdaten (256 Byte oder weniger) erfassen oder die Vertexstrende kann bis zu 2048 Bytes betragen.

Grafikpipeline