Freigeben über


Stream-Output Phase

Der Zweck der Datenstromausgabestufe besteht darin, Vertexdaten aus der Geometrie-Shader-Phase (oder der Vertex-Shader-Phase, wenn die Geometrie-Shader-Phase inaktiv ist) kontinuierlich auszugeben (siehe Erste Schritte mit der Stream-Output Phase).

Die Streamausgabestufe (SO) befindet sich direkt hinter der Geometrie-Shader-Phase und direkt vor der Rasterungsphase, wie im folgenden Diagramm dargestellt.

Diagramm der Position der Datenstromausgabestufe in der Pipeline

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; die ID3D11DeviceContext::D rawAuto-API ist so konzipiert, dass die Daten verarbeitet werden, ohne dass die GPU (GPU) über die Menge geschriebener Daten abgefragt werden muss.

Wenn ein Dreieck oder ein Linienstreifen an die Eingabeassemblerphase 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.

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

  • Streamausgabedaten können in die Eingabeassemblerphase zurückgespeist werden.
  • Streamausgabedaten können von programmierbaren Shadern mithilfe von Ladefunktionen gelesen werden (z. B. Load).

Um einen Puffer als Streamausgaberessource zu verwenden, erstellen Sie den Puffer mit dem D3D11_BIND_STREAM_OUTPUT Flag. 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.

In diesem Abschnitt

Thema Beschreibung
Erste Schritte mit der Stream-Output Phase
In diesem Abschnitt wird beschrieben, wie Sie einen Geometrie-Shader mit der Streamausgabestufe verwenden.

Grafikpipeline-

Pipelinephasen (Direct3D 10)