diff --git a/Common/GPU/Vulkan/VulkanRenderManager.cpp b/Common/GPU/Vulkan/VulkanRenderManager.cpp index d86452e96a..1ad5442375 100644 --- a/Common/GPU/Vulkan/VulkanRenderManager.cpp +++ b/Common/GPU/Vulkan/VulkanRenderManager.cpp @@ -1383,6 +1383,7 @@ void VulkanRenderManager::Finish() { EndCurRenderStep(); // Let's do just a bit of cleanup on render commands now. + // TODO: Should look into removing this. for (auto &step : steps_) { if (step->stepType == VKRStepType::RENDER) { CleanupRenderCommands(&step->commands); diff --git a/GPU/Common/FramebufferManagerCommon.cpp b/GPU/Common/FramebufferManagerCommon.cpp index c50f59e94c..f705277f58 100644 --- a/GPU/Common/FramebufferManagerCommon.cpp +++ b/GPU/Common/FramebufferManagerCommon.cpp @@ -1547,6 +1547,7 @@ void FramebufferManagerCommon::CopyDisplayToOutput(bool reallyDirty) { // No framebuffer to display! Clear to black. if (useBufferedRendering_) { draw_->BindFramebufferAsRenderTarget(nullptr, { Draw::RPAction::CLEAR, Draw::RPAction::CLEAR, Draw::RPAction::CLEAR }, "CopyDisplayToOutput"); + presentation_->NotifyPresent(); } gstate_c.Dirty(DIRTY_VIEWPORTSCISSOR_STATE); return; diff --git a/GPU/Common/PresentationCommon.h b/GPU/Common/PresentationCommon.h index 21be2359b3..7e4877f11d 100644 --- a/GPU/Common/PresentationCommon.h +++ b/GPU/Common/PresentationCommon.h @@ -104,6 +104,10 @@ public: bool PresentedThisFrame() const { return presentedThisFrame_; } + void NotifyPresent() { + // Something else did the present, skipping PresentationCommon. + presentedThisFrame_ = true; + } void DeviceLost(); void DeviceRestore(Draw::DrawContext *draw); diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 2075fb3338..8b4adcde24 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -1342,13 +1342,13 @@ ScreenRenderFlags EmuScreen::render(ScreenRenderMode mode) { if (mode & ScreenRenderMode::TOP) { System_Notify(SystemNotification::KEEP_SCREEN_AWAKE); } else if (!Core_ShouldRunBehind() && strcmp(screenManager()->topScreen()->tag(), "DevMenu") != 0) { - // Not on top. Let's not execute, only draw the image. - draw->BindFramebufferAsRenderTarget(nullptr, { RPAction::CLEAR, RPAction::CLEAR, RPAction::CLEAR, }, "EmuScreen_Stepping"); // Just to make sure. if (PSP_IsInited() && !g_Config.bSkipBufferEffects) { PSP_BeginHostFrame(); gpu->CopyDisplayToOutput(true); PSP_EndHostFrame(); + } else { + draw->BindFramebufferAsRenderTarget(nullptr, { RPAction::CLEAR, RPAction::CLEAR, RPAction::CLEAR, }, "EmuScreen_Stepping"); } // Need to make sure the UI texture is available, for "darken". screenManager()->getUIContext()->BeginFrame();