summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv50/nv50_pc_emit.c
diff options
context:
space:
mode:
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>2010-08-16 18:00:39 +0200
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>2010-08-17 00:47:47 +0200
commit62f933a6f617050a267079b27360eaae2d0e1a70 (patch)
treea7897c1efe777740babff92409ba515085254ff4 /src/gallium/drivers/nv50/nv50_pc_emit.c
parent6c5c55723d32f8933ffb5fc6b5beb209eca84ca8 (diff)
nv50: generate JOINs for outermost IF clauses
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_pc_emit.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_pc_emit.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/drivers/nv50/nv50_pc_emit.c b/src/gallium/drivers/nv50/nv50_pc_emit.c
index fe44b327ab..3a3b277c13 100644
--- a/src/gallium/drivers/nv50/nv50_pc_emit.c
+++ b/src/gallium/drivers/nv50/nv50_pc_emit.c
@@ -38,7 +38,7 @@ const ubyte nv50_inst_min_size_tab[NV_OP_COUNT] =
0, 0, 0, 8, 8, 4, 4, 4, 8, 4, 4, 8, 8, 8, 8, 8, /* 15 */
8, 8, 8, 4, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, /* 31 */
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, /* 47 */
- 4, 8, 8, 8, 8, 8, 0, 0
+ 4, 8, 8, 8, 8, 8, 0, 0, 8
};
/* XXX: silence, you ! */
@@ -71,6 +71,9 @@ nv50_inst_min_size(struct nv_instruction *i)
if (i->flags_def || i->flags_src || i->src[4])
return 8;
+ if (i->is_join)
+ return 8;
+
if (i->src[2]) {
if (i->saturate || i->src[2]->mod)
return 8;
@@ -1126,6 +1129,7 @@ nv50_emit_instruction(struct nv_pc *pc, struct nv_instruction *i)
emit_flow(pc, i, 0xa);
break;
case NV_OP_NOP:
+ case NV_OP_JOIN:
pc->emit[0] = 0xf0000001;
pc->emit[1] = 0xe0000000;
break;
@@ -1141,5 +1145,10 @@ nv50_emit_instruction(struct nv_pc *pc, struct nv_instruction *i)
break;
}
+ if (i->is_join) {
+ assert(i->is_long && !(pc->emit[1] & 1));
+ pc->emit[1] |= 2;
+ }
+
assert((pc->emit[0] & 1) == i->is_long);
}