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


Обзор корневых подписей

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

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

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

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

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

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

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

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

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

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

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

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

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

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