diff --git a/renderdoc/driver/gl/gl_manager.cpp b/renderdoc/driver/gl/gl_manager.cpp index ace951ebe..a2ed1590c 100644 --- a/renderdoc/driver/gl/gl_manager.cpp +++ b/renderdoc/driver/gl/gl_manager.cpp @@ -837,7 +837,7 @@ void GLResourceManager::PrepareTextureInitialContents(ResourceId liveid, Resourc for(int trg = 0; trg < count; trg++) { - size_t size = GetCompressedByteSize(w, h, d, details.internalFormat, i); + size_t size = GetCompressedByteSize(w, h, d, details.internalFormat); byte *buf = new byte[size]; @@ -1150,7 +1150,7 @@ bool GLResourceManager::Serialise_InitialState(ResourceId resid, GLResource res) for(int trg = 0; trg < count; trg++) { - size_t size = GetCompressedByteSize(w, h, d, details.internalFormat, i); + size_t size = GetCompressedByteSize(w, h, d, details.internalFormat); byte *buf = new byte[size]; @@ -1317,7 +1317,7 @@ bool GLResourceManager::Serialise_InitialState(ResourceId resid, GLResource res) { if(isCompressed) { - GLsizei compSize = (GLsizei)GetCompressedByteSize(w, h, d, internalformat, m); + GLsizei compSize = (GLsizei)GetCompressedByteSize(w, h, d, internalformat); vector dummy; dummy.resize(compSize); @@ -1786,7 +1786,7 @@ void GLResourceManager::Apply_InitialState(GLResource live, InitialContentData i for(int trg = 0; trg < count; trg++) { - size_t size = GetCompressedByteSize(w, h, d, details.internalFormat, i); + size_t size = GetCompressedByteSize(w, h, d, details.internalFormat); if(details.curType == eGL_TEXTURE_CUBE_MAP) size /= 6; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 9df9385aa..826392681 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -712,9 +712,8 @@ void GLReplay::CacheTexture(ResourceId id) { if(compressed) { - gl.glGetTextureLevelParameterivEXT(res.resource.name, levelQueryType, m, - eGL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compressed); - tex.byteSize += compressed; + tex.byteSize += (uint64_t)GetCompressedByteSize( + RDCMAX(1U, tex.width >> m), RDCMAX(1U, tex.height >> m), 1, (GLenum)fmt); } else if(tex.format.special) { diff --git a/renderdoc/driver/gl/gl_resources.cpp b/renderdoc/driver/gl/gl_resources.cpp index 6a7a4426f..e57310c69 100644 --- a/renderdoc/driver/gl/gl_resources.cpp +++ b/renderdoc/driver/gl/gl_resources.cpp @@ -30,7 +30,7 @@ byte GLResourceRecord::markerValue[32] = { 0xaa, 0xbb, 0xcc, 0xdd, 0x88, 0x77, 0x66, 0x55, 0x01, 0x23, 0x45, 0x67, 0x98, 0x76, 0x54, 0x32, }; -size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalformat, int mip) +size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalformat) { if(!IsCompressedFormat(internalformat)) { diff --git a/renderdoc/driver/gl/gl_resources.h b/renderdoc/driver/gl/gl_resources.h index 5a826636e..383567166 100644 --- a/renderdoc/driver/gl/gl_resources.h +++ b/renderdoc/driver/gl/gl_resources.h @@ -30,7 +30,7 @@ struct GLHookSet; -size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalformat, int mip); +size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalformat); size_t GetByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum format, GLenum type); GLenum GetBaseFormat(GLenum internalFormat); GLenum GetDataType(GLenum internalFormat); diff --git a/renderdoc/driver/gl/wrappers/gl_emulated.cpp b/renderdoc/driver/gl/wrappers/gl_emulated.cpp index d12b661cf..fe3e31b47 100644 --- a/renderdoc/driver/gl/wrappers/gl_emulated.cpp +++ b/renderdoc/driver/gl/wrappers/gl_emulated.cpp @@ -1109,7 +1109,7 @@ void APIENTRY _glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLev count = 1; } - size_t size = GetCompressedByteSize(srcWidth, srcHeight, srcDepth, fmt, srcLevel); + size_t size = GetCompressedByteSize(srcWidth, srcHeight, srcDepth, fmt); if(srcTarget == eGL_TEXTURE_CUBE_MAP) size /= 6;