Синтаксис потоковой передачи
Геометрическая шейдера с потоком объявляется с определенным синтаксисом. В этом разделе описывается синтаксис. В среде выполнения эффектов этот синтаксис будет преобразован в вызов ID3D11Device::CreateGeometryShaderWithStreamOutput.
Синтаксис конструкции
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
Имя | Описание |
---|---|
StreamingShaderVar | Необязательный. Строка ASCI, которая однозначно идентифицирует имя переменной шейдера геометрии с потоком. Это необязательно, так как КонструкторGSWithSO можно поместить непосредственно в вызов SetGeometryShader или BindInterfaces. |
ШейдерВар | Переменная шейдера геометрии или шейдера вершин. |
OutputDecl0 | Строка, определяющая, какие выходные данные шейдера в потоке 0 передаются из потока. См. ниже синтаксис. |
Это синтаксис, определенный в fx_4_0 файлах. Обратите внимание, что в gs_4_0 и vs_x шейдерах существует только один поток данных. Результирующий шейдер выводит один поток как в единицу потока, так и в единицу растеризатора.
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
Имя | Описание |
---|---|
StreamingShaderVar | Необязательный. Строка ASCI, которая однозначно идентифицирует имя переменной шейдера геометрии с потоком. Это необязательно, так как КонструкторGSWithSO можно поместить непосредственно в вызов SetGeometryShader или BindInterfaces. |
ШейдерВар | Переменная шейдера геометрии или шейдера вершин. |
OutputDecl0 | Строка, определяющая, какие выходные данные шейдера в потоке 0 передаются из потока. См. ниже синтаксис. |
OutputDecl1 | Строка, определяющая, какие выходные данные шейдера в потоке 1 передаются из потока. См. ниже синтаксис. |
OutputDecl2 | Строка, определяющая, какие выходные данные шейдера в потоке 2 передаются из потока 2. См. ниже синтаксис. |
OutputDecl3 | Строка, определяющая, какие выходные данные шейдера в потоке 3 передаются из потока 3. См. ниже синтаксис. |
RasterizedStream | Целое число, указывающее, какой поток будет отправлен в растризатор. |
Обратите внимание, что gs_5_0 шейдеры могут определять до четырех потоков данных. Результирующий шейдер выводит один поток в единицу выхода потока для каждого объявления выходных данных, отличного отNULL, и одного потока единицы растризатора.
Синтаксис объявления Stream Out
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
Имя | Описание |
---|---|
буфера | Необязательный. Целое число, 0 <= буфер < 4, указывающее, к какой буфер вне потока будет переходить значение. |
семантические | Строка, а также SemanticIndex, указывающая, какое значение следует выводить. |
SemanticIndex | Необязательный. Индекс, связанный с семантикой. |
Маска | Необязательный. Маска компонента, указывающая, какие компоненты значения следует выводить. |
Существует одна особая семантика, помеченная как "$SKIP", которая указывает на пустую семантику, оставляя соответствующую память в буфере вне потока без изменения. Семантика $SKIP не может иметь семантику, но может иметь маску.
Все объявление потока может быть NULL.
Пример
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);
}
}
Связанные разделы
-
эффектов (Direct3D 11)