Since ir3_register struct has union, it could return true even if it's an array register accidentally when checking whether it is address/predicate register.
Fixes: dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.6 --- src/gallium/drivers/freedreno/ir3/ir3.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/freedreno/ir3/ir3.h b/src/gallium/drivers/freedreno/ir3/ir3.h index 3055c10f1d..db94603558 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.h +++ b/src/gallium/drivers/freedreno/ir3/ir3.h @@ -739,7 +739,7 @@ static inline bool writes_addr(struct ir3_instruction *instr) { if (instr->regs_count > 0) { struct ir3_register *dst = instr->regs[0]; - return reg_num(dst) == REG_A0; + return (reg_num(dst) == REG_A0) && !(dst->flags & IR3_REG_ARRAY); } return false; } @@ -748,7 +748,7 @@ static inline bool writes_pred(struct ir3_instruction *instr) { if (instr->regs_count > 0) { struct ir3_register *dst = instr->regs[0]; - return reg_num(dst) == REG_P0; + return (reg_num(dst) == REG_P0) && !(dst->flags & IR3_REG_ARRAY); } return false; } -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev