Direct3D 버전 11용 파이프라인

이 섹션은 Windows 7 이상 및 Windows Server 2008 R2 이상 버전의 Windows 운영 체제에만 적용됩니다.

Direct3D 버전 11에 대한 그래픽 렌더링 파이프라인은 Direct3D 버전 10의 그래픽 렌더링 파이프라인에서 확장됩니다. Direct3D 버전 10이 지원하는 공유 프로그래밍 가능한 셰이더 코어 외에도 Direct3D 버전 11은 헐, 도메인 및 컴퓨팅 셰이더 코어도 지원합니다.

Direct3D 버전 11은 실제로 그리기 파이프라인(그래픽 렌더링 파이프라인) 및 디스패치 파이프라인(컴퓨팅 셰이더 파이프라인)의 두 개의 개별 파이프라인을 지원합니다. 그리기 및 디스패치 파이프라인은 두 파이프라인에서 동시에 쓰기 위해 바인딩된 동일한 하위 리소스를 가질 수 없거나 한 파이프라인에서 작성하고 다른 파이프라인에서 읽기 위해 바인딩될 수 없다는 점에서 기술적으로 느슨하게 연결됩니다.

다음 그림에서는 Direct3D 버전 11에 대한 그리기 파이프라인의 기능 블록을 보여 줍니다.

Direct3D 버전 11 그리기 파이프라인의 기능 블록을 보여 주는 다이어그램

다음 그림에서는 Direct3D 버전 11에 대한 디스패치 파이프라인의 기능 블록을 보여 줍니다.

Direct3D 버전 11 디스패치 파이프라인의 기능 블록을 보여 주는 다이어그램

다음 섹션에서는 이전 그림에 표시된 New-for-Direct3D 11 블록에 대해 설명합니다.

헐 셰이더

헐 셰이더는 패치당 한 번 작동합니다. 헐 셰이더를 입력 어셈블러의 패치와 함께 사용할 수 있습니다. 헐 셰이더는 패치를 구성하는 입력 제어점을 출력 제어점으로 변환할 수 있습니다. 헐 셰이더는 고정 함수 테셀레이터 단계에 대해 다른 설정을 수행할 수 있습니다. 예를 들어 헐 셰이더는 테셀레이트할 양을 나타내는 숫자인 tess 요소를 출력할 수 있습니다.

Direct3D 런타임은 다음 드라이버 함수를 호출하여 헐 셰이더를 만들고, 설정하고, 삭제합니다.

Tessellator

테셀레이터는 헐 셰이더의 선언에 의해 연산이 정의된 고정 함수 단위입니다. 테셀레이터는 헐 셰이더에서 출력되는 패치당 한 번 작동합니다. 헐 셰이더는 테셀레이터에게 패치 도메인을 통해 테셀레이트(기하 도형 및 연결 생성)의 양을 알리는 숫자인 tess 요소를 생성합니다.

Direct3D 런타임은 드라이버의 CalcPrivateTessellationShaderSize 함수를 호출하여 헐 또는 도메인 셰이더의 메모리 영역 크기를 계산합니다.

도메인 셰이더

도메인 셰이더는 테셀레이터에 의해 생성되는 꼭짓점당 한 번 호출됩니다. 각 호출은 제네릭 도메인의 좌표로 식별됩니다. 도메인 셰이더의 역할은 도메인 셰이더의 다운 스트림을 사용하기 위해 해당 좌표를 실질적인 것(예: 3D 공간의 점)으로 바꾸는 것입니다. 패치에 대한 각 도메인 셰이더 호출은 모든 헐 셰이더 출력(예: 출력 제어점)의 공유 입력에도 액세스합니다.

Direct3D 런타임은 다음 드라이버 함수를 호출하여 도메인 셰이더를 만들고, 설정하고, 삭제합니다.

컴퓨팅 셰이더

컴퓨팅 셰이더를 사용하면 그리기 파이프라인의 그래픽 장애 없이 GPU를 데이터 병렬 프로세서의 일반 그리드로 볼 수 있습니다. 컴퓨팅 셰이더는 셰이더 호출 그룹 간의 통신을 용이하게 하기 위해 빠른 공유 메모리에 명시적으로 액세스할 수 있습니다. 또한 컴퓨팅 셰이더는 메모리에 분산된 읽기 및 쓰기를 수행할 수 있습니다. 원자성 작업의 가용성은 공유 메모리 주소에 대한 고유한 액세스를 가능하게 합니다. 컴퓨팅 셰이더는 그리기 파이프라인의 일부가 아닙니다. 컴퓨팅 셰이더는 자체적으로 존재합니다. 그러나 컴퓨팅 셰이더는 다른 모든 셰이더 단계와 동일한 디바이스에 존재합니다. Direct3D 런타임은 드라이버의 DrawXxx 함수가 아닌 드라이버의 DispatchXxx 함수를 호출하여 컴퓨팅 셰이더를 호출합니다.

Direct3D 런타임은 다음 드라이버 함수를 호출하여 컴퓨팅 셰이더를 만들고, 설정하고, 삭제합니다.

순서가 지정되지 않은 액세스 리소스 뷰

순서가 지정되지 않은 액세스 리소스 뷰는 컴퓨팅 셰이더 또는 픽셀 셰이더에 바인딩할 수 있는 읽기/쓰기 리소스입니다. 순서가 지정되지 않은 액세스 리소스 뷰의 바인딩은 읽기 전용 리소스인 셰이더 리소스 뷰를 셰이더 단계에 바인딩하는 방법과 유사합니다.

Direct3D 런타임은 다음 드라이버 함수를 호출하여 순서가 지정되지 않은 액세스 리소스 뷰를 만들고, 설정하고, 삭제합니다.