다음을 통해 공유


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

효과(Direct3D 11)