From 533080ede057a470068c7380272e02c67834347f Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 11 Jan 2017 21:32:40 +0000 Subject: [PATCH] Check for relevant extensions or core versions for resource dirtying --- renderdoc/driver/gl/gl_renderstate.cpp | 63 ++++++++++++++++---------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 1a4aab6b9..032766b7e 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -397,48 +397,61 @@ void GLRenderState::MarkDirty(WrappedOpenGL *gl) void *ctx = gl->GetCtx(); GLint maxCount = 0; - m_Real->glGetIntegerv(eGL_MAX_IMAGE_UNITS, &maxCount); - GLuint name = 0; - for(GLint i = 0; i < maxCount; i++) { - name = 0; + m_Real->glGetIntegerv(eGL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxCount); - m_Real->glGetIntegeri_v(eGL_IMAGE_BINDING_NAME, i, (GLint *)&name); + for(GLint i = 0; i < maxCount; i++) + { + name = 0; + m_Real->glGetIntegeri_v(eGL_TRANSFORM_FEEDBACK_BUFFER_BINDING, i, (GLint *)&name); - if(name) - manager->MarkDirtyResource(TextureRes(ctx, name)); + if(name) + manager->MarkDirtyResource(BufferRes(ctx, name)); + } } - m_Real->glGetIntegerv(eGL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxCount); - - for(GLint i = 0; i < maxCount; i++) + if(GLCoreVersion >= 42 || ExtensionSupported[GLExt_ARB_image_load_store]) { - m_Real->glGetIntegeri_v(eGL_TRANSFORM_FEEDBACK_BUFFER_BINDING, i, (GLint *)&name); + m_Real->glGetIntegerv(eGL_MAX_IMAGE_UNITS, &maxCount); - if(name) - manager->MarkDirtyResource(BufferRes(ctx, name)); + for(GLint i = 0; i < maxCount; i++) + { + name = 0; + m_Real->glGetIntegeri_v(eGL_IMAGE_BINDING_NAME, i, (GLint *)&name); + + if(name) + manager->MarkDirtyResource(TextureRes(ctx, name)); + } } - m_Real->glGetIntegerv(eGL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &maxCount); - - for(GLint i = 0; i < maxCount; i++) + if(GLCoreVersion >= 42 || ExtensionSupported[GLExt_ARB_shader_atomic_counters]) { - m_Real->glGetIntegeri_v(eGL_ATOMIC_COUNTER_BUFFER_BINDING, i, (GLint *)&name); + m_Real->glGetIntegerv(eGL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &maxCount); - if(name) - manager->MarkDirtyResource(BufferRes(ctx, name)); + for(GLint i = 0; i < maxCount; i++) + { + name = 0; + m_Real->glGetIntegeri_v(eGL_ATOMIC_COUNTER_BUFFER_BINDING, i, (GLint *)&name); + + if(name) + manager->MarkDirtyResource(BufferRes(ctx, name)); + } } - m_Real->glGetIntegerv(eGL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, &maxCount); - - for(GLint i = 0; i < maxCount; i++) + if(GLCoreVersion >= 43 || ExtensionSupported[GLExt_ARB_shader_storage_buffer_object]) { - m_Real->glGetIntegeri_v(eGL_SHADER_STORAGE_BUFFER_BINDING, i, (GLint *)&name); + m_Real->glGetIntegerv(eGL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, &maxCount); - if(name) - manager->MarkDirtyResource(BufferRes(ctx, name)); + for(GLint i = 0; i < maxCount; i++) + { + name = 0; + m_Real->glGetIntegeri_v(eGL_SHADER_STORAGE_BUFFER_BINDING, i, (GLint *)&name); + + if(name) + manager->MarkDirtyResource(BufferRes(ctx, name)); + } } m_Real->glGetIntegerv(eGL_MAX_COLOR_ATTACHMENTS, &maxCount);