From a3cdece239662964679cbca529ca7f5053dc5831 Mon Sep 17 00:00:00 2001 From: Baldur Karlsson Date: Mon, 28 Jul 2014 11:27:51 +0100 Subject: [PATCH] Determine creationflags throughout initial read pass --- renderdoc/driver/gl/gl_driver.h | 3 ++- renderdoc/driver/gl/gl_replay.cpp | 6 ++---- .../driver/gl/wrappers/gl_framebuffer_funcs.cpp | 15 +++++++++++++++ renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp | 6 +++++- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 3ed80effc..0728f5b02 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -169,10 +169,11 @@ class WrappedOpenGL struct TextureData { - TextureData() : width(0), height(0), depth(0) {} + TextureData() : width(0), height(0), depth(0), creationFlags(0) {} GLResource resource; GLenum curType; GLint width, height, depth; + uint32_t creationFlags; }; map m_Textures; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 97fc3d971..264b739bc 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -451,14 +451,12 @@ FetchTexture GLReplay::GetTexture(ResourceId id) tex.name = widen(str); - tex.creationFlags = eTextureCreate_SRV; + tex.creationFlags = res.creationFlags; if(tex.format.compType == eCompType_Depth) tex.creationFlags |= eTextureCreate_DSV; - if(res.resource.name == gl.m_FakeBB_Color) + if(res.resource.name == gl.m_FakeBB_Color || res.resource.name == gl.m_FakeBB_DepthStencil) tex.creationFlags |= eTextureCreate_SwapBuffer; - GLNOTIMP("creationFlags are not calculated yet"); - tex.byteSize = 0; GLNOTIMP("Not calculating bytesize"); diff --git a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp index 1f7c9c133..03142617c 100644 --- a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp @@ -95,6 +95,11 @@ bool WrappedOpenGL::Serialise_glNamedFramebufferTextureEXT(GLuint framebuffer, G GLResource fbres = GetResourceManager()->GetLiveResource(fbid); glNamedFramebufferTextureEXT(fbres.name, Attach, res.name, Level); } + + if(m_State == READING) + { + m_Textures[GetResourceManager()->GetLiveID(id)].creationFlags |= eTextureCreate_RTV; + } } return true; @@ -166,6 +171,11 @@ bool WrappedOpenGL::Serialise_glNamedFramebufferTexture2DEXT(GLuint framebuffer, GLResource fbres = GetResourceManager()->GetLiveResource(fbid); glNamedFramebufferTexture2DEXT(fbres.name, Attach, TexTarget, res.name, Level); } + + if(m_State == READING) + { + m_Textures[GetResourceManager()->GetLiveID(id)].creationFlags |= eTextureCreate_RTV; + } } return true; @@ -237,6 +247,11 @@ bool WrappedOpenGL::Serialise_glNamedFramebufferTextureLayerEXT(GLuint framebuff GLResource fbres = GetResourceManager()->GetLiveResource(fbid); glNamedFramebufferTextureLayerEXT(fbres.name, Attach, res.name, Level, Layer); } + + if(m_State == READING) + { + m_Textures[GetResourceManager()->GetLiveID(id)].creationFlags |= eTextureCreate_RTV; + } } return true; diff --git a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp index a90211ab6..ac872e91e 100644 --- a/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_texture_funcs.cpp @@ -109,7 +109,11 @@ bool WrappedOpenGL::Serialise_glBindTexture(GLenum target, GLuint texture) GLResource res = GetResourceManager()->GetLiveResource(Id); m_Real.glBindTexture(Target, res.name); - m_Textures[GetResourceManager()->GetLiveID(Id)].curType = Target; + if(m_State == READING) + { + m_Textures[GetResourceManager()->GetLiveID(Id)].curType = Target; + m_Textures[GetResourceManager()->GetLiveID(Id)].creationFlags |= eTextureCreate_SRV; + } } }