From 31d81147afcde6c1f070c192b0c5ddf3b032e71e Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 10 Dec 2014 20:56:42 +0000 Subject: [PATCH] Put glTexBuffer into frame record to preserve ordering * Important buffer chunks like the first glBindBuffer and glBufferStorage could happen in the frame, so need to preserve order between those and glTexBuffer. * It is only replayed in READING, so once at startup - not once per frame replay. --- .../driver/gl/wrappers/gl_texture_funcs.cpp | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp index b0856502a..4545337a3 100644 --- a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp @@ -4786,8 +4786,17 @@ void WrappedOpenGL::glTextureBufferEXT(GLuint texture, GLenum target, GLenum int SCOPED_SERIALISE_CONTEXT(TEXBUFFER); Serialise_glTextureBufferEXT(texture, target, internalformat, buffer); - record->AddChunk(scope.Get()); - record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + Chunk *chunk = scope.Get(); + + if(m_State == WRITING_CAPFRAME) + { + m_ContextRecord->AddChunk(chunk); + } + else + { + record->AddChunk(chunk); + record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + } } } @@ -4804,8 +4813,17 @@ void WrappedOpenGL::glTexBuffer(GLenum target, GLenum internalformat, GLuint buf Serialise_glTextureBufferEXT(record->Resource.name, target, internalformat, buffer); - record->AddChunk(scope.Get()); - record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + Chunk *chunk = scope.Get(); + + if(m_State == WRITING_CAPFRAME) + { + m_ContextRecord->AddChunk(chunk); + } + else + { + record->AddChunk(chunk); + record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + } } } @@ -4822,8 +4840,17 @@ void WrappedOpenGL::glMultiTexBufferEXT(GLenum texunit, GLenum target, GLenum in Serialise_glTextureBufferEXT(record->Resource.name, target, internalformat, buffer); - record->AddChunk(scope.Get()); - record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + Chunk *chunk = scope.Get(); + + if(m_State == WRITING_CAPFRAME) + { + m_ContextRecord->AddChunk(chunk); + } + else + { + record->AddChunk(chunk); + record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer))); + } } }