dcl_interface (sm5 – asm)

Объявите указатели таблицы функций (интерфейсы).

dcl_interface fp#[arraySize][numCallSites] = {ft#, ft#, ...}
Элемент Описание
Fp #
[in] Указатели на таблицу функций.

Комментарии

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

Указатель таблицы функций имеет полный набор слотов методов, чтобы избежать дополнительного уровня косвенного обращения, необходимого для представления указателя на таблицу C++. Для этого также потребуется, чтобы эти указатели были 5 кортежей. В модели виртуальной встраивание HLSL всегда известно, какие глобальные переменные или входные данные используются для вызова, чтобы можно было настроить таблицы для каждого корневого объекта.

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

Первое [] объявления интерфейса — это размер массива. Если используется динамическое индексирование, объявление будет указывать на это, как показано ниже. Массив указателей интерфейса также можно индексировать статически. Не обязательно, чтобы массивы указателей интерфейса означают динамическое индексирование.

Нумерация указателей интерфейса начинается с 0 для первого объявления и впоследствии учитывает размер массива, поэтому первым указателем после четырех массивов элементов fp0[4][1] будет fp4[][].

Второе [] объявления интерфейса — это количество сайтов вызовов, которое должно соответствовать числу тел в каждой таблице, на которую ссылается объявление.

Нет границ с количеством вариантов таблицы функций (ft#) в объявлении интерфейса.

Данная таблица функций (ft#) может отображаться несколько раз в одном или нескольких объявлениях интерфейса.

Ограничения

  • Количество сайтов объектов в шейдере, которое является суммой по всем объявлениям fp# их объявлений [arraySize], должно быть не более 253. Это число соответствует количеству этих указателей. Среда выполнения применяет это ограничение в 253, чтобы сохранить привязку к размеру DDI для передачи данных указателя.

  • Количество сайтов вызовов в шейдере, которое является суммой по всем операторам fcall количества потенциальных целевых объектов ветви, должно быть не более 4096.

    Например, fcall , использующий статический индекс для первого измерения fp[][], считается одним:

    fcall fp0[0][0] // +1

    Fcall, использующий динамический индекс, подсчитывает количество элементов в массиве (первый [] dcl_interface):

    dcl_interface_dynamicindexed fp1[2][1] = {ft2, ft3, ft4} ...

    fcall fp1[r0.z + 0][1] // +2

    Это ограничение помогает некоторым реализациям легко помещаться в таблицы выбора текста функции в константном буферном хранилище.

Эта инструкция применяется к следующим этапам шейдера:

Вершина Корпуса Домен Geometry Пиксель Вычисления
X X X X X X

Минимальная модель шейдера

Эта инструкция поддерживается в следующих моделях шейдеров:

Модель шейдера Поддерживается
Модель шейдера 5 да
Модель шейдера 4.1 нет
Модель шейдера 4 нет
Модель шейдера 3 (DirectX HLSL) нет
Модель шейдера 2 (DirectX HLSL) нет
Модель шейдера 1 (DirectX HLSL) нет

cs_4_0 и cs_4_1 поддерживают эту инструкцию для БПЛА и SRV.

Сборка модели шейдера 5 (DirectX HLSL)