다음을 통해 공유


설명자 힙 설정 및 채우기

명령 목록에서 설정할 수 있는 설명자 힙 형식은 설명자 테이블을 사용할 수 있는(각각 한 번에 하나만) 설명자를 포함하는 형식입니다.

설명자 힙 설정

명령 목록에서 설정할 수 있는 설명자 힙 형식은 다음과 같습니다.

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

명령 목록에서 설정되는 힙도 셰이더 표시로 만들었어야 합니다. 명령 목록에는 DIRECT, BUNDLE 및 COMPUTE의 세 가지 유형이 있습니다.

명령 목록에서 설명자 힙이 설정된 후 설명자 테이블을 정의하는 후속 호출은 현재 설명자 힙을 참조합니다. 설명자 테이블 상태는 명령 목록 시작 시, 그리고 명령 목록에서 설명자 힙이 변경된 후 정의되지 않습니다. 동일한 설명자 힙을 중복 설정하면 설명자 테이블 설정이 정의되지 않습니다.

이와 달리, 번들의 설명자 힙은 한 번만 설정할 수 있습니다(동일한 힙을 두 번 설정하는 중복 호출에서 오류가 발생하지 않음). 이렇게 설정하지 않으면 동작이 정의되지 않습니다. 설정된 설명자 힙은 명령 목록이 번들을 호출할 때 상태와 일치해야 합니다. 일치하지 않으면 동작이 정의되지 않습니다. 이렇게 하면 번들이 명령 목록의 설명자 테이블 설정을 상속하고 편집할 수 있습니다. 설명자 테이블을 변경하지 않고 상속만 하는 번들은 설명자 힙을 설정할 필요가 없으며 호출 명령 목록에서 상속만 합니다.

설명자 힙이 설정된 경우(ID3D12GraphicsCommandList::SetDescriptorHeaps 사용) 사용 중인 모든 힙은 단일 호출로 설정되고 이전에 설정된 모든 힙은 호출을 통해 설정 해제됩니다. 호출에서는 위에 나열된 각 형식의 힙을 하나만 설정할 수 있습니다.

설명자 힙 채우기

애플리케이션에서 설명자 힙을 만든 후 디바이스의 메서드를 사용하여 설명자를 힙에 직접 생성하거나 설명자를 한 곳에서 다른 위치로 복사할 수 있습니다.

설명자 힙 메모리의 초기 콘텐츠는 정의되지 않으므로 GPU 또는 드라이버가 렌더링을 위해 초기화되지 않은 메모리를 참조하도록 요청하면 디바이스 다시 설정과 같은 정의되지 않은 결과가 발생할 수 있습니다.

애플리케이션이 CPU에 표시되도록 설명자 힙을 구성하면 CPU는 힙에 설명자를 만들고, 즉각적인 자유 스레드 방식으로 한 위치에서 다른 위치로 복사(힙에 걸친 복사 포함)하는 메서드를 호출할 수 있습니다. 힙이 SHADER_VISIBLE 구성된 경우 CPU에서 읽을 수 없습니다.

설명자 힙