summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2014-11-26 12:51:27 -0800
committerEric Anholt <[email protected]>2014-12-01 11:00:23 -0800
commit6958c404caf3f4b2219ef686e2beeeaf48664905 (patch)
treec2165319b5b5364e86a1969ec03780660d0acea4 /src/gallium
parent334036fb640741e51ecc54b823866710e99c853d (diff)
vc4: Drop the explicit scoreboard wait.
This is actually implicitly handled by the TLB operations.
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/vc4/vc4_qpu_emit.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/gallium/drivers/vc4/vc4_qpu_emit.c b/src/gallium/drivers/vc4/vc4_qpu_emit.c
index 3d7bdb47487..e6e97cce462 100644
--- a/src/gallium/drivers/vc4/vc4_qpu_emit.c
+++ b/src/gallium/drivers/vc4/vc4_qpu_emit.c
@@ -130,7 +130,6 @@ static void
serialize_insts(struct vc4_compile *c)
{
int last_sfu_write = -10;
- bool scoreboard_wait_emitted = false;
while (!is_empty_list(&c->qpu_inst_list)) {
struct queued_qpu_inst *q =
@@ -210,22 +209,18 @@ serialize_insts(struct vc4_compile *c)
* explicit Wait for Scoreboard signal or an implicit wait
* with the first tile-buffer read or write instruction."
*/
- if (!scoreboard_wait_emitted &&
- (waddr_a == QPU_W_TLB_Z || waddr_m == QPU_W_TLB_Z ||
- waddr_a == QPU_W_TLB_COLOR_MS ||
- waddr_m == QPU_W_TLB_COLOR_MS ||
- waddr_a == QPU_W_TLB_COLOR_ALL ||
- waddr_m == QPU_W_TLB_COLOR_ALL ||
- QPU_GET_FIELD(q->inst, QPU_SIG) == QPU_SIG_COLOR_LOAD)) {
+ if (waddr_a == QPU_W_TLB_Z ||
+ waddr_m == QPU_W_TLB_Z ||
+ waddr_a == QPU_W_TLB_COLOR_MS ||
+ waddr_m == QPU_W_TLB_COLOR_MS ||
+ waddr_a == QPU_W_TLB_COLOR_ALL ||
+ waddr_m == QPU_W_TLB_COLOR_ALL ||
+ QPU_GET_FIELD(q->inst, QPU_SIG) == QPU_SIG_COLOR_LOAD) {
while (c->qpu_inst_count < 3 ||
QPU_GET_FIELD(c->qpu_insts[c->qpu_inst_count - 1],
QPU_SIG) != QPU_SIG_NONE) {
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_WAIT_FOR_SCOREBOARD);
- scoreboard_wait_emitted = true;
}
serialize_one_inst(c, q->inst);
@@ -616,6 +611,10 @@ vc4_generate_code(struct vc4_context *vc4, struct vc4_compile *c)
serialize_one_inst(c, qpu_NOP());
}
+ /* thread end can't have TLB operations */
+ if (qpu_inst_is_tlb(c->qpu_insts[c->qpu_inst_count - 1]))
+ 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);