From 485927ed0ddddfbc17ccc4909d739416b67ad1f2 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 9 Feb 2025 17:33:40 +0300 Subject: [PATCH] gl: Fix crash when launching multiple games with MSAA enabled --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 2 ++ rpcs3/Emu/RSX/GL/GLRenderTargets.cpp | 2 +- rpcs3/Emu/RSX/GL/GLResolveHelper.cpp | 8 ++++++++ rpcs3/Emu/RSX/GL/GLResolveHelper.h | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 0e352e3c9c..8e24cecf4f 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -4,6 +4,7 @@ #include "GLGSRender.h" #include "GLCompute.h" #include "GLDMA.h" +#include "GLResolveHelper.h" #include "Emu/Memory/vm_locking.h" #include "Emu/RSX/rsx_methods.h" @@ -429,6 +430,7 @@ void GLGSRender::on_exit() gl::destroy_compute_tasks(); gl::destroy_overlay_passes(); gl::clear_dma_resources(); + gl::clear_resolve_helpers(); gl::destroy_global_texture_resources(); diff --git a/rpcs3/Emu/RSX/GL/GLRenderTargets.cpp b/rpcs3/Emu/RSX/GL/GLRenderTargets.cpp index 09521bf28d..87e5ee5645 100644 --- a/rpcs3/Emu/RSX/GL/GLRenderTargets.cpp +++ b/rpcs3/Emu/RSX/GL/GLRenderTargets.cpp @@ -671,7 +671,7 @@ void gl::render_target::memory_barrier(gl::command_context& cmd, rsx::surface_ac } // MSAA support -gl::viewable_image* gl::render_target::get_resolve_target_safe(gl::command_context& cmd) +gl::viewable_image* gl::render_target::get_resolve_target_safe(gl::command_context& /*cmd*/) { if (!resolve_surface) { diff --git a/rpcs3/Emu/RSX/GL/GLResolveHelper.cpp b/rpcs3/Emu/RSX/GL/GLResolveHelper.cpp index 64779ec48a..62876aa6ba 100644 --- a/rpcs3/Emu/RSX/GL/GLResolveHelper.cpp +++ b/rpcs3/Emu/RSX/GL/GLResolveHelper.cpp @@ -10,6 +10,14 @@ namespace gl std::unordered_map> g_depth_resolvers; std::unordered_map> g_depth_unresolvers; + void clear_resolve_helpers() + { + g_resolve_helpers.clear(); + g_unresolve_helpers.clear(); + g_depth_resolvers.clear(); + g_depth_unresolvers.clear(); + } + static const char* get_format_string(gl::texture::internal_format format) { switch (format) diff --git a/rpcs3/Emu/RSX/GL/GLResolveHelper.h b/rpcs3/Emu/RSX/GL/GLResolveHelper.h index d3fbcf79fb..8799efbf25 100644 --- a/rpcs3/Emu/RSX/GL/GLResolveHelper.h +++ b/rpcs3/Emu/RSX/GL/GLResolveHelper.h @@ -7,6 +7,7 @@ namespace gl { void resolve_image(gl::command_context& cmd, gl::viewable_image* dst, gl::viewable_image* src); void unresolve_image(gl::command_context& cmd, gl::viewable_image* dst, gl::viewable_image* src); + void clear_resolve_helpers(); struct cs_resolve_base : compute_task {