From 023cb57c6650b46015fd326e45bf85d8f303d254 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 5 May 2017 09:00:53 +0100 Subject: [PATCH] Work around nvidia driver bug with EXT_dsa access to VAO leaking state --- renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index ce304824c..99ad38455 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -3672,7 +3672,14 @@ bool WrappedOpenGL::Serialise_glEnableVertexArrayAttribEXT(GLuint vaobj, GLuint vaobj = m_FakeVAO; } + GLint prevVAO = 0; + m_Real.glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, &prevVAO); + m_Real.glEnableVertexArrayAttribEXT(vaobj, Index); + + // nvidia bug seems to sometimes change VAO binding in glEnableVertexArrayAttribEXT, although it + // seems like it only happens if GL_DEBUG_OUTPUT_SYNCHRONOUS is NOT enabled. + m_Real.glBindVertexArray(prevVAO); } return true; } @@ -3750,7 +3757,14 @@ bool WrappedOpenGL::Serialise_glDisableVertexArrayAttribEXT(GLuint vaobj, GLuint vaobj = m_FakeVAO; } + GLint prevVAO = 0; + m_Real.glGetIntegerv(eGL_VERTEX_ARRAY_BINDING, &prevVAO); + m_Real.glDisableVertexArrayAttribEXT(vaobj, Index); + + // nvidia bug seems to sometimes change VAO binding in glEnableVertexArrayAttribEXT, although it + // seems like it only happens if GL_DEBUG_OUTPUT_SYNCHRONOUS is NOT enabled. + m_Real.glBindVertexArray(prevVAO); } return true; }