mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-10 08:51:28 +12:00
SPU/Savestates: Remove reservation hack, allow its saving
This commit is contained in:
parent
e209dc1229
commit
9f6c5381a1
2 changed files with 52 additions and 16 deletions
|
@ -2022,6 +2022,20 @@ spu_thread::spu_thread(utils::serial& ar, lv2_spu_group* group)
|
|||
|
||||
serialize_common(ar);
|
||||
|
||||
raddr = ::narrow<u32>(ar.pop<u64>());
|
||||
|
||||
if (raddr)
|
||||
{
|
||||
// Acquire reservation
|
||||
if (!vm::check_addr(raddr))
|
||||
{
|
||||
fmt::throw_exception("SPU Serialization: Reservation address is not accessible! (addr=0x%x)", raddr);
|
||||
}
|
||||
|
||||
rtime = vm::reservation_acquire(raddr);
|
||||
mov_rdata(rdata, *vm::get_super_ptr<spu_rdata_t>(raddr));
|
||||
}
|
||||
|
||||
status_npc.raw().npc = pc | u8{interrupts_enabled};
|
||||
|
||||
if (get_type() == spu_type::threaded)
|
||||
|
@ -2058,8 +2072,8 @@ void spu_thread::save(utils::serial& ar)
|
|||
|
||||
if (raddr)
|
||||
{
|
||||
// Lose reservation at savestate load with an event if one existed at savestate save
|
||||
set_events(SPU_EVENT_LR);
|
||||
// Last check for reservation-lost event
|
||||
get_events(SPU_EVENT_LR);
|
||||
}
|
||||
|
||||
ar(index);
|
||||
|
@ -2073,6 +2087,9 @@ void spu_thread::save(utils::serial& ar)
|
|||
|
||||
serialize_common(ar);
|
||||
|
||||
// Let's save it as u64 for future proofing
|
||||
ar(u64{raddr});
|
||||
|
||||
if (get_type() == spu_type::threaded)
|
||||
{
|
||||
for (const auto& [key, q] : spuq)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue