summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/nv50/nv50_program.c
diff options
context:
space:
mode:
authorBen Skeggs <[email protected]>2008-06-05 18:52:16 +1000
committerBen Skeggs <[email protected]>2008-06-29 15:46:14 +1000
commitfbf4027dd9b279ec159906dcad134f71e34aaec8 (patch)
tree1868c3dd9d4f509d0b0d00c458d097ec0bd5ca4e /src/gallium/drivers/nv50/nv50_program.c
parent7df7f7bb99441ed8e2fba2840e0459e72691f272 (diff)
nv50: fix EX2.. somehow
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_program.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_program.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index a293db6f723..6d3d8ff302b 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -595,11 +595,22 @@ nv50_program_tx_insn(struct nv50_pc *pc, const union tgsi_full_token *tok)
free_temp(pc, temp);
break;
case TGSI_OPCODE_EX2:
+ temp = alloc_temp(pc, NULL);
for (c = 0; c < 4; c++) {
if (!(mask & (1 << c)))
continue;
- emit_flop(pc, 6, dst[c], src[0][c]);
+ {
+ unsigned inst[2] = { 0, 0 };
+ inst[0] |= 0xb0000000;
+ set_dst(pc, temp, inst);
+ set_src_0(pc, src[0][c], inst);
+ set_long(pc, inst);
+ inst[1] |= (6 << 29) | 0x00004000;
+ emit(pc, inst);
+ }
+ emit_flop(pc, 6, dst[c], temp);
}
+ free_temp(pc, temp);
break;
case TGSI_OPCODE_LG2:
for (c = 0; c < 4; c++) {