callc (sm4 - asm)
有条件地调用标记的子例程,其中标签 l# 出现在程序中。
callc{_z|_nz} src0.select_component,l# |
---|
项 | 说明 |
---|---|
src0 |
[in]要对其测试条件的组件。 |
我# |
[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# 参数编制索引。
- src0 提供的 32 位寄存器在位级别进行测试。 如果任一位不为零, callc_nz 将执行调用。 如果所有位都为零, callc_z 将执行调用。
- 不允许递归。
此指令适用于以下着色器阶段:
顶点着色器 | 几何着色器 | 像素着色器 |
---|---|---|
x | x | x |
最小着色器模型
以下着色器模型中支持此函数。
着色器模型 | 支持 |
---|---|
着色器模型 5 | 是 |
着色器模型 4.1 | 是 |
着色器模型 4 | 是 |
着色器模型 3 (DirectX HLSL) | 否 |
着色器模型 2 (DirectX HLSL) | 否 |
着色器模型 1 (DirectX HLSL) | 否 |