Syntaxe de flux sortant

Un nuanceur de géométrie avec flux sortant est déclaré avec une syntaxe particulière. Cette rubrique décrit la syntaxe. Dans le runtime d’effet, cette syntaxe est convertie en appel à ID3D11Device::CreateGeometryShaderWithStreamOutput.

Syntaxe de construction

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Nom Description
StreamingShaderVar Optionnel. Chaîne ASCI qui identifie de manière unique le nom d’une variable de nuanceur géométrique avec le flux sortant. Cela est facultatif, car ConstructGSWithSO peut être placé directement dans un appel SetGeometryShader ou BindInterfaces.
ShaderVar Nuanceur de géométrie ou variable de nuanceur de vertex.
OutputDecl0 Chaîne définissant les sorties du nuanceur dans le flux 0 qui sont diffusées en continu. Consultez la syntaxe ci-dessous.

 

Il s’agit de la syntaxe définie dans fx_4_0 fichiers. Notez que dans les nuanceurs gs_4_0 et vs_x, il n’existe qu’un seul flux de données. Le nuanceur résultant génère un flux à la fois vers l’unité de sortie de flux et l’unité de rastériseur.

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2", 
"OutputDecl3", RasterizedStream )
Nom Description
StreamingShaderVar Optionnel. Chaîne ASCI qui identifie de manière unique le nom d’une variable de nuanceur géométrique avec le flux sortant. Cela est facultatif, car ConstructGSWithSO peut être placé directement dans un appel SetGeometryShader ou BindInterfaces.
ShaderVar Nuanceur de géométrie ou variable de nuanceur de vertex.
OutputDecl0 Chaîne définissant les sorties du nuanceur dans le flux 0 qui sont diffusées en continu. Consultez la syntaxe ci-dessous.
OutputDecl1 Chaîne définissant les sorties du nuanceur dans le flux 1 qui sont diffusées en continu. Consultez la syntaxe ci-dessous.
OutputDecl2 Chaîne définissant les sorties du nuanceur dans le flux 2 qui sont diffusées en continu. Consultez la syntaxe ci-dessous.
OutputDecl3 Chaîne définissant les sorties du nuanceur dans le flux 3 qui sont diffusées en continu. Consultez la syntaxe ci-dessous.
RasterizedStream Entier spécifiant le flux qui sera envoyé au rastériseur.

 

Notez que gs_5_0 nuanceurs peuvent définir jusqu’à quatre flux de données. Le nuanceur résultant génère un flux vers l’unité de sortie de flux pour chaque déclaration de sortie non NULL et un flux de l’unité de rastériseur.

Syntaxe de la déclaration stream out

" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Nom Description
Buffer Optionnel. Entier, 0 <= Mémoire tampon < 4, spécifiant la mémoire tampon de flux sortante vers laquelle la valeur ira.
Sémantique Chaîne, avec SemanticIndex, spécifiant la valeur à générer.
SemanticIndex Optionnel. Index associé à Semantic.
Masque Optionnel. Masque de composant, indiquant les composants de la valeur à générer.

 

Il existe une sémantique spéciale, intitulée « $SKIP », qui indique une sémantique vide, laissant la mémoire correspondante dans la mémoire tampon du flux intacte. La sémantique $SKIP ne peut pas avoir une sémantique SemanticIndex, mais peut avoir un masque.

L’intégralité de la déclaration de sortie de flux peut être NULL.

Exemple

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

Effets (Direct3D 11)