From 165a7df6945c3af39a206de3637e7adb13f9b57b Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 20 Feb 2017 17:28:07 +0000 Subject: [PATCH] Fix eventID counting on glMultiDraw* --- .../driver/gl/wrappers/gl_draw_funcs.cpp | 56 +++++++------------ 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp index b8ecad04f..17bea32d1 100644 --- a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp @@ -1807,10 +1807,10 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first, m_DrawcallStack.push_back(&m_DrawcallStack.back()->children.back()); - m_CurEventID++; - for(uint32_t i = 0; i < Count; i++) { + m_CurEventID++; + FetchDrawcall multidraw; multidraw.numIndices = countArray[i]; multidraw.vertexOffset = firstArray[i]; @@ -1824,15 +1824,13 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first, AddEvent(desc); AddDrawcall(multidraw, true); - - m_CurEventID++; } m_DrawcallStack.pop_back(); } else { - m_CurEventID += Count + 1; + m_CurEventID += Count; } SAFE_DELETE_ARRAY(firstArray); @@ -1967,10 +1965,10 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co m_DrawcallStack.push_back(&m_DrawcallStack.back()->children.back()); - m_CurEventID++; - for(uint32_t i = 0; i < Count; i++) { + m_CurEventID++; + FetchDrawcall multidraw; multidraw.numIndices = countArray[i]; multidraw.indexOffset = (uint32_t)uint64_t(idxOffsArray[i]) & 0xFFFFFFFF; @@ -1987,15 +1985,13 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co AddEvent(desc); AddDrawcall(multidraw, true); - - m_CurEventID++; } m_DrawcallStack.pop_back(); } else { - m_CurEventID += Count + 1; + m_CurEventID += Count; } SAFE_DELETE_ARRAY(countArray); @@ -2133,10 +2129,10 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G m_DrawcallStack.push_back(&m_DrawcallStack.back()->children.back()); - m_CurEventID++; - for(uint32_t i = 0; i < Count; i++) { + m_CurEventID++; + FetchDrawcall multidraw; multidraw.numIndices = countArray[i]; multidraw.indexOffset = (uint32_t)uint64_t(idxOffsArray[i]) & 0xFFFFFFFF; @@ -2154,15 +2150,13 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G AddEvent(desc); AddDrawcall(multidraw, true); - - m_CurEventID++; } m_DrawcallStack.pop_back(); } else { - m_CurEventID += Count + 1; + m_CurEventID += Count; } SAFE_DELETE_ARRAY(countArray); @@ -2290,12 +2284,12 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void EventUsage(m_CurEventID, eUsage_Indirect)); } - m_CurEventID++; - GLintptr offs = (GLintptr)Offset; for(uint32_t i = 0; i < Count; i++) { + m_CurEventID++; + DrawArraysIndirectCommand params; m_Real.glGetBufferSubData(eGL_DRAW_INDIRECT_BUFFER, offs, sizeof(params), ¶ms); @@ -2321,15 +2315,13 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void AddEvent(desc); AddDrawcall(multidraw, true); - - m_CurEventID++; } m_DrawcallStack.pop_back(); } else { - m_CurEventID += Count + 1; + m_CurEventID += Count; } return true; @@ -2460,12 +2452,12 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty EventUsage(m_CurEventID, eUsage_Indirect)); } - m_CurEventID++; - GLintptr offs = (GLintptr)Offset; for(uint32_t i = 0; i < Count; i++) { + m_CurEventID++; + DrawElementsIndirectCommand params; m_Real.glGetBufferSubData(eGL_DRAW_INDIRECT_BUFFER, offs, sizeof(params), ¶ms); @@ -2493,15 +2485,13 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty AddEvent(desc); AddDrawcall(multidraw, true); - - m_CurEventID++; } m_DrawcallStack.pop_back(); } else { - m_CurEventID += Count + 1; + m_CurEventID += Count; } return true; @@ -2637,12 +2627,12 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi EventUsage(m_CurEventID, eUsage_Indirect)); } - m_CurEventID++; - GLintptr offs = (GLintptr)Offset; for(uint32_t i = 0; i < realdrawcount; i++) { + m_CurEventID++; + DrawArraysIndirectCommand params; m_Real.glGetBufferSubData(eGL_DRAW_INDIRECT_BUFFER, offs, sizeof(params), ¶ms); @@ -2668,15 +2658,13 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi AddEvent(desc); AddDrawcall(multidraw, true); - - m_CurEventID++; } m_DrawcallStack.pop_back(); } else { - m_CurEventID += realdrawcount + 1; + m_CurEventID += realdrawcount; } return true; @@ -2823,12 +2811,12 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G EventUsage(m_CurEventID, eUsage_Indirect)); } - m_CurEventID++; - GLintptr offs = (GLintptr)Offset; for(uint32_t i = 0; i < realdrawcount; i++) { + m_CurEventID++; + DrawElementsIndirectCommand params; m_Real.glGetBufferSubData(eGL_DRAW_INDIRECT_BUFFER, offs, sizeof(params), ¶ms); @@ -2856,15 +2844,13 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G AddEvent(desc); AddDrawcall(multidraw, true); - - m_CurEventID++; } m_DrawcallStack.pop_back(); } else { - m_CurEventID += realdrawcount + 1; + m_CurEventID += realdrawcount; } return true;