From 02eb10649d0621cfcc8a7557d25c6233bd966fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 18 Dec 2023 09:12:44 +0100 Subject: [PATCH] Improve checks --- GPU/GLES/GPU_GLES.cpp | 4 +++- Windows/GEDebugger/CtrlDisplayListView.cpp | 10 ++-------- Windows/GEDebugger/CtrlDisplayListView.h | 4 ++++ Windows/GEDebugger/GEDebugger.cpp | 2 ++ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index 113828d3b3..eed544a18d 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -248,7 +248,9 @@ void GPU_GLES::BeginHostFrame() { textureCache_->StartFrame(); // Save the cache from time to time. TODO: How often? We save on exit, so shouldn't need to do this all that often. - if (shaderCachePath_.Valid() && (gpuStats.numFlips & 32767) == 0 && coreState == CORE_RUNNING) { + + const int saveShaderCacheFrameInterval = 32767; // power of 2 - 1. About every 10 minutes at 60fps. + if (shaderCachePath_.Valid() && !(gpuStats.numFlips & saveShaderCacheFrameInterval) && coreState == CORE_RUNNING) { shaderManagerGL_->SaveCache(shaderCachePath_, &drawEngine_); } shaderManagerGL_->DirtyLastShader(); diff --git a/Windows/GEDebugger/CtrlDisplayListView.cpp b/Windows/GEDebugger/CtrlDisplayListView.cpp index 8af4ade2b6..7318beb808 100644 --- a/Windows/GEDebugger/CtrlDisplayListView.cpp +++ b/Windows/GEDebugger/CtrlDisplayListView.cpp @@ -279,7 +279,7 @@ void CtrlDisplayListView::PromptBreakpointCond() { void CtrlDisplayListView::onMouseDown(WPARAM wParam, LPARAM lParam, int button) { - if (!validDisplayList) { + if (!validDisplayList || !gpuDebug) { return; } @@ -310,7 +310,7 @@ void CtrlDisplayListView::onMouseDown(WPARAM wParam, LPARAM lParam, int button) void CtrlDisplayListView::onMouseUp(WPARAM wParam, LPARAM lParam, int button) { - if (!validDisplayList) { + if (!validDisplayList || !gpuDebug) { return; } @@ -319,12 +319,6 @@ void CtrlDisplayListView::onMouseUp(WPARAM wParam, LPARAM lParam, int button) HMENU menu = GetContextMenu(ContextMenuID::DISPLAYLISTVIEW); EnableMenuItem(menu, ID_GEDBG_SETCOND, GPUBreakpoints::IsAddressBreakpoint(curAddress) ? MF_ENABLED : MF_GRAYED); - // We don't want to let the users play with deallocated or uninitialized debugging objects - GlobalUIState state = GetUIState(); - if (state != UISTATE_INGAME && state != UISTATE_PAUSEMENU) { - return; - } - switch (TriggerContextMenu(ContextMenuID::DISPLAYLISTVIEW, wnd, ContextPoint::FromEvent(lParam))) { case ID_DISASM_GOTOINMEMORYVIEW: diff --git a/Windows/GEDebugger/CtrlDisplayListView.h b/Windows/GEDebugger/CtrlDisplayListView.h index 28adfdd371..47729b856c 100644 --- a/Windows/GEDebugger/CtrlDisplayListView.h +++ b/Windows/GEDebugger/CtrlDisplayListView.h @@ -56,6 +56,10 @@ public: list = displayList; gotoAddr(list.pc); } + void clearDisplayList() + { + validDisplayList = false; + } void scrollWindow(int lines) { diff --git a/Windows/GEDebugger/GEDebugger.cpp b/Windows/GEDebugger/GEDebugger.cpp index 869cd1be14..e33e882e6f 100644 --- a/Windows/GEDebugger/GEDebugger.cpp +++ b/Windows/GEDebugger/GEDebugger.cpp @@ -87,6 +87,8 @@ static void UpdateDisplayListTab(GEDebuggerTab *tab, TabControl *tabs, GETabPosi DisplayList list; if (gpuDebug != nullptr && gpuDebug->GetCurrentDisplayList(list)) { view->setDisplayList(list); + } else { + view->clearDisplayList(); } }