summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2014-11-30 15:13:40 -0800
committerEric Anholt <[email protected]>2014-12-01 11:00:23 -0800
commit334036fb640741e51ecc54b823866710e99c853d (patch)
tree66bd2458ae0de3fb194c1991b9171c5cd64b1eb7 /src
parenta7b1a93137f4441822760f1cfe261065474163ab (diff)
vc4: Also deal with VPM reads at thread end.
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.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/vc4/vc4_qpu_emit.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/gallium/drivers/vc4/vc4_qpu_emit.c b/src/gallium/drivers/vc4/vc4_qpu_emit.c
index 1d12d11b942..3d7bdb47487 100644
--- a/src/gallium/drivers/vc4/vc4_qpu_emit.c
+++ b/src/gallium/drivers/vc4/vc4_qpu_emit.c
@@ -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());
}