다음을 통해 공유


셰이더 표시 설명자 힙

셰이더 표시 설명자 힙은 설명자 테이블을 통해 셰이더에서 참조할 수 있는 설명자 힙입니다.

개요

설명자 테이블을 통해 셰이더에서 참조할 수 있는 설명자 힙은 두 가지 버전으로 제공됩니다. 한 힙 유형인 D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP 셰이더 리소스 뷰, 순서가 지정되지 않은 액세스 뷰 및 상수 버퍼 뷰를 모두 혼합하여 포함할 수 있습니다. 힙의 지정된 위치는 나열된 형식의 설명자 중 하나일 수 있습니다. D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER 또 다른 힙 유형은 대부분의 하드웨어에서 샘플러가 SRV, UAV, CBV와 별도로 관리된다는 사실을 반영하여 샘플러만 저장합니다.

이 형식의 설명자 힙은 힙이 만들어질 때 셰이더 표시 또는 비표시로 요청될 수 있습니다(셰이더 비표시는 CPU에서 설명자를 스테이징할 때 유용할 수 있음). 셰이더 표시로 요청될 경우 위의 각 힙 형식에는 개별 설명자 힙 할당에 대한 하드웨어 크기 제한이 있을 수 있습니다.

애플리케이션은 제한 없이 설명자 힙을 만들 수 있으며, 셰이더 비표시 설명자는 크기가 제한되지 않습니다. 애플리케이션에서 만드는 셰이더 표시 설명자 힙이 하드웨어 크기 제한보다 작으면 드라이버는 여러 API 설명자 힙이 하나의 하드웨어 설명자 힙 내에 맞도록 더 큰 기본 설명자 힙에서 설명자 힙을 하위 할당할 수 있습니다. 이 상황이 발생할 수 있는 이유는 일부 하드웨어에서는 실행 중에 하드웨어 설명자 힙 간에 전환하려면 유휴 상태를 위한 GPU 대기가 필요합니다(이전에 설명자 힙에 대한 GPU 참조가 완료되었는지 확인하기 위해). 애플리케이션이 만드는 모든 설명자 힙이 적용 가능한 하드웨어 힙의 최대 용량에 맞춰지면 렌더링하는 동안 API 설명자 힙을 전환할 때 이러한 대기가 발생하지 않습니다. 그러나 애플리케이션은 현재 설명자 힙을 전환하면 유휴 대기가 발생할 수 있다는 가능성을 허용해야 합니다.

이 가능한 유휴 대기가 설명자 힙 전환에 영향을 주지 않도록 하기 위해 애플리케이션은 렌더링에서 중단을 활용할 수 있으며, 이렇게 하면 유휴 대기가 발생한 이후 설명자 힙 전환을 수행하는 시간과는 다른 이유로 GPU가 유휴 상태가 됩니다.

명령 목록/번들 기록 중에 셰이더에 대해 설명자 힙을 파악하는 메커니즘 및 의미 체계는 API 참조에서 설명합니다.

예제

아래 이미지는 큰 기본 힙의 슬롯 두 개에 저장되는 두 개의 개별 2D 질감을 참조하는 두 개의 설명자 힙을 보여 줍니다. 셰이더 표시인 설명자 힙은 그래픽 파이프라인(셰이더 포함)을 통해 액세스할 수 있으므로 파이프라인에 2D 질감을 사용할 수 있습니다.

표시 및 비표시 설명자 힙

참고

대체로 설명자 힙의 경우 CPU에서 쓰기 가능한 GPU 로컬 메모리(쓰기 결합 메모리라고 함) 양에 대한 GPU 하드웨어 제한이 있습니다. 일반적으로 이 제한은 모든 프로세스에 대해 96MB 정도입니다. 예를 들어 32바이트 설명자가 포함된 1백만 멤버 설명자 힙은 32MB를 사용합니다. 큰 설명자 힙을 많이 만들지 않는 것이 좋지만, 필요한 경우 드라이버가 시스템 메모리로 대체됩니다.

 

설명자 힙