From 9c75c1e6fd6fae957aad28dae47a3f279f2dcfad Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 8 Apr 2014 22:20:33 -0700 Subject: [PATCH] Avoid triggering SYNC ge signals. Fixes #5806, bcause it avoids rescheduling at the signal, which it should not do. Possibly this is incorrect for all GE signals, but we don't need to trigger any behavior on a sync anyway. --- GPU/GPUCommon.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 1bda70320d..9040b9ea6e 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -823,6 +823,10 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) { ERROR_LOG_REPORT(G3D, "Signal with Pause UNIMPLEMENTED! signal/end: %04x %04x", signal, enddata); break; case PSP_GE_SIGNAL_SYNC: + // Technically, this ought to trigger an interrupt, but it won't do anything. + // Triggering here can cause incorrect rescheduling, which breaks 3rd Birthday. + // However, this is likely a bug in how GE signal interrupts are handled. + trigger = false; currentList->signal = behaviour; DEBUG_LOG(G3D, "Signal with Sync. signal/end: %04x %04x", signal, enddata); break;