Condividi tramite


Sintassi di uscita del flusso

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 costrutti

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Nome Descrizione
StreamingShaderVar Opzionale. 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 quali output dello shader nel flusso 0 vengono trasmessi in streaming. Vedere di seguito per la sintassi.

 

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à rasterizer.

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2", 
"OutputDecl3", RasterizedStream )
Nome Descrizione
StreamingShaderVar Opzionale. 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 quali output dello shader nel flusso 0 vengono trasmessi in streaming. Vedere di seguito per la sintassi.
OutputDecl1 Stringa che definisce quali output dello shader nel flusso 1 vengono trasmessi in streaming. Vedere di seguito per la sintassi.
OutputDecl2 Stringa che definisce quali output dello shader nel flusso 2 vengono trasmessi in streaming. Vedere di seguito per la sintassi.
OutputDecl3 Stringa che definisce gli output dello shader nel flusso 3. Vedere di seguito per la sintassi.
RasterizedStream Intero che specifica il flusso che verrà inviato al rasterizzatore.

 

Si noti che gs_5_0 shader può definire fino a quattro flussi di dati. Lo shader risultante restituirà un flusso all'unità di uscita del flusso per ogniNULL dichiarazione di output e un flusso dell'unità di rasterizzazione.

Sintassi della dichiarazione stream-out

" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Nome Descrizione
buffer Opzionale. Numero intero, 0 <= Buffer < 4, specificando il buffer di uscita del flusso a cui verrà aggiunto il valore.
semantica Stringa, insieme a SemanticIndex, che specifica il valore da restituire.
SemanticIndex Opzionale. Indice associato a Semantic.
Maschera Opzionale. Maschera del componente che indica quali componenti del valore restituire.

 

Esiste 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 oggetto 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)