diff --git a/Source/Core/VideoBackends/Metal/MTLStateTracker.mm b/Source/Core/VideoBackends/Metal/MTLStateTracker.mm index f4d5634636..a9fb4e63fb 100644 --- a/Source/Core/VideoBackends/Metal/MTLStateTracker.mm +++ b/Source/Core/VideoBackends/Metal/MTLStateTracker.mm @@ -383,11 +383,14 @@ void Metal::StateTracker::EndRenderPass() void Metal::StateTracker::FlushEncoders() { - if (!m_current_render_cmdbuf) - return; - EndRenderPass(); - for (int i = 0; i <= static_cast(UploadBuffer::Last); ++i) - Sync(m_upload_buffers[i]); + const bool needs_submit = m_current_render_cmdbuf; + if (needs_submit) + { + EndRenderPass(); + for (int i = 0; i <= static_cast(UploadBuffer::Last); ++i) + Sync(m_upload_buffers[i]); + } + if (!m_manual_buffer_upload) { ASSERT(!m_upload_cmdbuf && "Should never be used!"); @@ -407,6 +410,10 @@ void Metal::StateTracker::FlushEncoders() m_texture_upload_encoder = nullptr; m_texture_upload_cmdbuf = nullptr; } + + if (!needs_submit) + return; + [m_current_render_cmdbuf addCompletedHandler:[backref = m_backref, draw = m_current_draw, q = std::move(m_current_perf_query)](id buf) {