Delen via


Syntaxis van stream-out

Een geometrie-shader met uitstroom wordt gedeclareerd met een bepaalde syntaxis. In dit onderwerp worden de syntaxis beschreven. In de effectruntime wordt deze syntaxis geconverteerd naar een aanroep naar ID3D11Device::CreateGeometryShaderWithStreamOutput.

Syntaxis van constructie

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Naam Beschrijving
StreamingShaderVar Facultatief. Een ASCI-tekenreeks die de naam van een geometrie-shadervariabele uniek identificeert met stroom uit. Dit is optioneel omdat ConstructGSWithSO rechtstreeks in een SetGeometryShader- of BindInterfaces-aanroep kan worden geplaatst.
ShaderVar Een arceringsvariabele voor geometrie of hoekpunt-shader.
OutputDecl0- Een tekenreeks die definieert welke shader-uitvoer in stream 0 wordt gestreamd. Zie hieronder voor syntaxis.

 

Dit is de syntaxis die is gedefinieerd in fx_4_0 bestanden. Houd er rekening mee dat er in gs_4_0 en vs_x shaders slechts één gegevensstroom is. De resulterende shader voert één stroom uit naar zowel de stream-out-eenheid als de rasterizer-eenheid.

[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2", 
"OutputDecl3", RasterizedStream )
Naam Beschrijving
StreamingShaderVar Facultatief. Een ASCI-tekenreeks die de naam van een geometrie-shadervariabele uniek identificeert met stroom uit. Dit is optioneel omdat ConstructGSWithSO rechtstreeks in een SetGeometryShader- of BindInterfaces-aanroep kan worden geplaatst.
ShaderVar Een arceringsvariabele voor geometrie of hoekpunt-shader.
OutputDecl0- Een tekenreeks die definieert welke shader-uitvoer in stream 0 wordt gestreamd. Zie hieronder voor syntaxis.
OutputDecl1- Een tekenreeks die definieert welke shader-uitvoer in stream 1 wordt gestreamd. Zie hieronder voor syntaxis.
OutputDecl2- Een tekenreeks die definieert welke shader wordt uitgevoerd in stream 2, worden uitgestreamd. Zie hieronder voor syntaxis.
OutputDecl3- Een tekenreeks die definieert welke shader-uitvoer in stream 3 wordt gestreamd. Zie hieronder voor syntaxis.
RasterizedStream- Een geheel getal dat aangeeft welke stroom naar de rasterizer wordt verzonden.

 

Houd er rekening mee dat gs_5_0 shaders maximaal vier gegevensstromen kunnen definiëren. De resulterende shader voert één stream uit naar de stream-eenheid voor elke niet-NULL-uitvoerdeclaratie en één stream de rasterizer-eenheid.

Syntaxis van declaratie van Stream Out

" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Naam Beschrijving
Buffer Facultatief. Een geheel getal, 0 <= Buffer < 4, waarmee wordt opgegeven naar welke stream-outbuffer de waarde gaat.
semantische Een tekenreeks, samen met SemanticIndex, die aangeeft welke waarde moet worden uitgevoerd.
SemanticIndex Facultatief. De index die is gekoppeld aan Semantisch.
masker Facultatief. Een onderdeelmasker, waarmee wordt aangegeven welke onderdelen van de waarde moeten worden uitgevoerd.

 

Er is één speciale Semantische, met het label '$SKIP' die een lege semantische aangeeft, waardoor het bijbehorende geheugen in de stream-outbuffer ongewijzigd blijft. De $SKIP semantisch kan geen SemanticIndex hebben, maar kan wel een masker hebben.

De volledige stroomuitgifte kan worden NULL-.

Voorbeeld

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

effecten (Direct3D 11)