From 6d810f2ca1a8afbdf83b1708c3f1755c2733230b Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 27 Aug 2020 11:26:18 +0100 Subject: [PATCH] Fix naming getting muddled for indirect draws --- .../driver/vulkan/wrappers/vk_draw_funcs.cpp | 7 ++++--- .../driver/vulkan/wrappers/vk_queue_funcs.cpp | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp index 028050338..12313726a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp @@ -604,7 +604,7 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndirect(SerialiserType &ser, VkCommandBu m_IndirectBufferSize = RDCMAX(m_IndirectBufferSize, sizeof(VkDrawIndirectCommand) + (count > 0 ? count - 1 : 0) * stride); - rdcstr name = StringFormat::Fmt("vkCmdDrawIndirect(%u)", count); + rdcstr name = "vkCmdDrawIndirect"; if(!IsDrawInRenderPass()) { @@ -667,6 +667,7 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndirect(SerialiserType &ser, VkCommandBu if(count == 0) { draw.flags = DrawFlags::Drawcall | DrawFlags::Instanced | DrawFlags::Indirect; + draw.name += "(0)"; } AddEvent(); @@ -986,7 +987,7 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndexedIndirect(SerialiserType &ser, m_IndirectBufferSize = RDCMAX(m_IndirectBufferSize, sizeof(VkDrawIndexedIndirectCommand) + (count > 0 ? count - 1 : 0) * stride); - rdcstr name = StringFormat::Fmt("vkCmdDrawIndexedIndirect(%u)", count); + rdcstr name = "vkCmdDrawIndexedIndirect"; if(!IsDrawInRenderPass()) { @@ -1049,7 +1050,7 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndexedIndirect(SerialiserType &ser, if(count == 0) { - draw.name = name; + draw.name += "(0)"; draw.flags = DrawFlags::Drawcall | DrawFlags::Instanced | DrawFlags::Indexed | DrawFlags::Indirect; } diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index 84a75626e..0f76cc243 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -737,13 +737,14 @@ void WrappedVulkan::InsertDrawsAndRefreshIDs(BakedCmdBufferInfo &cmdBufInfo) n.draw.numIndices /= n.indirectPatch.stride; } + // if the actual draw count was greater than 1, display this as an indirect count + const char *countString = (n.indirectPatch.count > 1 ? "<1>" : "1"); + if(valid) - n.draw.name = - StringFormat::Fmt("%s(%u) => <%u, %u>", n.draw.name.c_str(), n.indirectPatch.count, - n.draw.numIndices, n.draw.numInstances); + n.draw.name = StringFormat::Fmt("%s(%s) => <%u, %u>", n.draw.name.c_str(), countString, + n.draw.numIndices, n.draw.numInstances); else - n.draw.name = - StringFormat::Fmt("%s(%u) => ", n.draw.name.c_str(), n.indirectPatch.count); + n.draw.name = StringFormat::Fmt("%s(%s) => ", n.draw.name.c_str(), countString); } else { @@ -751,11 +752,12 @@ void WrappedVulkan::InsertDrawsAndRefreshIDs(BakedCmdBufferInfo &cmdBufInfo) RDCASSERT(i + indirectCount < cmdBufNodes.size(), i, indirectCount, n.indirectPatch.count, cmdBufNodes.size()); - // if there was a count, patch that onto the root drawcall name + // patch the count onto the root drawcall name. The root is otherwise un-suffixed to allow + // for collapsing non-multidraws and making everything generally simpler if(hasCount) - { n.draw.name = StringFormat::Fmt("%s(<%u>)", n.draw.name.c_str(), indirectCount); - } + else + n.draw.name = StringFormat::Fmt("%s(%u)", n.draw.name.c_str(), n.indirectPatch.count); for(size_t j = 0; j < (size_t)indirectCount && i + j + 1 < cmdBufNodes.size(); j++) {