dmovc (sm5 - asm)
按组件进行条件移动。
dmovc[_sat] dest[.mask], src0[.swizzle], [-]src1[_abs][.swizzle], [-]src2[_abs][.swizzle], |
---|
项 | 说明 |
---|---|
dest |
[in]移动目标。 如果 src0,则 dest = src1 else dest = src2。 |
src0 |
[in]要测试条件的组件。 |
src1 |
[in]条件为 true 时要移动的组件。 |
src2 |
[in]条件为 false 时要移动的组件。 |
备注
以下示例演示如何使用此命令。
if(the dest mask contains .xy)
{
if(the first 32-bit component of src0, post-swizzle,
has any bit set)
{
copy the first double from src1 (post swizzle)
into dest.xy
}
else
{
copy the first double from src2 (post swizzle)
into dest.xy
}
}
if(the dest mask contains .zw)
{
if(the second 32-bit component of src0, post-swizzle,
has any bit set)
{
copy the second double from src1 (post swizzle)
into dest.zw
}
else
{
copy the second double from src2 (post swizzle)
into dest.zw
}
}
dest 的有效掩码为 .xy、.zw、.xyzw。
src0 的有效重排是任何内容。 重排后的前两个组件用于缩进两个 32 位条件值。
包含双精度的 src1 和 src2 的有效重排是 .xyzw、.xyxy、.zwxy、.zwzw。 为 .xy、.zw 和 .xyzw。
以下 src 映射是后重排:
- dest 是跨 (x 32LSB、y 32MSB) 和 (z 32LSB、w 32MSB) 的双 vec2。
- src0 是跨 x 和 y (zw 的 32 位/组件 vec2,) 忽略。
- src1 是跨 (x 32LSB、y 32MSB) 和 (z 32LSB 的双 vec2,w 32MSB) 。
- src2 是跨 (x 32LSB、y 32MSB) 和 (z 32LSB 的双 vec2,w 32MSB) 。
除重排外, src1 和 src2 上的修饰符假定数据为双精度值。 缺少修饰符可移动数据而不更改位。
此指令适用于以下着色器阶段:
顶点 | 外壳 | 域 | Geometry | 像素 | 计算 |
---|---|---|---|---|---|
x | x | X | x | x | x |
最小着色器模型
以下着色器模型中支持此指令:
着色器模型 | 支持 |
---|---|
着色器模型 5 | 是 |
着色器模型 4.1 | 否 |
着色器模型 4 | 否 |
着色器模型 3 (DirectX HLSL) | 否 |
着色器模型 2 (DirectX HLSL) | 否 |
着色器模型 1 (DirectX HLSL) | 否 |