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