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)

着色器模型 4 程序集 (DirectX HLSL)