diff --git a/pcsx2/Vif.cpp b/pcsx2/Vif.cpp index 669b892a08..88335daf5c 100644 --- a/pcsx2/Vif.cpp +++ b/pcsx2/Vif.cpp @@ -270,7 +270,8 @@ __fi void vif1FBRST(u32 value) { { case MFD_VIF1: //Console.WriteLn("MFIFO Stall"); - if(vif1ch.chcr.STR == true) CPU_INT(DMAC_MFIFO_VIF, 0); + //MFIFO active and not empty + if(vif1ch.chcr.STR == true && !(vif1.inprogress & 0x10)) CPU_INT(DMAC_MFIFO_VIF, 0); break; case NO_MFD: diff --git a/pcsx2/Vif1_MFIFO.cpp b/pcsx2/Vif1_MFIFO.cpp index 5f32aed7d7..e4feb0049a 100644 --- a/pcsx2/Vif1_MFIFO.cpp +++ b/pcsx2/Vif1_MFIFO.cpp @@ -183,7 +183,8 @@ void mfifoVIF1transfer(int qwc) SPR_LOG("Added %x qw to mfifo,Vif CHCR %x Stalled %x done %x", qwc, vif1ch.chcr._u32, vif1.vifstalled.enabled, vif1.done); if (vif1.inprogress & 0x10) { - if(vif1ch.chcr.STR == true && !(cpuRegs.interrupt & (1< 0 || !vif1.done) && !(vif1.inprogress & 0x10)) { + VIF_LOG("VIF1 MFIFO Stalled qwc = %x done = %x inprogress = %x", vif1ch.qwc,vif1.done, vif1.inprogress & 0x10); + //Used to check if the MFIFO was empty, there's really no need if it's finished what it needed. + if((vif1ch.qwc > 0 || !vif1.done)) { VIF_LOG("VIF1 MFIFO Stalled"); return; }