Sintaxe do Stream Out

Um sombreador de geometria com fluxo para fora é declarado com uma sintaxe específica. Este tópico descreve a sintaxe . No runtime de efeito, essa sintaxe será convertida em uma chamada para ID3D11Device::CreateGeometryShaderWithStreamOutput.

Sintaxe constructo

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Nome Descrição
StreamingShaderVar Opcional. Uma cadeia de caracteres ASCI que identifica exclusivamente o nome de uma variável de sombreador de geometria com fluxo para fora. Isso é opcional porque ConstructGSWithSO pode ser colocado diretamente em uma chamada SetGeometryShader ou BindInterfaces.
SombreadorVar Um sombreador de geometria ou variável de sombreador de vértice.
OutputDecl0 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 0 são transmitidas para fora. Veja abaixo a sintaxe.

 

Essa é a sintaxe definida em arquivos fx_4_0. Observe que, em sombreadores gs_4_0 e vs_x, há apenas um fluxo de dados. O sombreador resultante produzirá um fluxo para a unidade de saída de fluxo e a unidade de rasterizador.

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2", 
"OutputDecl3", RasterizedStream )
Nome Descrição
StreamingShaderVar Opcional. Uma cadeia de caracteres ASCI que identifica exclusivamente o nome de uma variável de sombreador de geometria com fluxo para fora. Isso é opcional porque ConstructGSWithSO pode ser colocado diretamente em uma chamada SetGeometryShader ou BindInterfaces.
SombreadorVar Um sombreador de geometria ou variável de sombreador de vértice.
OutputDecl0 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 0 são transmitidas para fora. Veja abaixo a sintaxe.
OutputDecl1 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 1 são transmitidas para fora. Veja abaixo a sintaxe.
OutputDecl2 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 2 são transmitidas para fora. Veja abaixo a sintaxe.
OutputDecl3 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 3 são transmitidas para fora. Veja abaixo a sintaxe.
RasterizedStream Um inteiro que especifica qual fluxo será enviado para o rasterizador.

 

Observe que gs_5_0 sombreadores podem definir até quatro fluxos de dados. O sombreador resultante produzirá um fluxo para a unidade de saída de fluxo para cada declaração de saída não NULL e um fluxo da unidade do rasterizador.

Sintaxe de declaração do Stream Out

" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Nome Descrição
Buffer Opcional. Um inteiro, 0 <= Buffer < 4, especificando para qual buffer de fluxo o valor irá.
Semantic Uma cadeia de caracteres, juntamente com SemanticIndex, especificando qual valor deve ser gerado.
SemanticIndex Opcional. O índice associado à Semântica.
Máscara Opcional. Uma máscara de componente, indicando quais componentes do valor a ser gerado.

 

Há uma semântica especial, rotulada como "$SKIP" que indica uma semântica vazia, deixando a memória correspondente no buffer de fluxo intocada. A semântica $SKIP não pode ter um SemanticIndex, mas pode ter uma Máscara.

Toda a declaração de fluxo pode ser NULL.

Exemplo

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

Efeitos (Direct3D 11)