From 5f78ff2b5167cd3dfcd4d4888c942ab93c2a741b Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Tue, 17 Feb 2026 22:05:09 +0800 Subject: [PATCH] [Fix] (MG_Backend/DirectVulkan): set swapchain image layout at present --- .../DirectVulkan/Renderer/VulkanRenderer.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp index 4c4f4a93..7ff4685b 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp @@ -378,6 +378,9 @@ namespace MobileGL::MG_Backend::DirectVulkan { (!drawTargetsDefault && m_activeDrawFboExternalIndex != drawFboExternalIndex); if (activeTargetMismatch) { vkCmdEndRenderPass(frame.commandBuffer); + if (m_activeRenderTargetIsDefault) { + m_swapchainObject.SetImageLayout(m_imageIndexAcquired, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + } m_isMainRenderPassActive = false; m_activeRenderPass = VK_NULL_HANDLE; m_activeRenderExtent = {0, 0}; @@ -529,6 +532,9 @@ namespace MobileGL::MG_Backend::DirectVulkan { if (m_isMainRenderPassActive) { vkCmdEndRenderPass(frame.commandBuffer); + if (m_activeRenderTargetIsDefault) { + m_swapchainObject.SetImageLayout(m_imageIndexAcquired, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + } m_isMainRenderPassActive = false; m_activeRenderPass = VK_NULL_HANDLE; m_activeRenderExtent = {0, 0}; @@ -831,6 +837,9 @@ namespace MobileGL::MG_Backend::DirectVulkan { VkCommandBuffer commandBuffer = frame.commandBuffer; if (m_isMainRenderPassActive) { vkCmdEndRenderPass(commandBuffer); + if (m_activeRenderTargetIsDefault) { + m_swapchainObject.SetImageLayout(m_imageIndexAcquired, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + } m_isMainRenderPassActive = false; m_activeRenderPass = VK_NULL_HANDLE; m_activeRenderExtent = {0, 0}; @@ -972,6 +981,9 @@ namespace MobileGL::MG_Backend::DirectVulkan { if (m_isMainRenderPassActive) { vkCmdEndRenderPass(commandBuffer); + if (m_activeRenderTargetIsDefault) { + m_swapchainObject.SetImageLayout(m_imageIndexAcquired, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + } m_isMainRenderPassActive = false; m_activeRenderPass = VK_NULL_HANDLE; m_activeRenderExtent = {0, 0};