Общие сведения о корневых подписях

Корневая подпись настраивается приложением и связывает список команд с ресурсами, которые требуются шейдерам. Список команд graphics содержит как графические, так и корневые сигнатуры вычислений. В списке команд вычислений будет просто одна корневая подпись вычислений. Эти корневые сигнатуры не зависят друг от друга.

Корневые параметры и аргументы

Корневая подпись похожа на сигнатуру функции API, она определяет типы данных, которые должны ожидать шейдеры, но не определяет фактическую память или данные. Параметр root — это одна запись в корневой сигнатуре. Фактические значения корневых параметров, заданных и измененных во время выполнения, называются корневыми аргументами. Изменение корневых аргументов изменяет данные, считываемые шейдерами.

Корневые константы, дескрипторы и таблицы

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

Корневые константы — это встроенные 32-разрядные значения, которые отображаются в шейдере в виде буфера констант.

Встроенные корневые дескрипторы должны содержать дескрипторы, к которым обращаются чаще всего, хотя они ограничены cbv и необработанными или структурированными буферами UAV или SRV. Более сложный тип, например двухd-текстура SRV, не может использоваться в качестве корневого дескриптора. Корневые дескрипторы не включают ограничение на размер, поэтому проверка за пределами границ не может выполняться, в отличие от дескрипторов в кучах дескрипторов, которые включают размер.

Записи таблицы дескрипторов в корневых сигнатурах содержат дескриптор, имя привязки шейдера HLSL и флаг видимости. Дополнительные сведения об именах шейдеров см. в статье Модель шейдера 5.1 . На некотором оборудовании производительность может повыситься за то, что дескрипторы видны только этапам шейдера, для которых они требуются (см . D3D12_SHADER_VISIBILITY).

Запись таблицы корневого дескриптора

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

Содержимое корневой сигнатуры (таблицы дескриптора, корневые константы и корневые дескрипторы), привязанное приложением, автоматически получает версию с помощью драйвера D3D12 при изменении какой-либо части содержимого между вызовами draw (graphics) и dispatch (вычисление). Таким образом, каждая отрисовка или отправка получает уникальный полный набор состояния корневой сигнатуры.

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

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

Корневые подписи