Ограничения корневой подписи
Корневая подпись является основным недвижимостью, и существуют строгие ограничения и затраты, которые следует рассмотреть.
Ограничения памяти и затраты
Максимальный размер корневой подписи составляет 64 DWORD.
Этот максимальный размер выбран, чтобы предотвратить злоупотребление корневой сигнатурой в качестве способа хранения массовых данных. Каждая запись в корневой сигнатуре имеет затраты на это ограничение 64 DWORD:
- Таблицы дескриптора стоят 1 DWORD.
- Корневые константы стоят 1 DWORD, так как они являются 32-разрядными значениями.
- Корневые дескрипторы (64-разрядные виртуальные адреса GPU) стоят 2 DWORD каждого.
Статические образцы не имеют никаких затрат в размере корневой сигнатуры.
Затраты на производительность
Затраты на производительность (с точки зрения непрямого отношения) равны нулю для корневой константы, 1 для корневого дескриптора и 2 для таблицы дескриптора. Если корневая сигнатура большая и переполнена из самой быстрой памяти в немного медленную память (которая может произойти на некотором оборудовании), добавьте 1 к стоимости производительности для переполненных элементов в конце корневой сигнатуры.
Переполнение может произойти на оборудовании, которое может иметь, например, фиксированный размер 16 DWORD для корневого пространства аргументов. Это ограничение может быть дополнительно сокращено на один, если используется сборщик входных данных. В этом случае происходит переполнение в немного медленную память, если корневая сигнатура слишком велика для собственной памяти DWORD 15 или 16. В другом оборудовании нет фиксированной корневой памяти корневого аргумента (поэтому ситуация переполнения никогда не возникает).
Для всего оборудования, если изменяется корневой аргумент, драйвер должен поддерживать версию всех корневых аргументов (в отличие от других хранилищ, таких как кучи дескриптора и буферные ресурсы, которые не версии драйвера). В оборудовании, в котором возникает ситуация переполнения, требуется версия только родной или переполненной области в зависимости от того, где произошло изменение. Очевидно, что объем управления версиями должен храниться до необходимого минимума.
Как правило, рассмотрим следующие рекомендации.
- При необходимости используйте небольшую корневую сигнатуру, хотя сбалансируйте ее с гибкостью более крупного корневого сигнатуры.
- Упорядочение параметров в большой корневой сигнатуре таким образом, чтобы параметры, скорее всего, часто изменялись, или если задержка с низким доступом для заданного параметра важна, сначала возникают.
- Если удобно, используйте корневые константы или представления буфера корневой константы для размещения представлений буфера констант в кучу дескриптора.
Статические образцы
Статические образцы (примеры, в которых состояние полностью определено и неизменяемо) являются частью корневых подписей, но не учитываются в отношении ограничения DWORD 64. Если образец может быть определен как статический, нет необходимости в том, чтобы образец был частью кучи дескриптора.
Нет затрат на производительность использования статических примеров, а корневая сигнатура может содержать сочетание статических образцов (хранящихся в корневой сигнатуре или в зарезервированном пространстве на некотором оборудовании) и динамических образчиков (хранящихся в куче дескриптора образца). Примеры в куче дескриптора могут быть динамически назначены и индексированы, которые статические образцы не могут.
Статические образцы можно записать как часть корневой подписи в шейдерах HLSL (см. указание корневых подписей вHLSL).
Связанные разделы