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) | нет |