Sintaks Aliran Keluar
Shader geometri dengan stream out dinyatakan dengan sintaks tertentu. Topik ini menguraikan sintaks. Dalam runtime efek, sintaks ini akan dikonversi ke panggilan ke ID3D11Device::CreateGeometryShaderWithStreamOutput.
Membangun Sintaksis
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Nama | Deskripsi |
---|---|
StreamingShaderVar | Pilihan. String ASCI yang secara unik mengidentifikasi nama variabel shader geometri dengan stream out. Ini opsional karena ConstructGSWithSO dapat ditempatkan langsung di panggilan SetGeometryShader atau BindInterfaces. |
ShaderVar | Shader geometri atau variabel shader vertex. |
OutputDecl0 | String yang menentukan output shader mana di aliran 0 yang dialirkan. Lihat di bawah ini untuk sintaks. |
Ini adalah sintaks didefinisikan dalam file fx_4_0. Perhatikan bahwa dalam gs_4_0 dan vs_x shader, hanya ada satu aliran data. Shader yang dihasilkan akan menghasilkan satu aliran ke unit stream out dan unit rasterizer.
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
Nama | Deskripsi |
---|---|
StreamingShaderVar | Pilihan. String ASCI yang secara unik mengidentifikasi nama variabel shader geometri dengan stream out. Ini opsional karena ConstructGSWithSO dapat ditempatkan langsung di panggilan SetGeometryShader atau BindInterfaces. |
ShaderVar | Shader geometri atau variabel shader vertex. |
OutputDecl0 | String yang menentukan output shader mana di aliran 0 yang dialirkan. Lihat di bawah ini untuk sintaks. |
OutputDecl1 | String yang menentukan output shader mana di aliran 1 yang dialirkan. Lihat di bawah ini untuk sintaks. |
OutputDecl2 | String yang menentukan output shader mana di aliran 2 yang dialirkan. Lihat di bawah ini untuk sintaks. |
OutputDecl3 | String yang menentukan output shader mana di aliran 3 yang dialirkan. Lihat di bawah ini untuk sintaks. |
RasterizedStream | Bilangan bulat yang menentukan aliran mana yang akan dikirim ke rasterizer. |
Perhatikan bahwa gs_5_0 shader dapat menentukan hingga empat aliran data. Shader yang dihasilkan akan menghasilkan satu aliran ke unit stream out untuk setiap deklarasi output non-NULL dan satu aliran unit rasterizer.
Sintaks Deklarasi Stream Out
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Nama | Deskripsi |
---|---|
Buffer | Opsional. Bilangan bulat, 0 <= Buffer < 4, menentukan buffer aliran mana yang akan digunakan oleh nilai. |
Semantik | String, bersama dengan SemanticIndex, menentukan nilai mana yang akan dihasilkan. |
SemanticIndex | Pilihan. Indeks yang terkait dengan Semantik. |
Masker | Pilihan. Masker komponen, menunjukkan komponen nilai mana yang akan dihasilkan. |
Ada satu Semantik khusus, berlabel "$SKIP" yang menunjukkan semantik kosong, meninggalkan memori yang sesuai di buffer aliran keluar tidak tersentuh. Semantik $SKIP tidak dapat memiliki SemanticIndex, tetapi dapat memiliki Masker.
Seluruh deklarasi stream out dapat berupa NULL.
Contoh
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);
}
}
Topik terkait