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
This commit is contained in:
sudonim1@gmail.com 2012-10-02 17:40:42 +00:00
parent a06b9064f2
commit 86e5f32efb
1 changed files with 3 additions and 2 deletions

View File

@ -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);