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


Установка и заполнение стеков дескрипторов

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

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

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

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

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

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

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

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

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

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

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

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

дескрипторный массив