流出语法
使用流出流的几何着色器使用特定语法声明。 本主题介绍 语法。 在效果运行时中,此语法将转换为对 ID3D11Device::CreateGeometryShaderWithStreamOutput 的调用。
构造语法
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
“属性” | 说明 |
---|---|
StreamingShaderVar | 可选。 一个 ASCI 字符串,用于唯一标识带有流出流的几何着色器变量的名称。这是可选的,因为 ConstructGSWithSO 可以直接放置在 SetGeometryShader 或 BindInterfaces 调用中。 |
ShaderVar | 几何着色器或顶点着色器变量。 |
OutputDecl0 | 定义流 0 中哪些着色器输出被流式传输出去的字符串。有关语法,请参阅下文。 |
这是在fx_4_0文件中定义的语法。 请注意,在gs_4_0和vs_x着色器中,只有一个数据流。 生成的着色器会将一个流输出到流出单元和光栅器单元。
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
“属性” | 说明 |
---|---|
StreamingShaderVar | 可选。 一个 ASCI 字符串,用于唯一标识带有流出流的几何着色器变量的名称。这是可选的,因为 ConstructGSWithSO 可以直接放置在 SetGeometryShader 或 BindInterfaces 调用中。 |
ShaderVar | 几何着色器或顶点着色器变量。 |
OutputDecl0 | 定义流 0 中哪些着色器输出被流式传输出去的字符串。有关语法,请参阅下文。 |
OutputDecl1 | 定义流 1 中哪些着色器输出被流式传输出去的字符串。有关语法,请参阅下文。 |
OutputDecl2 | 定义流 2 中哪些着色器输出的字符串。有关语法,请参阅下文。 |
OutputDecl3 | 定义流 3 中哪些着色器输出的字符串。有关语法,请参阅下文。 |
RasterizedStream | 一个整数,指定将发送到光栅器的流。 |
请注意,gs_5_0着色器最多可以定义四个数据流。 生成的着色器将每个非 NULL 输出声明的流输出单元输出一个流,将一个流输出光栅器单元。
流出声明语法
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
“属性” | 说明 |
---|---|
Buffer | 可选。 一个整数,0 <= 缓冲区 < 4,指定值将转到哪个流出缓冲区。 |
语义 | 一个字符串,以及 SemanticIndex,用于指定要输出的值。 |
SemanticIndex | 可选。 与语义关联的索引。 |
掩码 | 可选。 一个组件掩码,指示要输出值的哪些组件。 |
有一个标记为“$SKIP”的特殊语义,指示空语义,使流出缓冲区中的相应内存保持不变。 $SKIP语义不能有 SemanticIndex,但可以有掩码。
整个流输出声明可以为 NULL。
示例
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);
}
}
相关主题