diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp b/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp index 6d6dd934969..75d48a7e642 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp @@ -509,6 +509,13 @@ bool AluInstr::can_replace_source(PRegister old_src, PVirtualValue new_src) addr_reg->has_flag(Register::addr_or_idx)) return false; } + if (m_dest->has_flag(Register::addr_or_idx)) { + if (new_src->pin() == pin_array) { + auto s = static_cast(new_src)->addr(); + if (!s->as_inline_const() || !s->as_literal()) + return false; + } + } } return true; }