From d00f8f940142b2a2a52fcd1d19fa44cd4bdf7abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 7 Jun 2025 17:43:18 +0200 Subject: [PATCH] Display: Don't clear display callback listeners when starting a new exec. Fixes https://github.com/RetroAchievements/RAIntegration/issues/1186 --- Core/HLE/sceDisplay.cpp | 3 +-- Core/HW/Display.cpp | 4 +++- Core/HW/Display.h | 1 + Core/System.cpp | 5 +++++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index bfe6268a9d..aa2258f35d 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -175,7 +175,7 @@ static void ScheduleLagSync(int over = 0) { void __DisplayInit() { __DisplaySetFramerate(); - DisplayHWInit(); + DisplayHWReset(); hasSetMode = false; mode = 0; resumeMode = 0; @@ -296,7 +296,6 @@ void __DisplayDoState(PointerWrap &p) { } void __DisplayShutdown() { - DisplayHWShutdown(); vblankWaitingThreads.clear(); } diff --git a/Core/HW/Display.cpp b/Core/HW/Display.cpp index 573297f37f..064a2b1cde 100644 --- a/Core/HW/Display.cpp +++ b/Core/HW/Display.cpp @@ -308,7 +308,7 @@ int DisplayCalculateFrameSkip() { return frameSkipNum; } -void DisplayHWInit() { +void DisplayHWReset() { frameStartTicks = 0; numVBlanks = 0; isVblank = 0; @@ -329,6 +329,8 @@ void DisplayHWInit() { lastFrameTimeHistory = 0.0; } +void DisplayHWInit() {} + void DisplayHWShutdown() { std::lock_guard guard(listenersLock); vblankListeners.clear(); diff --git a/Core/HW/Display.h b/Core/HW/Display.h index a76a474b94..4bc08c1a45 100644 --- a/Core/HW/Display.h +++ b/Core/HW/Display.h @@ -55,5 +55,6 @@ void DisplayFireActualFlip(); int DisplayCalculateFrameSkip(); void DisplayHWInit(); +void DisplayHWReset(); void DisplayHWShutdown(); void DisplayHWDoState(PointerWrap &p, int hleCompatV2); diff --git a/Core/System.cpp b/Core/System.cpp index ce6d64fa13..fdc439e380 100644 --- a/Core/System.cpp +++ b/Core/System.cpp @@ -54,6 +54,7 @@ #include "Core/HLE/Plugins.h" #include "Core/HLE/ReplaceTables.h" #include "Core/HLE/sceKernel.h" +#include "Core/HW/Display.h" #include "Core/Config.h" #include "Core/Core.h" #include "Core/CoreTiming.h" @@ -409,6 +410,8 @@ static bool CPU_Init(FileLoader *fileLoader, IdentifiedFileType type, std::strin CoreTiming::Init(); + DisplayHWInit(); + // Init all the HLE modules HLEInit(); @@ -496,6 +499,8 @@ void CPU_Shutdown(bool success) { __KernelShutdown(); HLEShutdown(); + DisplayHWShutdown(); + pspFileSystem.Shutdown(); mipsr4k.Shutdown(); Memory::Shutdown();