입력 어셈블러 단계
IA(입력 어셈블러)는 1D 버퍼에서 원본 기하 도형 데이터를 끌어와 렌더링 파이프라인에 삼각형, 선 또는 점을 도입합니다.
꼭짓점 데이터는 여러 버퍼에서 올 수 있으며 각 버퍼에서 구조 배열 방식으로 액세스할 수 있습니다. 버퍼는 각각 개별 입력 슬롯에 바인딩되며 구조 보폭이 부여됩니다. 모든 버퍼의 데이터 레이아웃은 각 항목이 요소를 정의하는 입력 선언에 의해 지정됩니다. 요소에는 입력 슬롯, 구조 오프셋, 데이터 형식 및 대상 레지스터(파이프라인의 첫 번째 활성 셰이더용)가 포함됩니다.
버퍼에서 가져온 데이터에서 지정된 꼭짓점 시퀀스가 생성됩니다. 데이터는 고정 함수 상태와 다양한 Draw*() DDI 호출의 조합으로 전달되는 순회에서 페치됩니다. 꼭짓점 데이터 시퀀스가 기본 형식의 시퀀스를 나타내도록 다양한 기본 토폴로지(예: point-list, line-list, triangle-list 및 triangle-strip)를 사용할 수 있습니다.
꼭짓점 데이터는 두 가지 방법 중 하나로 생성할 수 있습니다. 꼭짓점 데이터를 생성하는 첫 번째 방법은 꼭짓점 데이터를 포함하는 버퍼의 순차적 순회인 인덱싱되지 않은 렌더링입니다. 꼭짓점 데이터는 각 버퍼 바인딩의 시작 오프셋에서 시작됩니다. 꼭짓점 데이터를 생성하는 두 번째 방법은 스칼라 정수 인덱스를 포함하는 단일 버퍼의 순차적 순회인 인덱 싱된 렌더링입니다. 인덱스는 시작 오프셋에서 버퍼로 시작됩니다. 각 인덱스는 꼭짓점 데이터가 포함된 버퍼에서 데이터를 가져올 위치를 나타냅니다. 인덱스 값은 참조하는 버퍼의 특성과 독립적입니다. 버퍼는 선언으로 설명됩니다. 인덱싱되지 않은 렌더링과 인덱싱된 렌더링은 각각 고유한 방식으로 메모리에서 꼭짓점 데이터를 가져올 주소를 생성한 후 결과를 꼭짓점 및 기본 형식으로 어셈블합니다.
인스턴스화된 기하 도형 렌더링은 인덱싱되지 않은 렌더링 또는 인덱싱된 렌더링에서 순차적 순회가 각 꼭짓점 버퍼(인덱싱되지 않은 대/소문자) 또는 인덱스 버퍼(인덱싱된 대/소문자) 내의 범위를 반복할 수 있도록 하여 활성화됩니다. 버퍼 바인딩은 instance 데이터 또는 꼭짓점 데이터로 식별할 수 있습니다. 이 ID는 인스턴스화된 렌더링을 수행하는 동안 바인딩된 버퍼를 사용하는 방법을 지정합니다. 인덱싱되지 않거나 인덱싱되지 않은 렌더링에서 생성되는 주소는 꼭짓점 데이터를 가져오는 데 사용되며, 런타임이 인스턴스화된 렌더링을 수행할 때 반복을 고려합니다. 반면 인스턴스 데이터는 항상 버퍼별 오프셋부터 순차적으로 트래버스되며, instance당 한 단계와 같은 빈도로 진행됩니다(예: instance 꼭짓점 수가 트래버스된 후 한 단계 앞으로 이동). instance 데이터의 단계 속도는 instance 빈도의 하위 고조파로 선택할 수도 있습니다(즉, 다른 모든 instance 한 단계 앞으로, 세 번째 instance 등).
IA의 또 다른 특별한 경우는 스트림 출력 단계에서 쓴 버퍼를 읽을 수 있다는 것입니다. 이러한 시나리오를 사용하면 새로운 유형의 그리기 작업인 DrawAuto를 사용할 수 있습니다. DrawAuto 를 사용하면 CPU 개입 없이 스트림 출력 버퍼에 기록된 동적 양의 출력을 재사용하여 실제로 기록된 데이터의 양을 확인할 수 있습니다.
버퍼에서 꼭짓점 데이터를 생성하는 것 외에도 IA는 렌더링 파이프라인의 셰이더 단계에 대한 입력을 위해 VertexID, PrimitiveID 및 InstanceID의 세 스칼라 카운터 값을 자동으로 생성할 수 있습니다.
삼각형 스트립과 같은 스트립 토폴로지의 인덱싱된 렌더링에서는 단일 *Draw*() 호출(즉, 스트립을 잘라내는 *잘라내기 명령)을 사용하여 여러 스트립을 그리기 위한 메커니즘이 제공됩니다.
Direct3D 런타임은 다음 드라이버 함수를 호출하여 IA를 만들고, 설정하고, 삭제합니다.