callc (sm4 - asm)

Условный вызов подпрограммы, помеченной тем, где метка l# отображается в программе.

callc{_z|_nz} src0.select_component, l #
Элемент Описание
src0
[in] Компонент, на котором проверяется условие.
L #
[in] Метка подпрограммы.

Комментарии

При обнаружении ret верните выполнение инструкции после этого вызова.

Формат маркера для удобства содержит смещение соответствующей метки в шейдере.

В следующем примере показана инструкция вызова.

                ...
                callc_z  r1.y, l3 // if all bits in r0.x are 0, call l3
                callc_nz r2.z, l3 // if any bit in r0.x is nonzero, call l3
                ...
                ret
                label l3
                    ...
                    retc_nz r0.x
                    ...
                ret

Ограничения

  • Подпрограммы могут вложить 32 глубоко.
  • Реализация прозрачно управляет возвращаемым стеком адресов.
  • Если в стеке обратных адресов уже есть 32 записи и выполняется вызов , вызов пропускается.
  • Автоматический стек параметров отсутствует. Приложение может использовать индексируемый временный массив регистров (x#[]) для реализации стека вручную. Однако адреса возврата вызовов подпрограммы не видны и являются ортогональными для любого ручного управления стеком, выполняемого приложением.
  • Индексирование параметра l# запрещено.
  • 32-разрядный регистр, предоставляемый src0 , тестируется на битовом уровне. Если какой-либо бит не равен нулю, callc_nz выполнит вызов . Если все биты равны нулю, callc_z выполнит вызов.
  • Рекурсия запрещена.

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

Вершинный построитель текстуры Шейдер геометрии Построитель текстуры
x x x

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

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

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

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