diff --git a/renderdoc/api/replay/structured_data.h b/renderdoc/api/replay/structured_data.h index e6393afd1..f26a3160e 100644 --- a/renderdoc/api/replay/structured_data.h +++ b/renderdoc/api/replay/structured_data.h @@ -1043,6 +1043,13 @@ protected: } } + void Detach() + { + PopulateAllChildren(); + for(size_t i = 0; i < data.children.size(); i++) + data.children[i]->Detach(); + } + void PopulateAllChildren() const { if(m_Lazy) @@ -1087,6 +1094,9 @@ private: template friend void DoSerialise(SerialiserType &ser, SDObject &el, StructuredObjectList &children); + // SDFile should be a friend so it can detach + friend struct SDFile; + void DeleteLazyGenerator() const { if(m_Lazy) @@ -1653,6 +1663,15 @@ public: std::swap(version, other.version); } + DOCUMENT(R"(Prepares the SDFile to remove any possible dependencies on what +created it. +)"); + void Detach() + { + for(SDChunk *c : chunks) + c->Detach(); + } + protected: SDFile(const SDFile &) = delete; SDFile &operator=(const SDFile &) = delete; diff --git a/renderdoc/replay/dummy_driver.cpp b/renderdoc/replay/dummy_driver.cpp index b61450d74..8e0ad5ac9 100644 --- a/renderdoc/replay/dummy_driver.cpp +++ b/renderdoc/replay/dummy_driver.cpp @@ -44,6 +44,8 @@ DummyDriver::DummyDriver(IReplayDriver *original, const rdcarrayGetSupportedWindowSystems(); m_CustomEncodings = original->GetCustomShaderEncodings(); m_CustomPrefixes = original->GetCustomShaderSourcePrefixes(); + + sdfile->Detach(); } DummyDriver::~DummyDriver()