summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/vc4/vc4_qpu_schedule.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_qpu_schedule.c')
-rw-r--r--src/gallium/drivers/vc4/vc4_qpu_schedule.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/gallium/drivers/vc4/vc4_qpu_schedule.c b/src/gallium/drivers/vc4/vc4_qpu_schedule.c
index cfacc23b3b1..2ca7eee4e0d 100644
--- a/src/gallium/drivers/vc4/vc4_qpu_schedule.c
+++ b/src/gallium/drivers/vc4/vc4_qpu_schedule.c
@@ -99,7 +99,7 @@ add_dep(struct schedule_state *state,
bool write)
{
bool write_after_read = !write && state->dir == R;
- void *edge_data = (void *)(uintptr_t)write_after_read;
+ uintptr_t edge_data = write_after_read;
if (!before || !after)
return;
@@ -327,13 +327,15 @@ calculate_deps(struct schedule_state *state, struct schedule_node *n)
uint32_t mul_op = QPU_GET_FIELD(inst, QPU_OP_MUL);
uint32_t waddr_add = QPU_GET_FIELD(inst, QPU_WADDR_ADD);
uint32_t waddr_mul = QPU_GET_FIELD(inst, QPU_WADDR_MUL);
- uint32_t raddr_a = QPU_GET_FIELD(inst, QPU_RADDR_A);
+ uint32_t sig = QPU_GET_FIELD(inst, QPU_SIG);
+ uint32_t raddr_a = sig == QPU_SIG_BRANCH ?
+ QPU_GET_FIELD(inst, QPU_BRANCH_RADDR_A) :
+ QPU_GET_FIELD(inst, QPU_RADDR_A);
uint32_t raddr_b = QPU_GET_FIELD(inst, QPU_RADDR_B);
uint32_t add_a = QPU_GET_FIELD(inst, QPU_ADD_A);
uint32_t add_b = QPU_GET_FIELD(inst, QPU_ADD_B);
uint32_t mul_a = QPU_GET_FIELD(inst, QPU_MUL_A);
uint32_t mul_b = QPU_GET_FIELD(inst, QPU_MUL_B);
- uint32_t sig = QPU_GET_FIELD(inst, QPU_SIG);
if (sig != QPU_SIG_LOAD_IMM) {
process_raddr_deps(state, n, raddr_a, true);
@@ -342,13 +344,15 @@ calculate_deps(struct schedule_state *state, struct schedule_node *n)
process_raddr_deps(state, n, raddr_b, false);
}
- if (add_op != QPU_A_NOP) {
- process_mux_deps(state, n, add_a);
- process_mux_deps(state, n, add_b);
- }
- if (mul_op != QPU_M_NOP) {
- process_mux_deps(state, n, mul_a);
- process_mux_deps(state, n, mul_b);
+ if (sig != QPU_SIG_LOAD_IMM && sig != QPU_SIG_BRANCH) {
+ if (add_op != QPU_A_NOP) {
+ process_mux_deps(state, n, add_a);
+ process_mux_deps(state, n, add_b);
+ }
+ if (mul_op != QPU_M_NOP) {
+ process_mux_deps(state, n, mul_a);
+ process_mux_deps(state, n, mul_b);
+ }
}
process_waddr_deps(state, n, waddr_add, true);