Direct3D 12 파이프라인 및 셰이더

Direct3D 12 프로그래밍 가능 파이프라인은 이전 세대의 그래픽 프로그래밍 인터페이스보다 렌더링 성능을 크게 향상합니다.

Direct3D 12 그래픽 파이프라인

다음 다이어그램은 Direct3D 12 그래픽 파이프라인 및 상태를 보여 줍니다.

Direct3d 12 파이프라인 및 상태를 보여 주는 다이어그램

그래픽 파이프라인은 GPU가 프레임을 렌더링하므로 데이터 입력 및 출력의 순차적 흐름입니다. 파이프라인 상태 및 입력이 제공되면 GPU는 일련의 작업을 수행하여 결과 이미지를 만듭니다. 그래픽 파이프라인에는 프로그래밍 가능 렌더링 효과 및 계산과 고정 함수 작업을 수행하는 셰이더가 포함됩니다.

파이프라인 상태 다이어그램을 참조할 때 다음에 유의하세요.

  • 설명자 테이블 및 힙은 임의로 정렬할 수 있습니다. SRV, CBV 및 UAV는 임의의 순서로 참조 및 할당할 수 있습니다.
  • 파이프라인의 일부 작업을 구성할 수 있습니다. 예를 들어 출력 병합기는 일반적으로 렌더링 대상 및 깊이 스텐실 뷰를 사용하여 읽기-수정-쓰기 기준으로 작동합니다. 그러나 이 뷰 중 하나가 읽기 전용 또는 쓰기 전용이 되도록 파이프라인을 구성할 수 있습니다.
  • 정적 샘플러는 정적이므로 루트 인수의 일부가 아닙니다.

파이프라인 상태 개체

Direct3D 12에는 PSO(파이프라인 상태 개체)가 도입되었습니다. 많은 상위 수준 개체에서 파이프라인 상태를 저장하고 표시하는 대신, 입력 어셈블러, 래스터라이저, 픽셀 셰이더 및 출력 병합기와 같은 파이프라인 구성 요소의 상태가 PSO에 저장됩니다. PSO는 생성 후에 변경할 수 없는 통합된 파이프라인 상태 개체입니다. 현재 선택된 PSO는 빠르게 동적으로 변경될 수 있으며, 하드웨어 및 드라이버에서는 직접 PSO를 기본 하드웨어 명령 및 상태로 변환하여 GPU에서 그래픽을 처리할 준비를 할 수 있습니다. PSO를 적용하기 위해 하드웨어는 미리 컴퓨팅된 상태의 최소 크기를 하드웨어 레지스터에 직접 복사합니다. 이렇게 하면 그래픽 드라이버가 현재 적용 가능한 모든 렌더링 및 파이프라인 설정을 기반으로 하드웨어 상태를 지속적으로 다시 컴퓨팅하기 때문에 발생하는 오버헤드가 제거됩니다. 그 결과로, 그리기 호출 오버헤드가 크게 감소하고, 성능이 향상되고, 프레임당 그리기 호출이 증가합니다.

현재 적용된 PSO는 렌더링 파이프라인에서 사용 중인 모든 셰이더를 정의하고 연결합니다. Microsoft HLSL(High Level Shader Language)은 셰이더 개체에 미리 컴파일되어 있고, 이후 런타임에 파이프라인 상태 개체의 입력으로 사용됩니다. PSO가 그래픽 파이프라인 내에서 작동하는 방식에 대한 자세한 내용은 Direct3D 12에서 그래픽 파이프라인 상태 관리를 참조하세요.

Direct3D 12 컴퓨팅 파이프라인

다음 다이어그램은 Direct3D 12 컴퓨팅 파이프라인 및 상태를 보여 줍니다.

Direct3D 12 컴퓨팅 파이프라인을 보여 주는 다이어그램

이 파이프라인에는 고정 함수 단위가 없지만, 설명자 힙, 샘플러 힙 및 정적 샘플러를 컴퓨팅에 계속 사용할 수 있습니다.

Direct3D 12의 작업 제출