summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-06-16 18:56:39 +1000
committerBen Skeggs <skeggsb@gmail.com>2008-06-29 15:46:18 +1000
commit431504b99cd55948522e86a249e656e78598ddbd (patch)
treeaabb01e26176642ea7606175773a542530b3d16b
parentbcbe6baac37915563bc120ad558cd930bc1ddec1 (diff)
nv50: hack of a TEX opcode
-rw-r--r--src/gallium/drivers/nv50/nv50_program.c19
-rw-r--r--src/gallium/drivers/nv50/nv50_screen.c5
2 files changed, 24 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index fa5e24d3e9..21945410b1 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -1134,6 +1134,25 @@ nv50_program_tx_insn(struct nv50_pc *pc, const union tgsi_full_token *tok)
}
break;
case TGSI_OPCODE_TEX:
+ {
+ struct nv50_reg *t0, *t1;
+ struct nv50_program_exec *e;
+
+ t0 = alloc_temp(pc, NULL);
+ t0 = alloc_temp(pc, NULL);
+ t1 = alloc_temp(pc, NULL);
+ emit_mov(pc, t0, src[0][0]);
+ emit_mov(pc, t1, src[0][1]);
+
+ e = exec(pc);
+ e->inst[0] = 0xf0400000;
+ set_long(pc, e);
+ e->inst[1] |= 0x0000c004;
+ set_dst(pc, t0, e);
+ emit(pc, e);
+ free_temp(pc, t0);
+ free_temp(pc, t1);
+ }
break;
case TGSI_OPCODE_XPD:
temp = alloc_temp(pc, NULL);
diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c
index b9cecb77f1..8affb0f073 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -289,6 +289,11 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_winsys *nvws)
so_data (so, fui(0.0));
so_data (so, fui(1.0));
+ so_method(so, screen->tesla, 0x1234, 1);
+ so_data (so, 1);
+ so_method(so, screen->tesla, 0x1458, 1);
+ so_data (so, 1);
+
so_emit(nvws, so);
so_ref(NULL, &so);
nvws->push_flush(nvws, 0, NULL);