cnd - ps
根据比较 src0 0.5 > ,有条件地在 src1 和 src2 之间进行选择。
语法
cnd dst, src0, src1, src2 |
---|
其中
- dst 是目标寄存器。
- src0 是源寄存器。
- src1 是源寄存器。
- src2 是源寄存器。
备注
像素着色器版本 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
cnd | x | x | x | x |
对于版本 1_1 到 1_3,src0 必须为 r0.a。
// Version 1_1 to 1_3
if (r0.a > 0.5)
dest = src1
else
dest = src2
版本 1_4 分别比较每个通道。
for each component in src0
{
if (src0.component > 0.5)
dest.component = src1.component
else
dest.component = src2.component
}
这些示例演示在版本 1_4 着色器中完成的四通道比较,以及在版本 1_1 着色器中可能的单通道比较。
ps_1_4
def c0, -0.5, 0.5, 0, 0.6
def c1, 0,0,0,0
def c2, 1,1,1,1
cnd r1, c0, c1, c2 // r0 contains 1,1,1,0 because
// r1.x = c2.x because c0.x <= 0.5
// r1.y = c2.y because c0.y <= 0.5
// r1.z = c2.z because c0.z <= 0.5
// r1.w = c1.w because c0.w > 0.5
版本 1_1 到 1_3 仅与复制的 alpha 通道 r0 进行比较。
ps_1_1
def c0, -0.5, 0.5, 0, 0.6
def c1, 0,0,0,0
def c2, 1,1,1,1
mov r0, c0
cnd r1, r0.a, c1, c2 // r1 gets assigned 0,0,0,0 because
// r0.a > 0.5, therefore r1.xyzw = c1.xyzw
此示例比较两个值 A 和 B。该示例假定 A 已加载到 v0 中,B 已加载到 v1 中。 A 和 B 必须在 -1 到 +1 的范围内,并且由于 vn) (颜色寄存器定义为介于 0 和 1 之间,因此在此示例中正好满足限制。
ps_1_1 // Version instruction
sub r0, v0, v1_bias // r0 = A - (B - 0.5)
cnd r0, r0.a, c0, c1 // r0 = ( A > B ? c0 : c1 )
// r0 = c0 if A > B, otherwise, r0 = c1
相关主题