From 5e2717daec53e5b51517d3231fb6120bebbe6b7a Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 10 Mar 2017 16:28:55 +0000 Subject: [PATCH] Calculate compressed byte size per-mip, not always from top mip size --- renderdoc/driver/gl/gl_manager.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/gl/gl_manager.cpp b/renderdoc/driver/gl/gl_manager.cpp index 835707e7e..567d510d8 100644 --- a/renderdoc/driver/gl/gl_manager.cpp +++ b/renderdoc/driver/gl/gl_manager.cpp @@ -1191,6 +1191,10 @@ bool GLResourceManager::Serialise_InitialState(ResourceId resid, GLResource res) } else if(isCompressed) { + GLint w = details.width; + GLint h = details.height; + GLint d = details.depth; + for(int i = 0; i < mips; i++) { GLenum targets[] = { @@ -1209,8 +1213,7 @@ bool GLResourceManager::Serialise_InitialState(ResourceId resid, GLResource res) for(int trg = 0; trg < count; trg++) { - size_t size = GetCompressedByteSize(details.width, details.height, details.depth, - details.internalFormat, i); + size_t size = GetCompressedByteSize(w, h, d, details.internalFormat, i); byte *buf = new byte[size]; @@ -1220,6 +1223,13 @@ bool GLResourceManager::Serialise_InitialState(ResourceId resid, GLResource res) delete[] buf; } + + if(w > 0) + w = RDCMAX(1, w >> 1); + if(h > 0) + h = RDCMAX(1, h >> 1); + if(d > 0) + d = RDCMAX(1, d >> 1); } } else if(samples > 1)