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);
}
}
Tópicos relacionados