SPU: Fix determinism loss when loading state where IRQs differ
This commit is contained in:
parent
2aa466d1c6
commit
307bd86b72
|
@ -1616,8 +1616,7 @@ void SPU::InternalGeneratePendingSamples()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
frames_to_execute =
|
frames_to_execute = (ticks_pending + s_state.ticks_carry) / SYSCLK_TICKS_PER_SPU_TICK;
|
||||||
(s_state.tick_event.GetTicksSinceLastExecution() + s_state.ticks_carry) / SYSCLK_TICKS_PER_SPU_TICK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool force_exec = (frames_to_execute > 0);
|
const bool force_exec = (frames_to_execute > 0);
|
||||||
|
@ -2505,15 +2504,10 @@ void SPU::UpdateEventInterval()
|
||||||
if (s_state.tick_event.IsActive() && s_state.tick_event.GetInterval() == interval_ticks)
|
if (s_state.tick_event.IsActive() && s_state.tick_event.GetInterval() == interval_ticks)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Ensure all pending ticks have been executed, since we won't get them back after rescheduling.
|
// Ticks remaining before execution should be retained, just adjust the interval/downcount.
|
||||||
s_state.tick_event.InvokeEarly(true);
|
const TickCount new_downcount = interval_ticks - s_state.ticks_carry;
|
||||||
s_state.tick_event.SetInterval(interval_ticks);
|
s_state.tick_event.SetInterval(interval_ticks);
|
||||||
|
s_state.tick_event.Schedule(new_downcount);
|
||||||
TickCount downcount = interval_ticks;
|
|
||||||
if (!g_settings.cpu_overclock_active)
|
|
||||||
downcount -= s_state.ticks_carry;
|
|
||||||
|
|
||||||
s_state.tick_event.Schedule(downcount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SPU::DrawDebugStateWindow(float scale)
|
void SPU::DrawDebugStateWindow(float scale)
|
||||||
|
|
Loading…
Reference in New Issue