Partilhar via


Sintaxe Stream out

Um sombreador de geometria com saída de fluxo é declarado com uma sintaxe específica. Este tópico descreve a sintaxe. No tempo de execução do efeito, essa sintaxe será convertida em uma chamada para ID3D11Device::CreateGeometryShaderWithStreamOutput.

Sintaxe de construção

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Designação 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.
ShaderVar 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. Veja abaixo a sintaxe.

 

Esta é a sintaxe que foi definida em fx_4_0 arquivos. Observe que nos 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 para a unidade do rasterizador.

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2", 
"OutputDecl3", RasterizedStream )
Designação 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.
ShaderVar 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. Veja abaixo a sintaxe.
OutputDecl1 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 1 são transmitidas. Veja abaixo a sintaxe.
OutputDecl2 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 2 são transmitidas. Veja abaixo a sintaxe.
OutputDecl3 Uma cadeia de caracteres que define quais saídas de sombreador no fluxo 3 são transmitidas. Veja abaixo a sintaxe.
RasterizedStream Um inteiro especificando 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 deNULL não e um fluxo para a unidade rasterizadora.

Sintaxe da Declaração de Stream out

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

 

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

Toda a declaração stream out 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);
    }
}

Effects (Direct3D 11)