diff --git a/pcsx2/Counters.cpp b/pcsx2/Counters.cpp index 3c78183389..f2db4ad1a5 100644 --- a/pcsx2/Counters.cpp +++ b/pcsx2/Counters.cpp @@ -216,11 +216,12 @@ static void vSyncInfoCalc(vSyncTimingInfo* info, double framesPerSecond, u32 sca // Dynasty Warriors 3 Xtreme Legends - fake save corruption when loading save // Jak II - random speedups // Shadow of Rome - FMV audio issues - const bool ntsc_hblank = gsVideoMode != GS_VideoMode::PAL && gsVideoMode == GS_VideoMode::DVD_PAL; + const bool ntsc_hblank = gsVideoMode != GS_VideoMode::PAL && gsVideoMode != GS_VideoMode::DVD_PAL; const u64 HalfFrame = Frame / 2; - const u64 Blank = Scanline * ((ntsc_hblank ? 22 : 25) + static_cast(!IsProgressiveVideoMode())); + const float extra_scanlines = static_cast(IsProgressiveVideoMode()) * (ntsc_hblank ? 0.5f : 1.5f); + const u64 Blank = Scanline * ((ntsc_hblank ? 22.5f : 24.5f) + extra_scanlines); const u64 Render = HalfFrame - Blank; - const u64 GSBlank = Scanline * (ntsc_hblank ? 3.5 : 3); // GS VBlank/CSR Swap happens roughly 3.5(NTSC) and 3(PAL) Scanlines after VBlank Start + const u64 GSBlank = Scanline * ((ntsc_hblank ? 3.5 : 3) + extra_scanlines); // GS VBlank/CSR Swap happens roughly 3.5(NTSC) and 3(PAL) Scanlines after VBlank Start // Important! The hRender/hBlank timers should be 50/50 for best results. // (this appears to be what the real EE's timing crystal does anyway)