dx10 파이프라인.

반응형
먼가..요즘은 dx10으로만 코딩을하다보니..정리를.해줄필요가.있는것같아서.

dx10은 고정기능 파이프라인은 지원하지 않고 세이더 파이프라인만 지원한다.
왜? 고정기능을 벗은 파이프라인은 이전보다 더 자유롭게 장치를 제어할 수 있고 융통성이 뛰어나니까.
즉, 이전에는 건들지 못했던 것도 건들수 있게 된게지...
물론 이전에 건들수 있는것들조차 제대로 건들어 보지 못하긴 했지만..ㅜㅜ.

우선 세이더를 간단히 정의 내리면 GPU에 의해 실행되는 간단한 프로그램이라고 생각하면 된다.

dx10에서의 파이프 라인은 Input Assembler(IA-입력조립기), VertexShader(VS-정점쉐이더),
GeometryShader(GS-기하쉐이더), Rasterizer(RS-래스터화), PixelShader(PS-픽셀쉐이더),
OutputMerger(OM-출력병합기)로 구성이 된다.
IA, GS, OM은 dx10 버전에서 새로 생긴 것들이다.
또한 GS는 스트림 출력을 통해서 비디오 메모리로 보낼 수 있다.

각 스테이지를 초간단으로 정리.
IA - 입력데이터를 파이프라인에 제공.
VS- 한 정점을 입력받아 변환, 스키닝, 조명연산 수행
GS- 하나의 기본도형(primitive)을 구성하는 몇개의 정점들을 입력으로 받아 기본도형 출력.
RS- 기본도형들을 클리핑해서 PS로 넘긴다. ( 정점을 클리핑 - 뷰포트 매핑 - 정점 보간 - 도형내 픽셀계산)
PS- 텍스쳐합성연산
OM- 픽셀세이더의 출력값과 다른 정보를 종합하여 렌더타겟 픽셀의 최종컬러값 결정.

각 스테이지에서의 효율적인 처리를 위해 시스템 내부적으로 InstanceID, VertexID, PrimitiveID라는 특정값을 생성한다.
이들 ID값들은 세이더에서 사용하려면 정점의 입력레이아웃에 이들을 추가하면 된다.
InstanceID: VS나 그 이후에 사용. 현재 처리되는 기본도형들의 집합에 대해 할당
VertexID: VS나 그 이후에 사용. IA에서 매 정점마다 할당.
PrimitiveID: GS나 그 이후에 사용. GS가 생략인 경우 PS에서 사용. 매 기본도형마다 할당
이건 머 그냥... 내부적으로 이렇게 아이디를 줘서 사용하고 있다고만 알아도 될듯하다.

대략 요것만 정리해야지..
그래도 이녀석을 정리하는데 꽤 시간을 걸렸다..헐
TAGS.

Comments