Stream Out-Syntax
Ein Geometry-Shader mit Stream out wird mit einer bestimmten Syntax deklariert. In diesem Thema wird die Syntax beschrieben. In der Effektlaufzeit wird diese Syntax in einen Aufruf von ID3D11Device::CreateGeometryShaderWithStreamOutput konvertiert.
Konstruktsyntax
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Name | Beschreibung |
---|---|
StreamingShaderVar | Optional. Eine ASCI-Zeichenfolge, die den Namen einer Geometry-Shadervariable mit Streamout eindeutig identifiziert. Dies ist optional, da ConstructGSWithSO direkt in einem SetGeometryShader- oder BindInterfaces-Aufruf platziert werden kann. |
ShaderVar | Eine Geometrie-Shader- oder Vertex-Shadervariable. |
OutputDecl0 | Eine Zeichenfolge, die definiert, welche Shaderausgaben in Stream 0 gestreamt werden. Die Syntax finden Sie unten. |
Dies ist die Syntax, die in fx_4_0-Dateien definiert wurde. Beachten Sie, dass in gs_4_0- und vs_x-Shadern nur ein Datenstrom vorhanden ist. Der resultierende Shader gibt einen Stream sowohl an die Streamout-Einheit als auch an die Rasterizereinheit aus.
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
Name | Beschreibung |
---|---|
StreamingShaderVar | Optional. Eine ASCI-Zeichenfolge, die den Namen einer Geometry-Shadervariable mit Streamout eindeutig identifiziert. Dies ist optional, da ConstructGSWithSO direkt in einem SetGeometryShader- oder BindInterfaces-Aufruf platziert werden kann. |
ShaderVar | Eine Geometrie-Shader- oder Vertex-Shadervariable. |
OutputDecl0 | Eine Zeichenfolge, die definiert, welche Shaderausgaben in Stream 0 gestreamt werden. Die Syntax finden Sie unten. |
OutputDecl1 | Eine Zeichenfolge, die definiert, welche Shaderausgaben in Stream 1 gestreamt werden. Die Syntax finden Sie unten. |
OutputDecl2 | Eine Zeichenfolge, die definiert, welche Shaderausgaben in Stream 2 gestreamt werden. Die Syntax finden Sie unten. |
OutputDecl3 | Eine Zeichenfolge, die definiert, welche Shaderausgaben in Stream 3 gestreamt werden. Die Syntax finden Sie unten. |
RasterizedStream | Eine ganze Zahl, die angibt, welcher Stream an den Rasterizer gesendet wird. |
Beachten Sie, dass gs_5_0-Shader bis zu vier Datenströme definieren können. Der resultierende Shader gibt einen Stream an die Streamout-Einheit für jede Ausgabedeklaration ohne NULL und einen Stream der Rasterizereinheit aus.
Syntax der Stream Out-Deklaration
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Name | Beschreibung |
---|---|
Buffer | Optional. Eine ganze Zahl, 0 <= Puffer < 4, die angibt, an welchen Streamoutpuffer der Wert gehen soll. |
Semantik | Eine Zeichenfolge zusammen mit SemanticIndex, die angibt, welcher Wert ausgegeben werden soll. |
SemanticIndex | Optional. Der Index, der der Semantik zugeordnet ist. |
Maske | Optional. Eine Komponentenmaske, die angibt, welche Komponenten des Werts ausgegeben werden sollen. |
Es gibt eine spezielle Semantik mit der Bezeichnung "$SKIP", die eine leere Semantik angibt, sodass der entsprechende Speicher im Puffer für das Streamen unberührt bleibt. Die $SKIP Semantik kann keinen SemanticIndex, aber eine Maske haben.
Die gesamte Stream out-Deklaration kann NULL sein.
Beispiel
struct GSOutput
{
int4 Pos : Position;
int4 Color : Color;
int4 Texcoord : Texcoord;
};
[maxvertexcount(1)]
void gsBase (inout PointStream<GSOutput> OutputStream, inout PointStream<GSOutput> OutputStream1)
{
GSOutput output;
output.Pos = int4(1,2,3,4);
output.Color = int4(5,6,7,8);
output.Texcoord = int4(9,10,11,12);
OutputStream.Append(output);
output.Pos = int4(1,2,3,4);
output.Color = int4(5,6,7,8);
output.Texcoord = int4(9,10,11,12);
OutputStream1.Append(output);
};
GeometryShader pGSComp = CompileShader(gs_5_0, gsBase());
GeometryShader pGSwSO = ConstructGSWithSO(pGSComp, "0:Position.xy; 1:Position.zw; 2:Color.xy",
"3:Texcoord.xyzw; 3:$SKIP.x;", NULL, NULL, 1);
// The following two passes perform the same operation
technique11 SOPoints
{
pass
{
SetGeometryShader(ConstructGSWithSO(pGSComp, "0:Position.xy; 1:Position.zw; 2:Color.xy",
"3:Texcoord.xyzw; 3:$SKIP.x;", NULL, NULL, 1));
}
pass
{
SetGeometryShader(pGSwSO);
}
}
Zugehörige Themen