From 3f5766950912c5338e622ee456e76cb17176cb8a Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 31 Mar 2026 14:44:09 +0100 Subject: [PATCH] Include parent command buffer flags in test for an active render pass If the parent command buffer was begun with VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT then that implies an active render pass to propagate to the child command buffer. Fixes incorrect error report in nested command buffers: "Executing a command buffer with RENDER_PASS_CONTINUE_BIT outside of render pass" --- renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index f481c9191..b87b18173 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -5482,8 +5482,12 @@ bool WrappedVulkan::Serialise_vkCmdExecuteCommands(SerialiserType &ser, VkComman parentCmdBufInfo.curEventID++; + bool parentActiveRenderPass = parentCmdBufInfo.state.ActiveRenderPass(); + parentActiveRenderPass |= + ((parentCmdBufInfo.beginFlags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) != 0); + // should we add framebuffer usage to the child draws. - bool framebufferUsage = parentCmdBufInfo.state.ActiveRenderPass(); + bool framebufferUsage = parentActiveRenderPass; for(uint32_t c = 0; c < commandBufferCount; c++) { @@ -5504,8 +5508,7 @@ bool WrappedVulkan::Serialise_vkCmdExecuteCommands(SerialiserType &ser, VkComman AddAction(marker); parentCmdBufInfo.curEventID++; - if(m_BakedCmdBufferInfo[m_LastCmdBufferID].state.GetRenderPass() == ResourceId() && - !m_BakedCmdBufferInfo[m_LastCmdBufferID].state.dynamicRendering.active && + if(!parentActiveRenderPass && (cmdBufInfo.beginFlags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)) { AddDebugMessage(