vc4: Also deal with VPM reads at thread end.
authorEric Anholt <eric@anholt.net>
Sun, 30 Nov 2014 23:13:40 +0000 (15:13 -0800)
committerEric Anholt <eric@anholt.net>
Mon, 1 Dec 2014 19:00:23 +0000 (11:00 -0800)
Prevents a regression with QPU scheduling, which happens to put the no-op
reads for unused VPM contents end up at the end of the program.

src/gallium/drivers/vc4/vc4_qpu_emit.c

index 1d12d11b94294986f3da2aa876543f21a5bbb832..3d7bdb47487935ab439d546cc0195f3ad4d5c6f5 100644 (file)
@@ -596,11 +596,15 @@ vc4_generate_code(struct vc4_context *vc4, struct vc4_compile *c)
 
         serialize_insts(c);
 
-        /* thread end can't have VPM write */
+        /* thread end can't have VPM write or read */
         if (QPU_GET_FIELD(c->qpu_insts[c->qpu_inst_count - 1],
                           QPU_WADDR_ADD) == QPU_W_VPM ||
             QPU_GET_FIELD(c->qpu_insts[c->qpu_inst_count - 1],
-                          QPU_WADDR_MUL) == QPU_W_VPM) {
+                          QPU_WADDR_MUL) == QPU_W_VPM ||
+            QPU_GET_FIELD(c->qpu_insts[c->qpu_inst_count - 1],
+                          QPU_RADDR_A) == QPU_R_VPM ||
+            QPU_GET_FIELD(c->qpu_insts[c->qpu_inst_count - 1],
+                          QPU_RADDR_B) == QPU_R_VPM) {
                 serialize_one_inst(c, qpu_NOP());
         }