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