Stream Out 구문
스트림 아웃이 있는 기하 도형 셰이더는 특정 구문을 사용하여 선언됩니다. 이 항목에서는 구문에 대해 설명합니다. 효과 런타임에서 이 구문은 ID3D11Device::CreateGeometryShaderWithStreamOutput에 대한 호출로 변환됩니다.
구문 생성
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0" )
속성 | 설명 |
---|---|
StreamingShaderVar | 선택 사항입니다. 스트림 출력을 사용하여 기하 도형 셰이더 변수의 이름을 고유하게 식별하는 ASCI 문자열입니다. ConstructGSWithSO를 SetGeometryShader 또는 BindInterfaces 호출에 직접 배치할 수 있으므로 선택 사항입니다. |
ShaderVar | 기하 도형 셰이더 또는 꼭짓점 셰이더 변수입니다. |
OutputDecl0 | 스트림 0에서 스트리밍되는 셰이더 출력을 정의하는 문자열입니다. 구문은 아래를 참조하세요. |
이 구문은 fx_4_0 파일에 정의되었습니다. gs_4_0 및 vs_x 셰이더에는 하나의 데이터 스트림만 있습니다. 결과 셰이더는 스트림 출력 단위와 래스터라이저 단위 모두에 하나의 스트림을 출력합니다.
[ StreamingShaderVar = ] ConstructGSWithSO( ShaderVar, "OutputDecl0", "OutputDecl1", "OutputDecl2",
"OutputDecl3", RasterizedStream )
속성 | Description |
---|---|
StreamingShaderVar | 선택 사항입니다. 스트림 출력을 사용하여 기하 도형 셰이더 변수의 이름을 고유하게 식별하는 ASCI 문자열입니다. ConstructGSWithSO를 SetGeometryShader 또는 BindInterfaces 호출에 직접 배치할 수 있으므로 선택 사항입니다. |
ShaderVar | 기하 도형 셰이더 또는 꼭짓점 셰이더 변수입니다. |
OutputDecl0 | 스트림 0에서 스트리밍되는 셰이더 출력을 정의하는 문자열입니다. 구문은 아래를 참조하세요. |
OutputDecl1 | 스트림 1에서 출력되는 셰이더를 정의하는 문자열입니다. 구문은 아래를 참조하세요. |
OutputDecl2 | 스트림 2에서 스트리밍되는 셰이더 출력을 정의하는 문자열입니다. 구문은 아래를 참조하세요. |
OutputDecl3 | 스트림 3에서 스트리밍되는 셰이더 출력을 정의하는 문자열입니다. 구문은 아래를 참조하세요. |
RasterizedStream | 래스터라이저로 보낼 스트림을 지정하는 정수입니다. |
gs_5_0 셰이더는 최대 4개의 데이터 스트림을 정의할 수 있습니다. 결과 셰이더는 NULL 이 아닌 각 출력 선언에 대해 하나의 스트림을 스트림 출력 단위로 출력하고, 하나의 스트림은 래스터라이저 단위를 출력합니다.
Stream Out 선언 구문
" [ Buffer: ] Semantic[ SemanticIndex ] [ .Mask ]; [ ... ; ] ... [ ... ;]"
속성 | Description |
---|---|
Buffer | 선택 사항입니다. 정수 0 <= 버퍼 < 4로, 값이 이동하는 스트림 아웃 버퍼를 지정합니다. |
Semantic | 출력할 값을 지정하는 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);
}
}
관련 항목