Compartir a través de


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);
    }
}

Efectos (Direct3D 11)