방법: 여러 출력 스트림 인덱스 생성

셰이더 모델 5에서 기하 도형 셰이더는 최대 4개의 개별 스트림을 지원할 수 있습니다. 즉, 단일 셰이더는 선언된 스트림 수에 따라 1~4개의 출력 스트림을 출력할 수 있습니다.

여러 출력 스트림을 인덱싱하려면

  1. 스트림 템플릿 형식을 사용하여 데이터 스트림을 정의합니다.

        inout PointStream<OutVertex1> myStream1, 
    
  2. 스트림 템플릿 형식을 사용하여 두 번째 데이터 스트림을 정의합니다.

        inout PointStream<OutVertex2> myStream2 )
    
  3. 스트림 출력 개체 내장 함수(예: Append 또는 RestartStrip)를 사용하여 스트림 중 하나(또는 둘 다)로 데이터를 출력합니다.

    void MyGS( 
        InVertex verts[2], 
        inout PointStream<OutVertex1> myStream1, 
        inout PointStream<OutVertex2> myStream2 )
    {
        OutVertex1 myVert1 = TransformVertex1( verts[0] );
        OutVertex2 myVert2 = TransformVertex2( verts[1] );
        myStream1.Append( myVert1 );
        myStream2.Append( myVert2 );
    }
    

단일 출력 스트림을 사용하는 경우 삼각형 스트립, 선 스트립 또는 점 목록을 내보낼 수 있습니다. 스트림 아웃 버퍼에 삼각형 및 선 스트립을 저장하면 각각 삼각형 및 선 목록으로 확장됩니다. 하나의 스트림을 래스터화하고 메모리 버퍼로 보내지 않을 수도 있습니다.

여러 출력 스트림을 사용하는 경우 모든 스트림에 점이 포함되어야 하며 최대 하나의 출력 스트림을 래스터라이저로 보낼 수 있습니다. 일반적으로 애플리케이션은 스트림을 래스터화하지 않습니다.

버퍼로 데이터를 스트리밍한 후 버퍼를 채우는 데 사용한 기본 형식 뿐만 아니라 모든 기본 형식을 해당 데이터로 렌더링할 수 있습니다.

기하 도형 셰이더의 총 출력은 1024 스칼라로 제한됩니다. 여러 스트림이 있는 경우 스칼라 수는 가장 큰 스트림 형식에 최대 꼭짓점 수를 곱한 값으로부터 계산됩니다.

셰이더 모델 4와 셰이더 모델 5의 차이:
셰이더 모델 4:

  • 스트림 출력의 최대 스칼라 수는 64입니다.
  • 구성 요소별 레지스터 마스크는 인덱스 범위에 걸쳐 일치해야 합니다.
셰이더 모델 5:
  • 스트림 출력의 최대 스칼라 수는 128입니다.
  • 구성 요소별 레지스터 마스크는 인덱스 범위에 걸쳐 일치할 필요가 없습니다.
  • 출력의 동적 인덱싱은 모든 스트림에 걸쳐 합법적이어야 합니다.
  • 보간 모드는 스트림과 일치할 필요가 없습니다.

기하 도형 셰이더 기능