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