diff --git a/pcsx2/Vif0_Dma.cpp b/pcsx2/Vif0_Dma.cpp index 4a52b4563e..26dc9f2598 100644 --- a/pcsx2/Vif0_Dma.cpp +++ b/pcsx2/Vif0_Dma.cpp @@ -137,8 +137,15 @@ __fi void vif0SetupTransfer() __fi void vif0VUFinish() { // Sync up VU0 so we don't errantly wait. - while (static_cast(cpuRegs.cycle - VU0.cycle) > 0 && (VU0.VI[REG_VPU_STAT].UL & 0x1)) + while (VU0.VI[REG_VPU_STAT].UL & 0x1) + { + const int cycle_diff = static_cast(cpuRegs.cycle - VU0.cycle); + + if ((EmuConfig.Gamefixes.VUSyncHack && cycle_diff < VU0.nextBlockCycles) || cycle_diff <= 0) + break; + CpuVU0->ExecuteBlock(); + } if (VU0.VI[REG_VPU_STAT].UL & 0x5) { diff --git a/pcsx2/Vif1_Dma.cpp b/pcsx2/Vif1_Dma.cpp index 33472892c8..73409bda7d 100644 --- a/pcsx2/Vif1_Dma.cpp +++ b/pcsx2/Vif1_Dma.cpp @@ -232,8 +232,15 @@ __fi void vif1SetupTransfer() __fi void vif1VUFinish() { // Sync up VU1 so we don't errantly wait. - while (!THREAD_VU1 && static_cast(cpuRegs.cycle - VU1.cycle) > 0 && (VU0.VI[REG_VPU_STAT].UL & 0x100)) + while (!THREAD_VU1 && (VU0.VI[REG_VPU_STAT].UL & 0x100)) + { + const int cycle_diff = static_cast(cpuRegs.cycle - VU1.cycle); + + if ((EmuConfig.Gamefixes.VUSyncHack && cycle_diff < VU1.nextBlockCycles) || cycle_diff <= 0) + break; + CpuVU1->ExecuteBlock(); + } if (VU0.VI[REG_VPU_STAT].UL & 0x500) {