diff --git a/renderdoc/api/replay/data_types.h b/renderdoc/api/replay/data_types.h index 4e0d74e70..40eebb609 100644 --- a/renderdoc/api/replay/data_types.h +++ b/renderdoc/api/replay/data_types.h @@ -293,7 +293,8 @@ struct FetchFrameInfo : frameNumber(0), firstEvent(0), fileOffset(0), - fileSize(0), + uncompressedFileSize(0), + compressedFileSize(0), persistentSize(0), initDataSize(0), captureTime(0) @@ -303,7 +304,8 @@ struct FetchFrameInfo uint32_t frameNumber; uint32_t firstEvent; uint64_t fileOffset; - uint64_t fileSize; + uint64_t uncompressedFileSize; + uint64_t compressedFileSize; uint64_t persistentSize; uint64_t initDataSize; uint64_t captureTime; diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 679ab9ea6..c642577b9 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -566,7 +566,7 @@ void ImageViewer::RefreshFile() m_FrameRecord.frameInfo.initDataSize = 0; m_FrameRecord.frameInfo.persistentSize = 0; - m_FrameRecord.frameInfo.fileSize = datasize; + m_FrameRecord.frameInfo.uncompressedFileSize = datasize; dds_data read_data = {0}; @@ -594,11 +594,13 @@ void ImageViewer::RefreshFile() if(texDetails.depth > 1) texDetails.dimension = 3; - m_FrameRecord.frameInfo.fileSize = 0; + m_FrameRecord.frameInfo.uncompressedFileSize = 0; for(uint32_t i = 0; i < texDetails.arraysize * texDetails.mips; i++) - m_FrameRecord.frameInfo.fileSize += read_data.subsizes[i]; + m_FrameRecord.frameInfo.uncompressedFileSize += read_data.subsizes[i]; } + m_FrameRecord.frameInfo.compressedFileSize = m_FrameRecord.frameInfo.uncompressedFileSize; + // recreate proxy texture if necessary. // we rewrite the texture IDs so that the // outside world doesn't need to know about this diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index c474e1832..d5e1721cc 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -1331,14 +1331,15 @@ void Serialiser::Serialise(const char *name, FetchFrameInfo &el) Serialise("", el.frameNumber); Serialise("", el.firstEvent); Serialise("", el.fileOffset); - Serialise("", el.fileSize); + Serialise("", el.uncompressedFileSize); + Serialise("", el.compressedFileSize); Serialise("", el.persistentSize); Serialise("", el.initDataSize); Serialise("", el.captureTime); Serialise("", el.stats); Serialise("", el.debugMessages); - SIZE_CHECK(FetchFrameInfo, 1200); + SIZE_CHECK(FetchFrameInfo, 1208); } template <> diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index b142d5f7d..594c51e5d 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -1151,7 +1151,8 @@ void WrappedID3D11Device::ReadLogInitialisation() } #endif - m_FrameRecord.frameInfo.fileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.uncompressedFileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.compressedFileSize = m_pSerialiser->GetFileSize(); m_FrameRecord.frameInfo.persistentSize = m_pSerialiser->GetSize() - frameOffset; m_FrameRecord.frameInfo.initDataSize = chunkInfos[(D3D11ChunkType)INITIAL_CONTENTS].totalsize; diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 5d1f8bbcb..c1bae1a78 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -2049,7 +2049,8 @@ void WrappedID3D12Device::ReadLogInitialisation() } #endif - m_FrameRecord.frameInfo.fileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.uncompressedFileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.compressedFileSize = m_pSerialiser->GetFileSize(); m_FrameRecord.frameInfo.persistentSize = m_pSerialiser->GetSize() - frameOffset; m_FrameRecord.frameInfo.initDataSize = chunkInfos[(D3D12ChunkType)INITIAL_CONTENTS].totalsize; diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 4e1bca952..6ba48d3eb 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -3101,7 +3101,8 @@ void WrappedOpenGL::ReadLogInitialisation() } #endif - m_FrameRecord.frameInfo.fileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.uncompressedFileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.compressedFileSize = m_pSerialiser->GetFileSize(); m_FrameRecord.frameInfo.persistentSize = m_pSerialiser->GetSize() - frameOffset; m_FrameRecord.frameInfo.initDataSize = chunkInfos[(GLChunkType)INITIAL_CONTENTS].totalsize; diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index b78fa9408..b51526879 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1504,7 +1504,8 @@ void WrappedVulkan::ReadLogInitialisation() } #endif - m_FrameRecord.frameInfo.fileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.uncompressedFileSize = m_pSerialiser->GetSize(); + m_FrameRecord.frameInfo.compressedFileSize = m_pSerialiser->GetFileSize(); m_FrameRecord.frameInfo.persistentSize = m_pSerialiser->GetSize() - firstFrame; m_FrameRecord.frameInfo.initDataSize = chunkInfos[(VulkanChunkType)INITIAL_CONTENTS].totalsize; diff --git a/renderdoc/serialise/serialiser.cpp b/renderdoc/serialise/serialiser.cpp index bad0259f0..d8ed5e026 100644 --- a/renderdoc/serialise/serialiser.cpp +++ b/renderdoc/serialise/serialiser.cpp @@ -453,6 +453,8 @@ Serialiser::Serialiser(size_t length, const byte *memoryBuf, bool fileheader) m_Mode = READING; m_DebugEnabled = false; + m_FileSize = 0; + if(!fileheader) { m_BufferSize = length; @@ -644,6 +646,8 @@ Serialiser::Serialiser(const char *path, Mode mode, bool debugMode) m_Mode = mode; m_DebugEnabled = debugMode; + m_FileSize = 0; + FileHeader header; if(mode == READING) @@ -658,6 +662,12 @@ Serialiser::Serialiser(const char *path, Mode mode, bool debugMode) return; } + FileIO::fseek64(m_ReadFileHandle, 0, SEEK_END); + + m_FileSize = FileIO::ftell64(m_ReadFileHandle); + + FileIO::fseek64(m_ReadFileHandle, 0, SEEK_SET); + RDCDEBUG("Opened capture file for read"); FileIO::fread(&header, 1, sizeof(FileHeader), m_ReadFileHandle); diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index 885562214..051ed5583 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -233,6 +233,14 @@ public: return m_BufferHead - m_Buffer; } + uint64_t GetFileSize() + { + if(m_Mode == READING) + return m_FileSize; + + return 0; + } + byte *GetRawPtr(size_t offs) const { return m_Buffer + offs; } // Set up the base pointer and size. Serialiser will allocate enough for // the rest of the file and keep it all in memory (useful to keep everything @@ -680,6 +688,8 @@ private: // m_ReadOffset into the frame capture section uint64_t m_ReadOffset; + uint64_t m_FileSize; + // how big is the current in-memory window size_t m_CurrentBufferSize; diff --git a/renderdocui/Interop/FetchInfo.cs b/renderdocui/Interop/FetchInfo.cs index a451b2235..0feb6f346 100644 --- a/renderdocui/Interop/FetchInfo.cs +++ b/renderdocui/Interop/FetchInfo.cs @@ -497,7 +497,8 @@ namespace renderdoc public UInt32 frameNumber; public UInt32 firstEvent; public UInt64 fileOffset; - public UInt64 fileSize; + public UInt64 uncompressedFileSize; + public UInt64 compressedFileSize; public UInt64 persistentSize; public UInt64 initDataSize; public UInt64 captureTime; diff --git a/renderdocui/Windows/StatisticsViewer.cs b/renderdocui/Windows/StatisticsViewer.cs index 4d7ec8d47..542b2f158 100644 --- a/renderdocui/Windows/StatisticsViewer.cs +++ b/renderdocui/Windows/StatisticsViewer.cs @@ -664,8 +664,6 @@ namespace renderdocui.Windows { statisticsLog.Clear(); - long fileSize = (new FileInfo(m_Core.LogFileName)).Length; - var lastDraw = m_Core.CurDrawcalls[m_Core.CurDrawcalls.Length - 1]; while (lastDraw.children != null && lastDraw.children.Length > 0) lastDraw = lastDraw.children[lastDraw.children.Length - 1]; @@ -739,8 +737,8 @@ namespace renderdocui.Windows UInt64 persistentData = frameInfo.persistentSize; - float compressedMB = (float)fileSize / (1024.0f * 1024.0f); - float uncompressedMB = (float)frameInfo.fileSize / (1024.0f * 1024.0f); + float compressedMB = (float)frameInfo.compressedFileSize / (1024.0f * 1024.0f); + float uncompressedMB = (float)frameInfo.uncompressedFileSize / (1024.0f * 1024.0f); float compressRatio = uncompressedMB / compressedMB; float persistentMB = (float)frameInfo.persistentSize / (1024.0f * 1024.0f); float initDataMB = (float)frameInfo.initDataSize / (1024.0f * 1024.0f);