From c1c97e291bc0d43935650e6f4969663f2ad0c4f3 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 17 Dec 2014 18:29:55 +0000 Subject: [PATCH] When reading the frame don't fudge the current state * e.g. when binding a buffer we only want to protect the current state (so as not to mess anything up like VAOs) before we're reading the frame. --- renderdoc/driver/gl/gl_driver.cpp | 5 ++-- .../driver/gl/wrappers/gl_buffer_funcs.cpp | 6 ++-- .../driver/gl/wrappers/gl_texture_funcs.cpp | 28 +++++++++---------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index be73d2217..3128ecdba 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -411,8 +411,8 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs) m_DrawcallStack.push_back(&m_ParentDrawcall); - m_CurEventID = 1; - m_CurDrawcallID = 1; + m_CurEventID = 0; + m_CurDrawcallID = 0; m_FirstEventID = 0; m_LastEventID = ~0U; @@ -2528,6 +2528,7 @@ void WrappedOpenGL::ContextReplayLog(LogState readType, uint32_t startEventID, u else if(m_State == READING) { m_CurEventID = 1; + m_CurDrawcallID = 1; m_FirstEventID = 0; m_LastEventID = ~0U; } diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index 2f3ee64c1..576b57bae 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -104,7 +104,7 @@ bool WrappedOpenGL::Serialise_glBindBuffer(GLenum target, GLuint buffer) // if we're just reading, make sure not to trample state (e.g. element array buffer // binding in a VAO), since this is just a bind-to-create chunk. GLuint prevbuf = 0; - if(m_State == READING) + if(m_State == READING && m_CurEventID == 0) m_Real.glGetIntegerv(BufferBinding(Target), (GLint *)&prevbuf); GLResource res = GetResourceManager()->GetLiveResource(Id); @@ -112,7 +112,7 @@ bool WrappedOpenGL::Serialise_glBindBuffer(GLenum target, GLuint buffer) m_Buffers[GetResourceManager()->GetLiveID(Id)].curType = Target; - if(m_State == READING) + if(m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(Target, prevbuf); } } @@ -3006,7 +3006,7 @@ bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, c if(m_State <= EXECUTING) { - if(m_State == READING) + if(m_State == READING && m_CurEventID == 0) { if(vid != ResourceId()) { diff --git a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp index 3f764bff8..014f90900 100644 --- a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp @@ -3622,12 +3622,12 @@ bool WrappedOpenGL::Serialise_glTextureSubImage1DEXT(GLuint texture, GLenum targ if(m_State <= EXECUTING) { - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); m_Real.glTextureSubImage1DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, Width, Format, Type, buf ? buf : (const void *)bufoffs); - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); SAFE_DELETE_ARRAY(buf); @@ -3809,12 +3809,12 @@ bool WrappedOpenGL::Serialise_glTextureSubImage2DEXT(GLuint texture, GLenum targ if(m_State <= EXECUTING) { - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); m_Real.glTextureSubImage2DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, Width, Height, Format, Type, buf ? buf : (const void *)bufoffs); - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); SAFE_DELETE_ARRAY(buf); @@ -3998,12 +3998,12 @@ bool WrappedOpenGL::Serialise_glTextureSubImage3DEXT(GLuint texture, GLenum targ if(m_State <= EXECUTING) { - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); m_Real.glTextureSubImage3DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, zoff, Width, Height, Depth, Format, Type, buf ? buf : (const void *)bufoffs); - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); SAFE_DELETE_ARRAY(buf); @@ -4172,12 +4172,12 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage1DEXT(GLuint texture, G if(m_State <= EXECUTING) { - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); m_Real.glCompressedTextureSubImage1DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, Width, fmt, byteSize, buf ? buf : (const void *)bufoffs); - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); SAFE_DELETE_ARRAY(buf); @@ -4348,12 +4348,12 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage2DEXT(GLuint texture, G if(m_State <= EXECUTING) { - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); m_Real.glCompressedTextureSubImage2DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, Width, Height, fmt, byteSize, buf ? buf : (const void *)bufoffs); - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); SAFE_DELETE_ARRAY(buf); @@ -4526,12 +4526,12 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage3DEXT(GLuint texture, G if(m_State <= EXECUTING) { - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0); m_Real.glCompressedTextureSubImage3DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, zoff, Width, Height, Depth, fmt, byteSize, buf ? buf : (const void *)bufoffs); - if(!UnpackBufBound && m_State == READING) + if(!UnpackBufBound && m_State == READING && m_CurEventID == 0) m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf); SAFE_DELETE_ARRAY(buf); @@ -4695,7 +4695,7 @@ bool WrappedOpenGL::Serialise_glTextureBufferRangeEXT(GLuint texture, GLenum tar if(m_State < WRITING) { - if(m_State == READING) + if(m_State == READING && m_CurEventID == 0) { ResourceId liveId = GetResourceManager()->GetLiveID(texid); m_Textures[liveId].width = uint32_t(Size)/uint32_t(GetByteSize(1, 1, 1, GetBaseFormat(fmt), GetDataType(fmt), 1)); @@ -4774,7 +4774,7 @@ bool WrappedOpenGL::Serialise_glTextureBufferEXT(GLuint texture, GLenum target, { buffer = GetResourceManager()->GetLiveResource(bufid).name; - if(m_State == READING) + if(m_State == READING && m_CurEventID == 0) { ResourceId liveId = GetResourceManager()->GetLiveID(texid); uint32_t Size = 1;