Partager via


Syntaxe stream out

Un nuanceur geometry 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 un flux sortant. Cela est facultatif, car ConstructGSWithSO peut être placé directement dans un appel SetGeometryShader ou BindInterfaces.
shaderVar Variable de nuanceur de géométrie ou 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 gs_4_0 et vs_x nuanceurs, 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 un flux sortant. Cela est facultatif, car ConstructGSWithSO peut être placé directement dans un appel SetGeometryShader ou BindInterfaces.
shaderVar Variable de nuanceur de géométrie ou 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 sont diffusées en continu. Consultez la syntaxe ci-dessous.
OutputDecl2 Chaîne définissant les sorties du nuanceur dans le flux 2 sont diffusées en continu. Consultez la syntaxe ci-dessous.
OutputDecl3 Chaîne définissant les sorties du nuanceur dans le flux 3 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 nullnon NULL et un flux de l’unité de rastériseur.

Syntaxe de déclaration Stream Out

" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Nom Description
de mémoire tampon Optionnel. Entier, 0 <= Mémoire tampon < 4, en spécifiant le flux sortant de la mémoire tampon vers laquelle la valeur va aller.
sémantique Chaîne, ainsi que SemanticIndex, spécifiant la valeur à générer.
SemanticIndex Optionnel. Index associé à la sémantique.
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 sortante du flux non touché. La sémantique $SKIP ne peut pas avoir de SemanticIndex, mais peut avoir un masque.

La déclaration complète de flux sortant 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)