diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt index b93c5b1d8..f87d3a3ab 100644 --- a/renderdoc/CMakeLists.txt +++ b/renderdoc/CMakeLists.txt @@ -132,6 +132,7 @@ set(sources common/result.h common/shader_cache.h common/jobsystem.cpp + common/tex_data.h common/threading.h common/timing.h common/wrapped_pool.h diff --git a/renderdoc/common/dds_readwrite.cpp b/renderdoc/common/dds_readwrite.cpp index a99d49c38..8aa04b3ca 100644 --- a/renderdoc/common/dds_readwrite.cpp +++ b/renderdoc/common/dds_readwrite.cpp @@ -673,7 +673,7 @@ DXGI_FORMAT ResourceFormat2DXGIFormat(ResourceFormat format) return DXGI_FORMAT_UNKNOWN; } -RDResult write_dds_to_file(FILE *f, const write_dds_data &data) +RDResult write_dds_to_file(FILE *f, const write_tex_data &data) { if(!f) return RDResult(ResultCode::InvalidParameter, "Missing file handle writing DDS file"); @@ -961,7 +961,7 @@ bool is_dds_file(byte *headerBuffer, size_t size) return memcmp(headerBuffer, &dds_fourcc, 4) == 0; } -RDResult load_dds_from_file(StreamReader *reader, read_dds_data &ret) +RDResult load_dds_from_file(StreamReader *reader, read_tex_data &ret) { uint64_t fileSize = reader->GetSize(); diff --git a/renderdoc/common/dds_readwrite.h b/renderdoc/common/dds_readwrite.h index 7da295c0a..29542589e 100644 --- a/renderdoc/common/dds_readwrite.h +++ b/renderdoc/common/dds_readwrite.h @@ -25,36 +25,9 @@ #pragma once #include -#include "api/replay/data_types.h" #include "serialise/streamio.h" - -struct dds_data -{ - uint32_t width; - uint32_t height; - uint32_t depth; - - uint32_t mips; - uint32_t slices; - - bool cubemap; - - ResourceFormat format; -}; - -struct read_dds_data : public dds_data -{ - bytebuf buffer; - - // pairs of {offset, size} into above data buffer - rdcarray> subresources; -}; - -struct write_dds_data : public dds_data -{ - rdcarray subresources; -}; +#include "tex_data.h" extern bool is_dds_file(byte *headerBuffer, size_t size); -extern RDResult load_dds_from_file(StreamReader *reader, read_dds_data &data); -extern RDResult write_dds_to_file(FILE *f, const write_dds_data &data); +extern RDResult load_dds_from_file(StreamReader *reader, read_tex_data &data); +extern RDResult write_dds_to_file(FILE *f, const write_tex_data &data); diff --git a/renderdoc/common/tex_data.h b/renderdoc/common/tex_data.h new file mode 100644 index 000000000..0732a5ff7 --- /dev/null +++ b/renderdoc/common/tex_data.h @@ -0,0 +1,57 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2019-2024 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +#pragma once + +#include "api/replay/data_types.h" + +// Texture data for file reading/writing. Used in more complex cases +// than just a single image, e.g. DDS (can have arrays, mips) or EXR +// (can have mips). +struct tex_data +{ + uint32_t width; + uint32_t height; + uint32_t depth; + + uint32_t mips; + uint32_t slices; + + bool cubemap; + + ResourceFormat format; +}; + +struct read_tex_data : public tex_data +{ + bytebuf buffer; + + // pairs of {offset, size} into above data buffer + rdcarray> subresources; +}; + +struct write_tex_data : public tex_data +{ + rdcarray subresources; +}; diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 4c0d5223e..7b2d81745 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -395,7 +395,7 @@ public: void FileChanged() { RefreshFile(); } private: void RefreshFile(); - void CreateProxyTexture(TextureDescription &texDetails, read_dds_data &read_data); + void CreateProxyTexture(TextureDescription &texDetails, read_tex_data &read_data); APIProperties m_Props; FrameRecord m_FrameRecord; @@ -515,7 +515,7 @@ RDResult IMG_CreateReplayDevice(RDCFile *rdc, IReplayDriver **driver) { FileIO::fseek64(f, 0, SEEK_SET); StreamReader reader(f); - read_dds_data read_data = {}; + read_tex_data read_data = {}; RDResult res = load_dds_from_file(&reader, read_data); f = NULL; @@ -899,7 +899,7 @@ void ImageViewer::RefreshFile() m_FrameRecord.frameInfo.persistentSize = 0; m_FrameRecord.frameInfo.uncompressedFileSize = datasize; - read_dds_data read_data = {}; + read_tex_data read_data = {}; if(dds) { @@ -1003,7 +1003,7 @@ void ImageViewer::RefreshFile() FileIO::fclose(f); } -void ImageViewer::CreateProxyTexture(TextureDescription &texDetails, read_dds_data &read_data) +void ImageViewer::CreateProxyTexture(TextureDescription &texDetails, read_tex_data &read_data) { if(m_Proxy->IsTextureSupported(texDetails)) { diff --git a/renderdoc/os/win32/win32_shellext.cpp b/renderdoc/os/win32/win32_shellext.cpp index c14c2fdbc..51b319e55 100644 --- a/renderdoc/os/win32/win32_shellext.cpp +++ b/renderdoc/os/win32/win32_shellext.cpp @@ -54,7 +54,7 @@ struct RDCThumbnailProvider : public IThumbnailProvider, IInitializeWithStream unsigned int m_iRefcount; bool m_Inited; RDCThumb m_Thumb; - read_dds_data m_ddsData; + read_tex_data m_ddsData; RDCThumbnailProvider() : m_iRefcount(1), m_Inited(false) { InterlockedIncrement(&numProviders); } virtual ~RDCThumbnailProvider() { InterlockedDecrement(&numProviders); } diff --git a/renderdoc/renderdoc.vcxproj b/renderdoc/renderdoc.vcxproj index b83ae114a..dab1c43c3 100644 --- a/renderdoc/renderdoc.vcxproj +++ b/renderdoc/renderdoc.vcxproj @@ -202,6 +202,7 @@ + diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index 8f1c39d5f..0e060a6e7 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -570,6 +570,9 @@ Replay\Common + + Common\File Formats + diff --git a/renderdoc/replay/replay_controller.cpp b/renderdoc/replay/replay_controller.cpp index 2339cdff1..4f7b3a3a9 100644 --- a/renderdoc/replay/replay_controller.cpp +++ b/renderdoc/replay/replay_controller.cpp @@ -1226,7 +1226,7 @@ ResultDetails ReplayController::SaveTexture(const TextureSave &saveData, const r { if(sd.destType == FileType::DDS) { - write_dds_data ddsData; + write_tex_data ddsData; ResourceFormat saveFmt = td.format; // use typeCast to inform typeless saving, otherwise it will get lost