diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index b1915e812..a508443a8 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -186,6 +186,12 @@ void WrappedOpenGL::glBindBuffer(GLenum target, GLuint buffer) m_FeedbackRecord->AddChunk(scope.Get()); } + + // immediately consider buffers bound to transform feedbacks as dirty + if(m_State == WRITING_IDLE && target == eGL_TRANSFORM_FEEDBACK_BUFFER) + { + GetResourceManager()->MarkDirtyResource(r->GetResourceID()); + } } } @@ -611,6 +617,12 @@ void WrappedOpenGL::glBindBufferBase(GLenum target, GLuint index, GLuint buffer) m_FeedbackRecord->AddChunk(scope.Get()); } + + // immediately consider buffers bound to transform feedbacks as dirty + if(m_State == WRITING_IDLE && target == eGL_TRANSFORM_FEEDBACK_BUFFER) + { + GetResourceManager()->MarkDirtyResource(BufferRes(GetCtx(), buffer)); + } if(m_State == WRITING_CAPFRAME) { @@ -671,6 +683,12 @@ void WrappedOpenGL::glBindBufferRange(GLenum target, GLuint index, GLuint buffer m_FeedbackRecord->AddChunk(scope.Get()); } + + // immediately consider buffers bound to transform feedbacks as dirty + if(m_State == WRITING_IDLE && target == eGL_TRANSFORM_FEEDBACK_BUFFER) + { + GetResourceManager()->MarkDirtyResource(BufferRes(GetCtx(), buffer)); + } if(m_State == WRITING_CAPFRAME) { @@ -744,6 +762,13 @@ void WrappedOpenGL::glBindBuffersBase(GLenum target, GLuint first, GLsizei count m_FeedbackRecord->AddChunk(scope.Get()); } } + + // immediately consider buffers bound to transform feedbacks as dirty + if(m_State == WRITING_IDLE && target == eGL_TRANSFORM_FEEDBACK_BUFFER) + { + for(int i=0; i < count; i++) + GetResourceManager()->MarkDirtyResource(BufferRes(GetCtx(), buffers[i])); + } if(m_State == WRITING_CAPFRAME) { @@ -829,6 +854,13 @@ void WrappedOpenGL::glBindBuffersRange(GLenum target, GLuint first, GLsizei coun m_FeedbackRecord->AddChunk(scope.Get()); } } + + // immediately consider buffers bound to transform feedbacks as dirty + if(m_State == WRITING_IDLE && target == eGL_TRANSFORM_FEEDBACK_BUFFER) + { + for(int i=0; i < count; i++) + GetResourceManager()->MarkDirtyResource(BufferRes(GetCtx(), buffers[i])); + } if(m_State == WRITING_CAPFRAME) {