From 3da4e38f4864f0ae4eeeea588a000204042de5ea Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 25 Aug 2016 13:40:27 -0700 Subject: [PATCH] vc4: Add QPU scheduling to handle MUL rotate sources. We need MUL rotates to do ddx/ddy support. --- src/gallium/drivers/vc4/vc4_qpu_schedule.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/gallium/drivers/vc4/vc4_qpu_schedule.c b/src/gallium/drivers/vc4/vc4_qpu_schedule.c index 1caee51a581..25adbe67103 100644 --- a/src/gallium/drivers/vc4/vc4_qpu_schedule.c +++ b/src/gallium/drivers/vc4/vc4_qpu_schedule.c @@ -486,6 +486,19 @@ reads_too_soon_after_write(struct choose_scoreboard *scoreboard, uint64_t inst) } } + if (sig == QPU_SIG_SMALL_IMM && + QPU_GET_FIELD(inst, QPU_SMALL_IMM) >= QPU_SMALL_IMM_MUL_ROT) { + uint32_t mux_a = QPU_GET_FIELD(inst, QPU_MUL_A); + uint32_t mux_b = QPU_GET_FIELD(inst, QPU_MUL_B); + + if (scoreboard->last_waddr_a == mux_a + QPU_W_ACC0 || + scoreboard->last_waddr_a == mux_b + QPU_W_ACC0 || + scoreboard->last_waddr_b == mux_a + QPU_W_ACC0 || + scoreboard->last_waddr_b == mux_b + QPU_W_ACC0) { + return true; + } + } + if (reads_uniform(inst) && scoreboard->tick - scoreboard->last_uniforms_reset_tick <= 2) { return true; -- 2.30.2