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 位条件值。

包含双精度的 src1src2 的有效重排是 .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) 。

除重排外, src1src2 上的修饰符假定数据为双精度值。 缺少修饰符可移动数据而不更改位。

此指令适用于以下着色器阶段:

顶点 外壳 Geometry 像素 计算
x x X x x x

最小着色器模型

以下着色器模型中支持此指令:

着色器模型 支持
着色器模型 5
着色器模型 4.1
着色器模型 4
着色器模型 3 (DirectX HLSL)
着色器模型 2 (DirectX HLSL)
着色器模型 1 (DirectX HLSL)

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