Sdílet prostřednictvím


Syntaxe streamování

Shader geometrie s proudem je deklarován s konkrétní syntaxí. Toto téma popisuje syntaxi. V modulu runtime efektu bude tato syntaxe převedena na volání ID3D11Device::CreateGeometryShaderWithStreamOutput.

Syntaxe konstruktoru

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Jméno Popis
StreamingShaderVar Volitelný. Řetězec ASCI, který jednoznačně identifikuje název proměnné shaderu geometrie s datovým proudem. To je volitelné, protože KonstruktGSWithSO lze umístit přímo do Metody SetGeometryShader nebo BindInterfaces volání.
shaderVar Proměnná shaderu geometrie nebo shaderu vrcholů.
outputDecl0 Řetězec definující výstupy shaderu ve streamu 0 se streamují. Syntaxi najdete níže.

 

Toto je syntaxe definovaná v fx_4_0 souborech. Všimněte si, že v gs_4_0 a vs_x shadery existuje pouze jeden datový proud. Výsledný shader vypíše jeden datový proud do jednotky stream outu i rasterizační jednotky.

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2", 
"OutputDecl3", RasterizedStream )
Jméno Popis
StreamingShaderVar Volitelný. Řetězec ASCI, který jednoznačně identifikuje název proměnné shaderu geometrie s datovým proudem. To je volitelné, protože KonstruktGSWithSO lze umístit přímo do Metody SetGeometryShader nebo BindInterfaces volání.
shaderVar Proměnná shaderu geometrie nebo shaderu vrcholů.
outputDecl0 Řetězec definující výstupy shaderu ve streamu 0 se streamují. Syntaxi najdete níže.
outputDecl1 Řetězec definující výstupy shaderu ve streamu 1 se streamují. Syntaxi najdete níže.
outputDecl2 Řetězec definující výstupy shaderu ve streamu 2 se streamují. Syntaxi najdete níže.
OutputDecl3 Řetězec definující výstupy shaderu ve streamu 3 se streamují. Syntaxi najdete níže.
rasterizedStream Celé číslo určující, který datový proud se odešle do rasterizátoru.

 

Všimněte si, že gs_5_0 shadery můžou definovat až čtyři datové proudy. Výsledný shader vypíše jeden datový proud do jednotky stream out pro každou jinou nežNULL výstupní deklaraci a jeden stream rastrovací jednotku.

Syntaxe deklarace streamu

" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Jméno Popis
vyrovnávací paměti Volitelný. Celé číslo, 0 <= vyrovnávací paměť < 4, určující, na který datový proud vyrovnávací paměti hodnota přejde.
sémantické Řetězec spolu se sémanticIndex určující, která hodnota má být výstup.
SémanticIndex Volitelný. Index přidružený k sémantickému.
masky Volitelný. Maska komponenty označující, které součásti hodnoty se mají výstupem.

 

Existuje jedna speciální sémantická, označená jako "$SKIP", která označuje prázdnou sémantickou hodnotu a ponechá odpovídající paměť v vyrovnávací paměti mimo vyrovnávací paměť nedotčenou. Sémantický $SKIP nemůže mít sémanticIndex, ale může mít masku.

Celá deklarace datového proudu může být null.

Příklad

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

efekty (Direct3D 11)