설명자 힙 설정 및 채우기
명령 목록에 설정할 수 있는 설명자 힙 형식은 설명자 테이블을 사용할 수 있는 설명자를 포함하는 형식입니다(한 번에 최대 하나).
- 설명자 힙 설정하기
- 설명자 힙 채우기
- 관련 항목
설명자 힙을 설정하기
명령 목록에서 설정할 수 있는 설명자 힙 유형은 다음과 같습니다.
D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER
명령 목록에 설정되는 힙도 셰이더에서 보이도록 만들어졌어야 합니다. 명령 목록에는 DIRECT, BUNDLE 및 COMPUTE의 세 가지 유형이 있습니다.
명령 목록에 설명자 힙이 설정된 후 설명자 테이블을 정의하는 후속 호출은 현재 설명자 힙을 참조합니다. 설명자 테이블 상태는 명령 목록의 시작 부분과 명령 목록에서 설명자 힙이 변경된 후에 정의되지 않습니다. 동일한 설명자 힙을 중복 설정해도 설명자 테이블 설정이 정의되지 않습니다.
반면, 번들에서 설명자 힙은 한 번만 설정할 수 있습니다(동일한 힙을 두 번 설정하는 중복 호출은 오류를 생성하지 않음). 그렇지 않으면 동작이 정의되지 않습니다. 설정된 설명자 힙은 명령 목록이 번들을 호출할 때 상태와 일치해야 합니다. 그렇지 않으면 동작이 정의되지 않습니다. 이렇게 하면 번들이 명령 목록의 설명자 테이블 설정을 상속하고 편집할 수 있습니다. 설명자 테이블을 변경하지 않고 상속만 하는 번들은 전혀 설명자 힙을 설정할 필요가 없으며 호출 명령 목록에서 바로 상속됩니다.
설명자 힙이 설정되면(ID3D12GraphicsCommandList::SetDescriptorHeaps사용) 사용되는 모든 힙이 단일 호출로 설정되고 이전에 설정된 모든 힙은 호출에 의해 설정되지 않습니다. 위에 나열된 각 형식의 최대 힙은 호출에서 설정할 수 있습니다.
설명자 힙 채우기
애플리케이션에서 설명자 힙을 만든 후 디바이스의 메서드를 사용하여 설명자를 힙에 직접 생성하거나 설명자를 한 곳에서 다른 위치로 복사할 수 있습니다.
설명자 힙 메모리의 초기 콘텐츠는 정의되지 않으므로 GPU 또는 드라이버에 렌더링을 위해 초기화되지 않은 메모리를 참조하도록 요청하면 디바이스 재설정과 같은 정의되지 않은 결과가 발생할 수 있습니다.
애플리케이션이 설명자 힙을 CPU 가시형으로 구성하는 경우, CPU는 메서드를 호출하여 설명자를 힙에 생성하고, 자유스레드 방식으로 위치(힙 간 포함)를 직접 복사할 수 있습니다. 힙이 SHADER_VISIBLE 구성된 경우 CPU에서 읽는 것은 허용되지 않습니다.
관련 항목