diff --git a/rpcs3/Emu/RSX/VK/VKDraw.cpp b/rpcs3/Emu/RSX/VK/VKDraw.cpp index 739253cc03..59f9bfb40a 100644 --- a/rpcs3/Emu/RSX/VK/VKDraw.cpp +++ b/rpcs3/Emu/RSX/VK/VKDraw.cpp @@ -143,6 +143,17 @@ VkRenderPass VKGSRender::get_render_pass() return m_cached_renderpass; } +void VKGSRender::invalidate_render_pass() +{ + // Regenerate renderpass key for the next draw call + if (const auto key = vk::get_renderpass_key(m_fbo_images, m_current_renderpass_key); + key != m_current_renderpass_key) + { + m_current_renderpass_key = key; + m_cached_renderpass = VK_NULL_HANDLE; + } +} + void VKGSRender::update_draw_state() { m_profiler.start(); @@ -514,12 +525,7 @@ void VKGSRender::load_texture_env() if (check_for_cyclic_refs) { // Regenerate renderpass key - if (const auto key = vk::get_renderpass_key(m_fbo_images, m_current_renderpass_key); - key != m_current_renderpass_key) - { - m_current_renderpass_key = key; - m_cached_renderpass = VK_NULL_HANDLE; - } + invalidate_render_pass(); } if (backend_config.supports_asynchronous_compute) @@ -1069,6 +1075,9 @@ void VKGSRender::end() // Since we're ending the subpass, might as well restore DCC/HiZ for extra performance ds->change_layout(*m_current_command_buffer, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); ds->reset_surface_counters(); + + // Regenerate render pass key + invalidate_render_pass(); } } diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.h b/rpcs3/Emu/RSX/VK/VKGSRender.h index b0edaa48f6..aa62df2122 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.h +++ b/rpcs3/Emu/RSX/VK/VKGSRender.h @@ -227,6 +227,7 @@ private: void begin_render_pass(); void close_render_pass(); VkRenderPass get_render_pass(); + void invalidate_render_pass(); void update_draw_state(); void check_present_status();