Sintassi di streaming out
Un geometry shader con stream out viene dichiarato con una sintassi specifica. In questo argomento viene descritta la sintassi . Nel runtime dell'effetto questa sintassi verrà convertita in una chiamata a ID3D11Device::CreateGeometryShaderWithStreamOutput.
Sintassi del costrutto
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Nome | Descrizione |
---|---|
StreamingShaderVar | Facoltativa. Stringa ASCI che identifica in modo univoco il nome di una variabile geometry shader con flusso out. Questo è facoltativo perché ConstructGSWithSO può essere inserito direttamente in una chiamata SetGeometryShader o BindInterfaces. |
ShaderVar | Variabile geometry shader o vertex shader. |
OutputDecl0 | Stringa che definisce gli output dello shader nel flusso 0 trasmessi. Per la sintassi, vedere di seguito. |
Questa è la sintassi definita nei file fx_4_0. Si noti che in gs_4_0 e vs_x shader è presente un solo flusso di dati. Lo shader risultante restituirà un flusso sia all'unità di uscita del flusso che all'unità di rasterizzazione.
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
Nome | Descrizione |
---|---|
StreamingShaderVar | Facoltativa. Stringa ASCI che identifica in modo univoco il nome di una variabile geometry shader con flusso out. Questo è facoltativo perché ConstructGSWithSO può essere inserito direttamente in una chiamata SetGeometryShader o BindInterfaces. |
ShaderVar | Variabile geometry shader o vertex shader. |
OutputDecl0 | Stringa che definisce gli output dello shader nel flusso 0 trasmessi. Per la sintassi, vedere di seguito. |
OutputDecl1 | Stringa che definisce quali output shader nel flusso 1 vengono trasmessi. Per la sintassi, vedere di seguito. |
OutputDecl2 | Stringa che definisce gli output dello shader nel flusso 2 trasmessi. Per la sintassi, vedere di seguito. |
OutputDecl3 | Stringa che definisce gli output dello shader nel flusso 3. Per la sintassi, vedere di seguito. |
RasterizedStream | Intero che specifica il flusso che verrà inviato al rasterizzatore. |
Si noti che gs_5_0 shader possono definire fino a quattro flussi di dati. Lo shader risultante restituirà un flusso all'unità di uscita del flusso per ogni dichiarazione di output non NULL e un flusso dell'unità di rasterizzazione.
Sintassi della dichiarazione stream out
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Nome | Descrizione |
---|---|
Buffer | Facoltativa. Intero, 0 <= Buffer < 4, che specifica il buffer di uscita del flusso a cui verrà aggiunto il valore. |
Semantica | Stringa, insieme a SemanticIndex, che specifica il valore da restituire. |
SemanticIndex | Facoltativa. Indice associato a Semantic. |
Mask | Facoltativa. Maschera del componente che indica i componenti del valore da restituire. |
C'è una semantica speciale, etichettata "$SKIP" che indica una semantica vuota, lasciando invariata la memoria corrispondente nel buffer di uscita del flusso. La semantica $SKIP non può avere un valore SemanticIndex, ma può avere una maschera.
L'intera dichiarazione di uscita del flusso può essere NULL.
Esempio
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);
}
}
Argomenti correlati