Доступные шейдеру кучи дескрипторов
Кучи видимых дескрипторов шейдера — это кучи дескриптора, на которые могут ссылаться шейдеры через таблицы дескрипторов.
Общие сведения
Кучи дескрипторов, на которые могут ссылаться шейдеры через таблицы дескрипторов, доступны в нескольких вариантах: один тип кучи, D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP, может содержать представления ресурсов шейдера, представления неупорядоченного доступа и представления постоянного буфера, все перемешившиеся. Любое заданное расположение в куче может быть любым из перечисленных типов дескрипторов. Другой тип кучи, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, хранит только образцы, что отражает тот факт, что для большинства оборудования выборки управляются отдельно от SRV, БПЛА и CBV.
Кучу дескрипторов этих типов можно запросить на видимость или отсутствие шейдера при создании кучи (последняя — невидимая — может быть полезна для промежуточных дескрипторов на ЦП). При запросе на видимость шейдера каждый из указанных выше типов кучи может иметь ограничение на размер оборудования для любого отдельного выделения кучи дескриптора.
Приложения могут создавать любое количество куч дескрипторов, а не видимые для шейдера кучи дескрипторов не ограничены по размеру. Если куча видимых дескрипторов шейдера, созданная приложением, меньше предельного размера оборудования, драйвер может выделить кучу дескриптора из более крупной кучи дескрипторов, чтобы несколько кучи дескрипторов API помещались в одну кучу дескриптора оборудования. Причина, по которой это может произойти, заключается в том, что для некоторого оборудования при переключении между кучи дескриптора оборудования во время выполнения требуется ожидание простоя GPU (чтобы гарантировать, что ссылки GPU на ранее кучу дескриптора завершены). Если все кучи дескриптора, создаваемые приложением, соответствуют максимальной емкости соответствующей аппаратной кучи, то при переключении кучи дескриптора API во время отрисовки такие ожидания не будут возникать. Однако приложения должны допускать возможность того, что переключение текущей кучи дескрипторов может повлечь за собой ожидание простоя.
Чтобы избежать влияния на это возможное ожидание простоя на коммутаторе кучи дескриптора, приложения могут воспользоваться преимуществами перерывов в отрисовке, которые приведут к простою GPU по другим причинам, так как время переключения кучи дескриптора, так как ожидание простоя происходит в любом случае.
Механизм и семантика для идентификации кучи дескриптора для шейдеров во время записи списка команд или пакета описаны в справочнике по API.
Пример
На изображении ниже показаны две кучи дескриптора, ссылающиеся на две отдельные двумерные текстуры, которые хранятся в двух слотах большой кучи по умолчанию. Доступ к куче дескрипторов, видимой для шейдера, может осуществляться графическим конвейером (включая шейдеры), поэтому двухмерная текстура доступна конвейеру.
Примечание
Оборудование GPU часто ограничивает объем локальной памяти GPU, доступной для записи ЦП (которая называется объединенной памятью записи) для кучи дескриптора. Обычно это ограничение составляет около 96 МБ для всех процессов. Например, куча дескрипторов с 32-байтными дескрипторами будет использовать до 32 МБ. При необходимости драйвер будет использовать системную память, хотя рекомендуется не создавать большое количество больших кучи дескрипторов.
Связанные темы