From 86e5f32efbce4061984844a437fb83dec51aba46 Mon Sep 17 00:00:00 2001 From: "sudonim1@gmail.com" Date: Tue, 2 Oct 2012 17:40:42 +0000 Subject: [PATCH] SPU2-X: Another change to the shortcut processing of voices, check the actual loop flags in memory rather than the ones in the voice structure because the memory might've changed. Fixes Innocent Life - A Futuristic Harvest Moon. Also, check both cores rather than the current core, that was a mistake. Speed-- again. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5425 96395faa-99c1-11dd-bbfe-3dabce05a288 --- plugins/spu2-x/src/Mixer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/spu2-x/src/Mixer.cpp b/plugins/spu2-x/src/Mixer.cpp index 62874094e1..62d9dbed31 100644 --- a/plugins/spu2-x/src/Mixer.cpp +++ b/plugins/spu2-x/src/Mixer.cpp @@ -612,8 +612,9 @@ static __forceinline StereoOut32 MixVoice( uint coreidx, uint voiceidx ) else { // Continue processing voice, even if it's "off". Or else we miss interrupts! (Fatal Frame engine died because of this.) - if ((vc.LoopFlags & 3) != 3 || vc.LoopStartA != (vc.NextA & ~7) // not in a tight loop - || thiscore.IRQEnable && (thiscore.IRQA & ~7) == vc.LoopStartA // or should be interrupting regularly + if ((*GetMemPtr(vc.NextA & 0xFFFF8) >> 8 & 3) != 3 || vc.LoopStartA != (vc.NextA & ~7) // not in a tight loop + || Cores[0].IRQEnable && (Cores[0].IRQA & ~7) == vc.LoopStartA // or should be interrupting regularly + || Cores[1].IRQEnable && (Cores[1].IRQA & ~7) == vc.LoopStartA || !(thiscore.Regs.ENDX & 1 << voiceidx)) // or isn't currently flagged as having passed the endpoint { UpdatePitch(coreidx, voiceidx);