From 4eeaaad75fc98d0c51ed22581693d042fef93c78 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 27 Aug 2020 11:26:03 +0100 Subject: [PATCH] Fix event counting for single vulkan indirect multidraws. Closes #2025 * We need to count the fake indirect subcommand *before* checking if we're in range, otherwise replaying up to but not including the draw will miscount and replay the draw itself. --- .../driver/vulkan/wrappers/vk_draw_funcs.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp index 52a3996ad..028050338 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp @@ -408,6 +408,10 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndirect(SerialiserType &ser, VkCommandBu { // for single draws, it's pretty simple + // account for the fake indirect subcommand before checking if we're in re-record range + if(count > 0) + m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID++; + if(InRerecordRange(m_LastCmdBufferID) && IsDrawInRenderPass()) { commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); @@ -424,10 +428,6 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndirect(SerialiserType &ser, VkCommandBu m_DrawcallCallback->PostRedraw(eventId, commandBuffer); } } - - // account for the fake indirect subcommand - if(count > 0) - m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID++; } else { @@ -785,6 +785,10 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndexedIndirect(SerialiserType &ser, { // for single draws, it's pretty simple + // account for the fake indirect subcommand before checking if we're in re-record range + if(count > 0) + m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID++; + if(InRerecordRange(m_LastCmdBufferID) && IsDrawInRenderPass()) { commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); @@ -802,10 +806,6 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndexedIndirect(SerialiserType &ser, m_DrawcallCallback->PostRedraw(eventId, commandBuffer); } } - - // account for the fake indirect subcommand - if(count > 0) - m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID++; } else {