From d3e527f2a4e34d7bd8a899291b7f08fd01317218 Mon Sep 17 00:00:00 2001 From: TellowKrinkle Date: Tue, 25 Apr 2023 00:29:34 -0500 Subject: [PATCH] GS:MTL: Always end all encoders on FlushEncoders Previously, texture upload encoders weren't submitted if no rendering had been done, which would result in an assertion failure if the device was destroyed in that state, as the encoders would be released without calling `endEncoding` on them. --- pcsx2/GS/Renderers/Metal/GSDeviceMTL.mm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pcsx2/GS/Renderers/Metal/GSDeviceMTL.mm b/pcsx2/GS/Renderers/Metal/GSDeviceMTL.mm index be1c79ed84..bdb7c5222a 100644 --- a/pcsx2/GS/Renderers/Metal/GSDeviceMTL.mm +++ b/pcsx2/GS/Renderers/Metal/GSDeviceMTL.mm @@ -252,10 +252,12 @@ void GSDeviceMTL::DrawCommandBufferFinished(u64 draw, id buffe void GSDeviceMTL::FlushEncoders() { - if (!m_current_render_cmdbuf) - return; - EndRenderPass(); - Sync(m_vertex_upload_buf); + bool needs_submit = m_current_render_cmdbuf; + if (needs_submit) + { + EndRenderPass(); + Sync(m_vertex_upload_buf); + } if (m_dev.features.unified_memory) { ASSERT(!m_vertex_upload_cmdbuf && "Should never be used!"); @@ -274,6 +276,8 @@ void GSDeviceMTL::FlushEncoders() m_texture_upload_encoder = nil; m_texture_upload_cmdbuf = nil; } + if (!needs_submit) + return; if (m_late_texture_upload_encoder) { [m_late_texture_upload_encoder endEncoding];