vc4: Fix RADDR_A field extraction of branch instruction
authorQiu Wenbo <qiuwenbo@kylinos.com.cn>
Mon, 9 Jan 2023 09:11:59 +0000 (17:11 +0800)
committerMarge Bot <emma+marge@anholt.net>
Mon, 9 Jan 2023 20:22:47 +0000 (20:22 +0000)
Signed-off-by: Qiu Wenbo <qiuwenbo@kylinos.com.cn>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
cc: mesa-stable

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20581>

src/gallium/drivers/vc4/vc4_qpu_schedule.c

index 055bd03..44aa78e 100644 (file)
@@ -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);