Condividi tramite


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

Effetti (Direct3D 11)