스트림 출력 단계

SO(스트림 출력) 단계는 해당 꼭짓점이 래스터라이저에 도착하기 직전에 꼭짓점을 메모리로 스트리밍할 수 있습니다. 스트림 출력은 파이프라인의 탭처럼 작동합니다. 데이터가 래스터라이저로 계속 흐르는 경우에도 이 탭을 켤 수 있습니다. 스트림 출력을 통해 전송되는 데이터는 버퍼에 연결됩니다. 이러한 버퍼는 후속 패스에서 파이프라인 입력으로 다시 순환할 수 있습니다.

스트림 출력에 대한 한 가지 제약 조건은 기하 도형 셰이더에 연결되어 있으므로 함께 만들어야 한다는 것입니다(둘 중 하나는 "NULL"/"off"일 수 있음). 하지만 스트리밍되는 특정 메모리 버퍼는 특정 기하 도형 셰이더 및 스트림 출력 쌍에 연결되지 않습니다. 스트림 출력에 공급할 꼭짓점 데이터의 부분에 대한 설명만 기하 도형 셰이더에 연결됩니다.

스트림 출력은 다시 사용할 순서가 지정된 파이프라인 데이터를 저장하는 데 유용할 수 있습니다. 예를 들어 꼭짓점 일괄 처리는 꼭짓점을 독립적인 지점인 것처럼 파이프라인에 전달하고(모든 꼭짓점을 한 번만 방문하여) 각 꼭짓점에 "스키닝" 작업을 적용하고 결과를 메모리에 스트리밍하여 "스킨"될 수 있습니다. 저장된 "스킨" 꼭짓점은 이후에 입력으로 사용할 수 있습니다.

스트림 출력을 통해 작성된 출력의 양이 동적이므로 CPU 개입 없이 스트림 출력 버퍼를 입력 어셈블러와 함께 다시 사용할 수 있도록 하여 실제로 기록된 데이터의 양을 결정하려면 새 형식의 DrawAuto가 필요합니다. 또한 스트림 출력 오버플로를 완화하고 스트림 출력 버퍼에 기록된 데이터의 양( D3D10DDI_QUERY 열거 형의 D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE 및 D3D10DDI_QUERY_STREAMOUTPUTSTATS)을 검색하려면 쿼리가 필요합니다.

Direct3D 런타임은 다음 드라이버 함수를 호출하여 스트림 출력을 만들고 설정합니다.

CalcPrivateGeometryShaderWithStreamOutput

CreateGeometryShaderWithStreamOutput

SoSetTargets