Vorgehensweise: Indizieren mehrerer Ausgabedatenströme
Im Shadermodell 5 kann ein Geometrie-Shader bis zu vier separate Streams unterstützen. Dies bedeutet, dass ein einzelner Shader abhängig von der Anzahl der deklarierten Streams zwischen einem und vier Ausgabestreams ausgeben kann.
So indizieren Sie mehrere Ausgabedatenströme
Definieren Sie einen Datenstrom mithilfe eines Streamvorlagentyps.
inout PointStream<OutVertex1> myStream1,
Definieren Sie einen zweiten Datenstrom mithilfe eines Streamvorlagentyps.
inout PointStream<OutVertex2> myStream2 )
Geben Sie Daten mithilfe der systeminternen Funktionen des Streamausgabeobjekts (z. B. Append oder RestartStrip) in einen (oder beide) Streams aus.
void MyGS( InVertex verts[2], inout PointStream<OutVertex1> myStream1, inout PointStream<OutVertex2> myStream2 ) { OutVertex1 myVert1 = TransformVertex1( verts[0] ); OutVertex2 myVert2 = TransformVertex2( verts[1] ); myStream1.Append( myVert1 ); myStream2.Append( myVert2 ); }
Wenn Sie einen einzelnen Ausgabedatenstrom verwenden, können Sie Dreiecksstreifen, Linienstreifen oder Punktlisten ausgeben. Wenn Sie Dreiecks- und Linienstreifen im Streamoutpuffer speichern, werden sie zu Dreiecks- und Zeilenlisten erweitert. Sie können auch einen Stream rastern und nicht an einen Speicherpuffer senden.
Bei Verwendung mehrerer Ausgabedatenströme müssen alle Datenströme Punkte enthalten, und bis zu einem Ausgabestream kann an den Rasterizer gesendet werden. In der Regel rastert eine Anwendung keinen Stream.
Nachdem Sie Daten in einen Puffer gestreamt haben, können Sie diese Daten verwenden, um jeden primitiven Typ zu rendern, nicht nur den primitiven Typ, den Sie zum Füllen des Puffers verwendet haben.
Die Gesamtausgabe des Geometrie-Shaders ist auf 1024 Skalar beschränkt. Wenn mehrere Datenströme vorhanden sind, wird die Anzahl von Skalaren aus dem größten Streamtyp multipliziert mit der maximalen Vertexanzahl berechnet.
Unterschiede zwischen Shadermodell 4 und Shadermodell 5:
Shadermodell 4:
- Die maximale Anzahl von Skalaren für die Streamausgabe beträgt 64.
- Die Registermaske pro Komponente muss über den Indexbereich übereinstimmen.
- Die maximale Anzahl von Skalaren für die Streamausgabe ist 128.
- Die Registermaske pro Komponente muss nicht über den Indexbereich übereinstimmen.
- Die dynamische Indizierung von Ausgaben muss für alle Datenströme zulässig sein.
- Interpolationsmodi müssen für die Streams nicht übereinstimmen.