nvfx: implement DP2 in vp and fp
authorLuca Barbieri <luca@luca-barbieri.com>
Sat, 21 Aug 2010 17:43:46 +0000 (19:43 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Sat, 21 Aug 2010 18:42:15 +0000 (20:42 +0200)
src/gallium/drivers/nvfx/nvfx_fragprog.c
src/gallium/drivers/nvfx/nvfx_vertprog.c

index 2c24d523c473195854da3ad1a6b83cf294e16b7d..40cd410e9b3b57737b5bbb3b1e45da95052d4b63 100644 (file)
@@ -573,6 +573,11 @@ nvfx_fragprog_parse_instruction(struct nvfx_context* nvfx, struct nvfx_fpc *fpc,
                        nvfx_fp_emit(fpc, arith(sat, DDY, dst, mask, src[0], none, none));
                }
                break;
+       case TGSI_OPCODE_DP2:
+               tmp = nvfx_src(temp(fpc));
+               nvfx_fp_emit(fpc, arith(0, MUL, tmp.reg, NVFX_FP_MASK_X | NVFX_FP_MASK_Y, src[0], src[1], none));
+               nvfx_fp_emit(fpc, arith(0, ADD, dst, mask, swz(tmp, X, X, X, X), swz(tmp, Y, Y, Y, Y), none));
+               break;
        case TGSI_OPCODE_DP3:
                nvfx_fp_emit(fpc, arith(sat, DP3, dst, mask, src[0], src[1], none));
                break;
index d68224ce7a232095901dd006752f482cb1adb894..6b19d86a180b85635ec87871e5c4850bc8d176b3 100644 (file)
@@ -514,6 +514,11 @@ nvfx_vertprog_parse_instruction(struct nvfx_context* nvfx, struct nvfx_vpc *vpc,
        case TGSI_OPCODE_COS:
                nvfx_vp_emit(vpc, arith(SCA, COS, dst, mask, none, none, src[0]));
                break;
+        case TGSI_OPCODE_DP2:
+                tmp = nvfx_src(temp(vpc));
+                nvfx_vp_emit(vpc, arith(VEC, MUL, tmp.reg, NVFX_VP_MASK_X | NVFX_VP_MASK_Y, src[0], src[1], none));
+                nvfx_vp_emit(vpc, arith(VEC, ADD, dst, mask, swz(tmp, X, X, X, X), swz(tmp, Y, Y, Y, Y), none));
+                break;
        case TGSI_OPCODE_DP3:
                nvfx_vp_emit(vpc, arith(VEC, DP3, dst, mask, src[0], src[1], none));
                break;