summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-09-16 17:24:03 -0700
committerEric Anholt <eric@anholt.net>2014-09-17 14:21:24 -0700
commit79be2cc383f45e3e1e36e1ab774f2a3ea268cad5 (patch)
tree1ac28b9e4db151b910adef8994669628aed9c4d9
parent44b8eb743d644d2839fad12911fd6330414d22e3 (diff)
vc4: Make sure thread end doesn't have a uniform read.
Prevents regression when I start doing copy propagation on uniforms.
-rw-r--r--src/gallium/drivers/vc4/vc4_qpu_emit.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/drivers/vc4/vc4_qpu_emit.c b/src/gallium/drivers/vc4/vc4_qpu_emit.c
index 6c4c76d3217..592fab90785 100644
--- a/src/gallium/drivers/vc4/vc4_qpu_emit.c
+++ b/src/gallium/drivers/vc4/vc4_qpu_emit.c
@@ -528,6 +528,14 @@ vc4_generate_code(struct vc4_compile *c)
serialize_one_inst(c, qpu_NOP());
}
+ /* thread end can't have uniform read */
+ if (QPU_GET_FIELD(c->qpu_insts[c->qpu_inst_count - 1],
+ QPU_RADDR_A) == QPU_R_UNIF ||
+ QPU_GET_FIELD(c->qpu_insts[c->qpu_inst_count - 1],
+ QPU_RADDR_B) == QPU_R_UNIF) {
+ serialize_one_inst(c, qpu_NOP());
+ }
+
c->qpu_insts[c->qpu_inst_count - 1] =
qpu_set_sig(c->qpu_insts[c->qpu_inst_count - 1],
QPU_SIG_PROG_END);