diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index b5487a21e..97c6625aa 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -996,6 +996,7 @@ void RendererVulkan::SwapBuffers() { void RendererVulkan::FlushBuffers() { vertex_buffer.Flush(); rasterizer->FlushBuffers(); + renderpass_cache.ExitRenderpass(); } void RendererVulkan::OnSlotSwitch() { diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index f13569056..b5425c118 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -844,8 +844,7 @@ bool RasterizerVulkan::Draw(bool accelerate, bool is_indexed) { } const vk::RenderPassBeginInfo renderpass_begin = { - .renderPass = renderpass_cache.GetRenderpass(pipeline_info.color_attachment, - pipeline_info.depth_attachment, false), + .renderPass = framebuffer_info.renderpass, .framebuffer = it->second, .renderArea = vk::Rect2D{.offset = {static_cast(draw_rect.left), static_cast(draw_rect.bottom)}, diff --git a/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp b/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp index a203fcac2..251d09022 100644 --- a/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp @@ -89,27 +89,27 @@ RenderpassCache::~RenderpassCache() { } void RenderpassCache::EnterRenderpass(const vk::RenderPassBeginInfo begin_info) { - if (active_renderpass == begin_info.renderPass) { + if (active_begin == begin_info) { return; } vk::CommandBuffer command_buffer = scheduler.GetRenderCommandBuffer(); - if (active_renderpass) { + if (active_begin.renderPass) { command_buffer.endRenderPass(); } command_buffer.beginRenderPass(begin_info, vk::SubpassContents::eInline); - active_renderpass = begin_info.renderPass; + active_begin = begin_info; } void RenderpassCache::ExitRenderpass() { - if (!active_renderpass) { + if (!active_begin.renderPass) { return; } vk::CommandBuffer command_buffer = scheduler.GetRenderCommandBuffer(); command_buffer.endRenderPass(); - active_renderpass = VK_NULL_HANDLE; + active_begin = vk::RenderPassBeginInfo{}; } void RenderpassCache::CreatePresentRenderpass(vk::Format format) { diff --git a/src/video_core/renderer_vulkan/vk_renderpass_cache.h b/src/video_core/renderer_vulkan/vk_renderpass_cache.h index 34670386a..8b4475619 100644 --- a/src/video_core/renderer_vulkan/vk_renderpass_cache.h +++ b/src/video_core/renderer_vulkan/vk_renderpass_cache.h @@ -39,7 +39,7 @@ public: /// Invalidates the currently active renderpass void OnSlotSwitch() { - active_renderpass = VK_NULL_HANDLE; + active_begin = vk::RenderPassBeginInfo{}; } private: @@ -52,7 +52,7 @@ private: const Instance& instance; TaskScheduler& scheduler; - vk::RenderPass active_renderpass = VK_NULL_HANDLE; + vk::RenderPassBeginInfo active_begin{}; vk::RenderPass present_renderpass{}; vk::RenderPass cached_renderpasses[MAX_COLOR_FORMATS + 1][MAX_DEPTH_FORMATS + 1][2]; };