다음을 통해 공유


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 작업 제출