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