Stream Out-Syntax
Ein Geometrie-Shader mit Stream out wird mit einer bestimmten Syntax deklariert. In diesem Thema wird die Syntax beschrieben. In der Effect Runtime 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 Geometrie-Shadervariablen mit stream out 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 Shader-Ausgaben in Stream 0 gestreamt werden. Syntax finden Sie weiter unten. |
Dies ist die Syntax, die in fx _ 4 _ 0-Dateien definiert wurde. Beachten Sie, dass es in gs _ 4 _ 0- und _ vs x-Shadern nur einen Datenstrom gibt. Der resultierende Shader gibt einen Stream sowohl an die Streamausgabeeinheit 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 Geometrie-Shadervariablen mit stream out 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 Shader-Ausgaben in Stream 0 gestreamt werden. Syntax finden Sie weiter unten. |
| OutputDecl1 | Eine Zeichenfolge, die definiert, welche Shader-Ausgaben in Stream 1 gestreamt werden. Syntax finden Sie weiter unten. |
| OutputDecl2 | Eine Zeichenfolge, die definiert, welche Shader-Ausgaben in Stream 2 ausgegeben werden. Syntax finden Sie weiter unten. |
| OutputDecl3 | Eine Zeichenfolge, die definiert, welche Shader-Ausgaben in Stream 3 ausgegeben werden. Syntax finden Sie weiter 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 für jede Ausgabedeklaration ohne NULL und einen Stream für die Rasterizereinheit an die Streamausgabeeinheit aus.
Stream Out-Deklarationssyntax
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
| Name | BESCHREIBUNG |
|---|---|
| Buffer | Optional. Eine ganze Zahl, 0 <= Puffer < 4, die angibt, an welchen Stream-Outpuffer der Wert gehen soll. |
| Semantische | Eine Zeichenfolge zusammen mit SemanticIndex, die angibt, welcher Wert ausgegeben werden soll. |
| SemanticIndex | Optional. Der Index, der der Semantik zugeordnet ist. |
| Mask | Optional. Eine Komponentenmaske, die angibt, welche Komponenten des Werts ausgegeben werden. |
Es gibt eine spezielle Semantik mit der Bezeichnung "$SKIP", die eine leere Semantik angibt, wodurch der entsprechende Arbeitsspeicher im Stream-Out-Puffer unverändert 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);
}
}