summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv50/nv50_program.c
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-06-02 12:12:16 +1000
committerBen Skeggs <skeggsb@gmail.com>2008-06-29 15:46:13 +1000
commit207b7974723c6b88aacfa3703a1e049ff35db6a8 (patch)
tree4bd709444e524071d496090c89b9f3a1df44f468 /src/gallium/drivers/nv50/nv50_program.c
parent38ce697e5942550888c28bd4859ca2a92f247bf7 (diff)
nv50: DPH
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_program.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_program.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index 41ff05dabe..12bd419f4c 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -383,6 +383,18 @@ nv50_program_tx_insn(struct nv50_pc *pc, const union tgsi_full_token *tok)
}
free_temp(pc, tmp);
break;
+ case TGSI_OPCODE_DPH:
+ tmp = alloc_temp(pc, NULL);
+ emit(pc, OP_MUL, tmp, src[0][0], src[1][0], NULL);
+ emit(pc, OP_MAD, tmp, src[0][1], src[1][1], tmp);
+ emit(pc, OP_MAD, tmp, src[0][2], src[1][2], tmp);
+ emit(pc, OP_ADD, tmp, src[1][3], tmp, NULL);
+ for (c = 0; c < 4; c++) {
+ if (mask & (1 << c))
+ emit(pc, OP_MOV, dst[c], tmp, none, none);
+ }
+ free_temp(pc, tmp);
+ break;
case TGSI_OPCODE_MAD:
for (c = 0; c < 4; c++) {
if (mask & (1 << c))