Поделиться через


Определение и заполнение куч дескрипторов

Типы кучи дескрипторов, которые можно задать в списке команд, — это типы, содержащие дескрипторы, для которых можно использовать таблицы дескрипторов (не более одной за раз).

Настройка кучи дескриптора

Типы кучи дескрипторов, которые можно задать в списке команд:

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

Кучи, заданные в списке команд, также должны быть созданы как видимые шейдеры. Существует три типа списка команд: DIRECT, BUNDLE и COMPUTE.

После установки кучи дескрипторов в списке команд последующие вызовы, определяющие таблицы дескрипторов, ссылаются на текущую кучу дескрипторов. Состояние таблицы дескриптора не определено в начале списка команд и после изменения кучи дескриптора в списке команд. Избыточное задание одной и той же кучи дескриптора не приводит к тому, что параметры таблицы дескриптора не будут неопределенными.

В пакете, напротив, кучи дескриптора можно задать только один раз (избыточные вызовы, устанавливая одну и ту же кучу дважды, не вызывают ошибку); В противном случае поведение не определено. Заданные кучи дескриптора должны соответствовать состоянию, когда любой список команд вызывает пакет; В противном случае поведение не определено. Это позволяет пакетам наследовать и изменять параметры таблицы дескриптора списка команд. Пакетам, которые не изменяют таблицы дескрипторов (только наследуют их), не нужно задавать кучу дескрипторов вообще и они будут просто наследовать от списка вызывающих команд.

При установке кучи дескриптора (с помощью ID3D12GraphicsCommandList::SetDescriptorHeaps) все используемые кучи задаются в одном вызове (и все ранее заданные кучи отменяются вызовом). В вызове можно задать не более одной кучи каждого из перечисленных выше типов.

Заполнение кучи дескрипторов

После создания кучи дескриптора приложение может использовать методы на устройстве для создания дескрипторов непосредственно в кучу или копирования дескрипторов из одного места в другое.

Начальное содержимое памяти кучи дескриптора не определено, поэтому запрос GPU или драйвера на ссылку на неинициализированную память для отрисовки может привести к неопределенным результатам, таким как сброс устройства.

Если приложение настраивает кучи дескриптора как видимую для ЦП, ЦП может вызывать методы для создания дескрипторов в кучу и копирования с места на место (в том числе между кучами) в немедленном свободном потоке способом. Если куча настроена как SHADER_VISIBLE, чтение ЦП запрещено.

Кучи дескрипторов