Sintaxis de stream out
Un sombreador de geometría con salida de flujo se declara con una sintaxis determinada. En este tema se describe la sintaxis. En tiempo de ejecución del efecto, esta sintaxis se convertirá en una llamada a ID3D11Device::CreateGeometryShaderWithStreamOutput.
Sintaxis de construcción
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Nombre | Descripción |
---|---|
StreamingShaderVar | Opcional. Cadena ASCI que identifica de forma única el nombre de una variable de sombreador de geometría con salida de flujo. Esto es opcional porque ConstructGSWithSO se puede colocar directamente en una llamada a SetGeometryShader o BindInterfaces. |
ShaderVar | Variable de sombreador de geometría o sombreador de vértices. |
OutputDecl0 | Cadena que define qué salidas del sombreador de la secuencia 0 se transmiten. Consulte a continuación la sintaxis. |
Esta es la sintaxis definida en fx_4_0 archivos. Tenga en cuenta que en gs_4_0 y vs_x sombreadores, solo hay un flujo de datos. El sombreador resultante generará una secuencia en la unidad de salida de la secuencia y en la unidad de rasterizador.
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
Nombre | Descripción |
---|---|
StreamingShaderVar | Opcional. Cadena ASCI que identifica de forma única el nombre de una variable de sombreador de geometría con salida de flujo. Esto es opcional porque ConstructGSWithSO se puede colocar directamente en una llamada a SetGeometryShader o BindInterfaces. |
ShaderVar | Variable de sombreador de geometría o sombreador de vértices. |
OutputDecl0 | Cadena que define qué salidas del sombreador de la secuencia 0 se transmiten. Consulte a continuación la sintaxis. |
OutputDecl1 | Cadena que define las salidas del sombreador en la secuencia 1. Consulte a continuación la sintaxis. |
OutputDecl2 | Cadena que define qué salidas del sombreador de la secuencia 2 se transmiten. Consulte a continuación la sintaxis. |
OutputDecl3 | Cadena que define qué salidas del sombreador de la secuencia 3 se transmiten. Consulte a continuación la sintaxis. |
RasterizedStream | Entero que especifica qué secuencia se enviará al rasterizador. |
Tenga en cuenta que gs_5_0 sombreadores pueden definir hasta cuatro flujos de datos. El sombreador resultante generará una secuencia a la unidad de salida de la secuencia para cada declaración de salida que no sea NULL y una secuencia de la unidad de rasterizador.
Sintaxis de declaración de stream out
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Nombre | Descripción |
---|---|
Buffer | Opcional. Entero, 0 <= Búfer < 4, especificando a qué búfer de secuencia se desplazará el valor. |
Semántica | Cadena, junto con SemanticIndex, que especifica qué valor se va a generar. |
SemanticIndex | Opcional. Índice asociado a Semantic. |
Mask | Opcional. Máscara de componente, que indica qué componentes del valor se van a generar. |
Hay una semántica especial, etiquetada como "$SKIP", que indica una semántica vacía, dejando la memoria correspondiente en el búfer de salida sin modificar. La $SKIP semántica no puede tener un SemanticIndex, pero puede tener una máscara.
Toda la declaración de salida del flujo puede ser NULL.
Ejemplo
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);
}
}
Temas relacionados