From 78257a1fd98de02e9e2990404c7d5fd26d5d769e Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 Dec 2014 22:08:58 +0000 Subject: [PATCH] Track if transform feedback is active, and ensure we deactivate --- renderdoc/driver/gl/gl_driver.cpp | 7 +++++++ renderdoc/driver/gl/gl_driver.h | 1 + renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 0fba23b4d..35cd79e2f 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -370,6 +370,7 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs) RDCEraseEl(m_ActiveQueries); m_ActiveConditional = false; + m_ActiveFeedback = false; m_LastIndexSize = eGL_NONE; m_LastIndexOffset = 0; @@ -2376,6 +2377,12 @@ void WrappedOpenGL::ContextReplayLog(LogState readType, uint32_t startEventID, u m_Real.glEndConditionalRender(); m_ActiveConditional = false; } + + if(m_ActiveFeedback) + { + m_Real.glEndTransformFeedback(); + m_ActiveFeedback = false; + } } GetResourceManager()->MarkInFrame(true); diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index b27d6c05f..5ba4c3b1b 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -119,6 +119,7 @@ class WrappedOpenGL GLResourceRecord *m_ReadFramebufferRecord; bool m_ActiveQueries[8][8]; // first index type, second index (for some, always 0) bool m_ActiveConditional; + bool m_ActiveFeedback; ResourceId m_Renderbuffer; GLint m_TextureUnit; GLuint m_ProgramPipeline; diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index bf237a560..7d94169fc 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -1453,6 +1453,7 @@ bool WrappedOpenGL::Serialise_glBeginTransformFeedback(GLenum primitiveMode) if(m_State <= EXECUTING) { m_Real.glBeginTransformFeedback(Mode); + m_ActiveFeedback = true; } return true; @@ -1461,6 +1462,7 @@ bool WrappedOpenGL::Serialise_glBeginTransformFeedback(GLenum primitiveMode) void WrappedOpenGL::glBeginTransformFeedback(GLenum primitiveMode) { m_Real.glBeginTransformFeedback(primitiveMode); + m_ActiveFeedback = true; if(m_State == WRITING_CAPFRAME) { @@ -1522,6 +1524,7 @@ bool WrappedOpenGL::Serialise_glEndTransformFeedback() if(m_State <= EXECUTING) { m_Real.glEndTransformFeedback(); + m_ActiveFeedback = false; } return true; @@ -1530,6 +1533,7 @@ bool WrappedOpenGL::Serialise_glEndTransformFeedback() void WrappedOpenGL::glEndTransformFeedback() { m_Real.glEndTransformFeedback(); + m_ActiveFeedback = false; if(m_State == WRITING_CAPFRAME) {