From 3c265b8ad0106c09cfcabf009fa5a5014d137995 Mon Sep 17 00:00:00 2001 From: luckyxxl Date: Fri, 12 Apr 2024 11:50:16 +0200 Subject: [PATCH] Add missing Indirect resource usage for indirect draw count buffers The buffer containing the `uint32` draw count value for indirect draws with count was not marked as used for the respective events for the following API calls: glMultiDrawArraysIndirectCount, glMultiDrawElementsIndirectCount, vkCmdDrawIndirectCount, vkCmdDrawIndexedIndirectCount, vkCmdDrawMeshTasksIndirectCountEXT. --- renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp | 16 ++++++++++++++++ .../driver/vulkan/wrappers/vk_draw_funcs.cpp | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp index b1ffcf4ba..30a0ce57d 100644 --- a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp @@ -3168,6 +3168,14 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCount(SerialiserType &ser EventUsage(m_CurEventID, ResourceUsage::Indirect)); } + { + GLuint buf = 0; + GL.glGetIntegerv(eGL_PARAMETER_BUFFER_BINDING, (GLint *)&buf); + + m_ResourceUses[GetResourceManager()->GetResID(BufferRes(GetCtx(), buf))].push_back( + EventUsage(m_CurEventID, ResourceUsage::Indirect)); + } + GLintptr offs = (GLintptr)offset; SDChunk *baseChunk = m_StructuredFile->chunks.back(); @@ -3404,6 +3412,14 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCount(SerialiserType &s EventUsage(m_CurEventID, ResourceUsage::Indirect)); } + { + GLuint buf = 0; + GL.glGetIntegerv(eGL_PARAMETER_BUFFER_BINDING, (GLint *)&buf); + + m_ResourceUses[GetResourceManager()->GetResID(BufferRes(GetCtx(), buf))].push_back( + EventUsage(m_CurEventID, ResourceUsage::Indirect)); + } + GLintptr offs = (GLintptr)offset; SDChunk *baseChunk = m_StructuredFile->chunks.back(); diff --git a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp index 6dff31751..f40379f3d 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp @@ -2999,6 +2999,8 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndirectCount(SerialiserType &ser, actionNode.resourceUsage.push_back(make_rdcpair( GetResID(buffer), EventUsage(actionNode.action.eventId, ResourceUsage::Indirect))); + actionNode.resourceUsage.push_back(make_rdcpair( + GetResID(countBuffer), EventUsage(actionNode.action.eventId, ResourceUsage::Indirect))); m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID++; @@ -3345,6 +3347,8 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndexedIndirectCount( actionNode.resourceUsage.push_back(make_rdcpair( GetResID(buffer), EventUsage(actionNode.action.eventId, ResourceUsage::Indirect))); + actionNode.resourceUsage.push_back(make_rdcpair( + GetResID(countBuffer), EventUsage(actionNode.action.eventId, ResourceUsage::Indirect))); m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID++; @@ -5121,6 +5125,8 @@ bool WrappedVulkan::Serialise_vkCmdDrawMeshTasksIndirectCountEXT( actionNode.resourceUsage.push_back(make_rdcpair( GetResID(buffer), EventUsage(actionNode.action.eventId, ResourceUsage::Indirect))); + actionNode.resourceUsage.push_back(make_rdcpair( + GetResID(countBuffer), EventUsage(actionNode.action.eventId, ResourceUsage::Indirect))); m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID++;