dp3 - ps

计算源寄存器的三分量点乘积。

语法

dp3 dst、src0、src1

 

其中

  • dst 是目标寄存器。
  • src0 是源寄存器。
  • src1 是源寄存器。

备注

像素着色器版本 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
dp3 x x x x x x x x x

 

以下代码片段显示了执行的操作:

dest.x = dest.y = dest.z = dest.w = 
  (src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z);

此指令在矢量管道中运行,始终写出到颜色通道。 对于版本 1_4,此指令仍使用矢量管道,但可能会写入任何通道。

目标寄存器 .rgb (.xyz) 写入掩码的指令可能与 dp3 共同发出,如下所示。

dp3 r0.rgb, t0, v0            // Copy scalar result to color components
+mov r2.a, t0                 // Copy alpha component from t0 in parallel 

如果 dp3 指令尚未扩展到带符号的动态范围,则可以使用 源寄存器签名缩放 输入参数修饰符 (_bx2) 应用于其输入参数。 对于照明着色器,饱和指令修饰符 (_sat) 通常用于将负值固定为黑色,如以下示例所示。

dp3_sat r0, t0_bx2, v0_bx2    // t0 is a bump map, v0 contains the light direction

像素着色器说明