diff --git a/rpcs3/Emu/RSX/GL/GLDraw.cpp b/rpcs3/Emu/RSX/GL/GLDraw.cpp index 9dc5adbb16..60bfc1c1e9 100644 --- a/rpcs3/Emu/RSX/GL/GLDraw.cpp +++ b/rpcs3/Emu/RSX/GL/GLDraw.cpp @@ -622,9 +622,17 @@ void GLGSRender::begin() rsx::thread::begin(); if (skip_current_frame || cond_render_ctrl.disable_rendering()) + { return; + } init_buffers(rsx::framebuffer_creation_context::context_draw); + + if (m_graphics_state & rsx::pipeline_state::invalidate_pipeline_bits) + { + // Shaders need to be reloaded. + m_program = nullptr; + } } void GLGSRender::end() diff --git a/rpcs3/Emu/RSX/VK/VKDraw.cpp b/rpcs3/Emu/RSX/VK/VKDraw.cpp index c8193dc213..11b5ed653d 100644 --- a/rpcs3/Emu/RSX/VK/VKDraw.cpp +++ b/rpcs3/Emu/RSX/VK/VKDraw.cpp @@ -896,10 +896,21 @@ void VKGSRender::begin() rsx::thread::begin(); - if (skip_current_frame || swapchain_unavailable || cond_render_ctrl.disable_rendering()) + if (skip_current_frame || + swapchain_unavailable || + cond_render_ctrl.disable_rendering()) + { return; + } init_buffers(rsx::framebuffer_creation_context::context_draw); + + if (m_graphics_state & rsx::pipeline_state::invalidate_pipeline_bits) + { + // Shaders need to be reloaded. + m_prev_program = m_program; + m_program = nullptr; + } } void VKGSRender::end() diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index f6db56b45e..7b493ac0cc 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -1731,7 +1731,6 @@ bool VKGSRender::load_program() auto &vertex_program = current_vertex_program; auto &fragment_program = current_fragment_program; - auto old_program = m_program; vk::pipeline_props properties{}; @@ -1929,7 +1928,7 @@ bool VKGSRender::load_program() if (!m_program && (shadermode == shader_mode::async_with_interpreter || shadermode == shader_mode::interpreter_only)) { - if (!m_shader_interpreter.is_interpreter(old_program)) + if (!m_shader_interpreter.is_interpreter(m_prev_program)) { m_interpreter_state = rsx::invalidate_pipeline_bits; } diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.h b/rpcs3/Emu/RSX/VK/VKGSRender.h index 8a3fc3e893..383d9f7d79 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.h +++ b/rpcs3/Emu/RSX/VK/VKGSRender.h @@ -63,6 +63,7 @@ private: const VKFragmentProgram *m_fragment_prog = nullptr; const VKVertexProgram *m_vertex_prog = nullptr; vk::glsl::program *m_program = nullptr; + vk::glsl::program *m_prev_program = nullptr; vk::pipeline_props m_pipeline_properties; vk::texture_cache m_texture_cache;