Freigeben über


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);
    }
}

Effekte (Direct3D 11)