vc4: Make sure thread end doesn't have a uniform read.
authorEric Anholt <eric@anholt.net>
Wed, 17 Sep 2014 00:24:03 +0000 (17:24 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 17 Sep 2014 21:21:24 +0000 (14:21 -0700)
Prevents regression when I start doing copy propagation on uniforms.

src/gallium/drivers/vc4/vc4_qpu_emit.c

index 6c4c76d3217e1fa28508b0737e1ff180ce23008e..592fab907850c913168394e860522168a9a5b28a 100644 (file)
@@ -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);