Stream-Ausgabestufe
Die Streamausgabephase (SO) kann Scheitelpunkte in den Arbeitsspeicher streamen, kurz bevor diese Scheitelpunkte beim Rasterizer eintreffen. Die Streamausgabe funktioniert wie ein Tippen in der Pipeline. Dieser Tipp kann auch dann aktiviert werden, wenn die Daten weiterhin zum Rasterizer fließen. Daten, die über die Streamausgabe gesendet werden, werden mit Puffern verkettet. Diese Puffer können bei nachfolgenden Durchläufen als Pipelineeingaben recirculiert werden.
Eine Einschränkung der Streamausgabe 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 bestimmten Speicherpuffer, an die gestreamt werden, nicht an einen bestimmten Geometrieshader und ein bestimmtes Streamausgabepaar gebunden sind. Nur die Beschreibung, welche Teile der Vertexdaten an eine Streamausgabe übertragen werden sollen, ist an den Geometry-Shader gebunden.
Die Streamausgabe kann nützlich sein, um geordnete Pipelinedaten zu speichern, die wiederverwendet werden. Beispielsweise kann ein Batch von Scheitelpunkten "skinned" werden, indem die Scheitelpunkte in die Pipeline übergeben werden, als ob es sich um unabhängige Punkte handelt (nur, um alle einmal zu besuchen), "Skinning"-Vorgänge an jedem Scheitelpunkt anzuwenden und die Ergebnisse in den Speicher zu streamen. Die gespeicherten "skinned" Scheitelpunkte stehen anschließend als Eingabe zur Verfügung.
Da die Menge der Ausgabe, die durch die Streamausgabe geschrieben wird, dynamisch ist, ist ein neuer Draw-Typ, DrawAuto, erforderlich, damit Streamausgabepuffer mit dem Eingabeassembler wiederverwendet werden können, ohne dass die CPU-Beteiligung bestimmt, wie viele Daten tatsächlich geschrieben wurden. Darüber hinaus sind Abfragen erforderlich, um den Streamausgabeü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-Runtime ruft die folgenden Treiberfunktionen auf, um die Streamausgabe zu erstellen und einzurichten:
CalcPrivateGeometryShaderWithStreamOutput