Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В следующих разделах содержатся сведения о расширенном использовании таблиц дескриптора.
- изменение записей таблицы дескриптора между вызовами отрисовки
- индексирования вне границ
- производных шейдеров и дивергентного индексирования
- связанные разделы
Изменение записей таблицы дескриптора между вызовами отрисовки
После отправки в очередь для выполнения списков команд, которые задают таблицы дескриптора, приложение не должно изменять из ЦП части куч дескриптора, на которые может ссылаться GPU, пока приложение не знает, что GPU завершит использование ссылок.
Завершение работы можно определить на жесткой привязке с помощью заборов API для отслеживания хода выполнения GPU или более грубых механизмов, таких как ожидание, чтобы увидеть, что отрисовка была отправлена для отображения - независимо от того, что подходит приложению. Если приложение знает, что к ней будет обращаться только подмножество региона, к которому будет обращаться таблица дескриптора (например, из-за управления потоками в шейдере), другие дескрипторы дескрипторов без ссылок по-прежнему могут быть изменены. Если приложению нужно переключиться между различными таблицами дескриптора между вызовами отрисовки, можно выбрать несколько подходов к приложению.
- Дескриптор управления версиями таблиц: создание (или повторное использование) отдельной таблицы дескриптора для каждой уникальной коллекции дескрипторов, на которые ссылается список команд. При редактировании и повторном использовании ранее заполненных областей в кучах дескриптора приложения должны сначала убедиться, что GPU завершил работу с любой частью кучи дескриптора, которая будет перезапущена.
- Динамическое индексирование. Приложения могут упорядочивать объекты, которые зависят от рисования или отправки (или даже различаются в пределах рисования) в диапазоне кучи дескриптора, определяют таблицу дескриптора, которая охватывает все из них, и от шейдера, используйте динамическое индексирование таблицы во время выполнения шейдера, чтобы выбрать используемый объект.
- Помещая дескрипторы в корневую сигнатуру напрямую. Таким образом можно управлять только очень небольшим количеством дескрипторов, так как пространство корневой подписи ограничено.
Последствия использования управления версиями таблицы дескриптора заключается в том, что память дескриптора из кучи дескриптора должна быть сожжена для каждого уникального набора дескрипторов, на которые ссылается графический конвейер для каждого списка команд, который может выполняться, в очереди для выполнения или записываться в любое время.
D3D12 оставляет ответственность за управление версиями в приложении для типов объектов, управляемых с помощью кучи дескрипторов и таблиц дескриптора. Одним из преимуществ этого является то, что приложения могут повторно использовать оглавление описатель как можно больше, а не всегда определять новую версию таблицы дескриптора для каждой отправки списка команд. Корневая сигнатура — это пространство, которое драйвер D3D12 автоматически обновляет.
Возможность привязки нескольких таблиц дескриптора к корневой сигнатуре (и таким образом конвейеру) позволяет приложениям группировать и переключать наборы ссылок дескриптора по разным частотам при необходимости. Например, приложение может использовать небольшое число (возможно, только один) больших статических дескрипторных таблиц, которые редко изменяются или в каких регионах в базовой памяти кучи дескриптора заполняются по мере необходимости, с использованием динамического индексирования из шейдера для выбора текстур. В то же время приложение может поддерживать другой класс ресурсов, где набор, на который ссылается каждый вызов рисования, переключается с ЦП с помощью метода управления версиями таблицы дескриптора.
Индексирование вне границ
Индексирование любой таблицы дескриптора из шейдера приводит к значительному неопределенному доступу к памяти, включая возможность чтения произвольной памяти в процессе, как если бы это дескриптор состояния оборудования и жить с следствием того, что оборудование делает с этим. Это может привести к сбросу устройства, но не приведет к сбою Windows.
Производные шейдеров и дивергентное индексирование
Если вызовы шейдера пикселей, выполняемые в метке 2x2 (для поддержки производных вычислений), выберите различные индексы текстур для выборки из таблицы дескриптора, а если выбранная конфигурация выборки и текстура для любого пикселя требует вычисления LOD из производных координат текстуры, то вычисление LOD и процесс выборки текстуры выполняется оборудованием независимо от каждого поиска текстуры в метке 2x2, что повлияет на производительность.
Связанные разделы