From a05a8d457ed9db8c3e3632e759dcd867e3beef51 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 3 Dec 2014 11:53:11 +0000 Subject: [PATCH] Consider buffers that are bound to xfm feedback to be dirty --- .../driver/gl/wrappers/gl_buffer_funcs.cpp | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) 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) {