Freigeben über


Stream-Ausgabestufe

Die Stream-Ausgabe-Phase (SO) kann Vertex-Daten zu einem Speicher streamen, unmittelbar bevor diese an den Rasterizer übergeben werden. Die Datenstromausgabe funktioniert wie ein Tippen in der Pipeline. Diese Steuerung kann auch dann aktiviert werden, wenn Daten weiterhin an den Rasterizer fließen. Daten, die über die Datenstromausgabe gesendet werden, werden mit Puffern verkettet. Diese Puffer können bei nachfolgenden Durchläufen als Pipelineeingaben wiederverwendet werden.

Eine Einschränkung für die Datenstromausgabe besteht darin, dass sie an den Geometrie-Shader gebunden ist, da sie zusammen erstellt werden müssen (obwohl beides "NULL"/"off" sein kann). Obwohl die speziellen Speicherpuffer, auf die gestreamt wird, nicht mit einem bestimmten Geometrie-Shader und Datenstromausgabe-Paar verbunden sind. Nur die Beschreibung, welche Teile der Vertexdaten in eine Datenstromausgabe übertragen werden sollen, ist an den Geometrie-Shader gebunden.

Die Stream-Ausgabe kann nützlich sein, um geordnete Pipelinedaten zu speichern, die wiederverwendet werden. Beispielsweise kann eine Gruppe von Scheitelpunkten "geskinnt" werden, indem man die Scheitelpunkte als unabhängige Punkte in die Pipeline einspeist (um jeden einmal zu verarbeiten), auf jeden einzelnen Skinning-Operationen anwendet und die Ergebnisse in den Speicher streamt. Die gespeicherten "skinned" Vertices stehen anschließend als Eingabe zur Verfügung.

Da die Ausgabemenge, die über die Datenstromausgabe geschrieben wird, dynamisch ist, ist ein neuer Draw-, DrawAuto-Typ erforderlich, um die Wiederverwendung von Streamausgabepuffern mit dem Eingabeassembler zu ermöglichen, ohne dass die CPU-Einbindung erforderlich ist, um zu bestimmen, wie viel Daten tatsächlich geschrieben wurden. Darüber hinaus sind Abfragen erforderlich, um den Datenstromausgabeüberlauf zu minimieren und abzurufen, wie viele Daten in die Streamausgabepuffer geschrieben wurden (D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE und D3D10DDI_QUERY_STREAMOUTPUTSTATS der D3D10DDI_QUERY Enumeration).

Die Direct3D-Laufzeit ruft die folgenden Treiberfunktionen auf, um die Datenstromausgabe zu erstellen und einzurichten:

CalcPrivateGeometryShaderWithStreamOutput

CreateGeometryShaderWithStreamOutput

SoSetTargets