aco: fix more validation errors from vgpr spill/restore code
It looks like the attempt to fix this in 1e791e51a6
was incomplete.
This fixes crashes with Devil May Cry 5 with a debug build.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5828>
This commit is contained in:
parent
1af1eb9f7b
commit
ca51f75f9d
|
@ -1571,7 +1571,7 @@ void assign_spill_slots(spill_ctx& ctx, unsigned spills_to_vgpr) {
|
||||||
split->definitions[i] = bld.def(v1);
|
split->definitions[i] = bld.def(v1);
|
||||||
bld.insert(split);
|
bld.insert(split);
|
||||||
for (unsigned i = 0; i < temp.size(); i++)
|
for (unsigned i = 0; i < temp.size(); i++)
|
||||||
bld.mubuf(opcode, scratch_rsrc, Operand(), scratch_offset, split->definitions[i].getTemp(), offset + i * 4, false);
|
bld.mubuf(opcode, scratch_rsrc, Operand(v1), scratch_offset, split->definitions[i].getTemp(), offset + i * 4, false);
|
||||||
} else {
|
} else {
|
||||||
bld.mubuf(opcode, scratch_rsrc, Operand(v1), scratch_offset, temp, offset, false);
|
bld.mubuf(opcode, scratch_rsrc, Operand(v1), scratch_offset, temp, offset, false);
|
||||||
}
|
}
|
||||||
|
@ -1637,7 +1637,7 @@ void assign_spill_slots(spill_ctx& ctx, unsigned spills_to_vgpr) {
|
||||||
for (unsigned i = 0; i < def.size(); i++) {
|
for (unsigned i = 0; i < def.size(); i++) {
|
||||||
Temp tmp = bld.tmp(v1);
|
Temp tmp = bld.tmp(v1);
|
||||||
vec->operands[i] = Operand(tmp);
|
vec->operands[i] = Operand(tmp);
|
||||||
bld.mubuf(opcode, Definition(tmp), scratch_rsrc, Operand(), scratch_offset, offset + i * 4, false);
|
bld.mubuf(opcode, Definition(tmp), scratch_rsrc, Operand(v1), scratch_offset, offset + i * 4, false);
|
||||||
}
|
}
|
||||||
bld.insert(vec);
|
bld.insert(vec);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue