From b35b744ada29f5a336cc61a972dfec0405f7bdd4 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 3 Mar 2022 11:13:37 +0000 Subject: [PATCH] Verify captures are still present before showing them in connection * If the RenderDoc UI connects to a program, opens then deletes the captures, then closes and is opened again - we don't want to report those deleted captures as if they still exist. This now clears out any captures that no longer exist. --- renderdoc/core/core.cpp | 6 ++++++ renderdoc/core/core.h | 1 + renderdoc/core/target_control.cpp | 2 ++ 3 files changed, 9 insertions(+) diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index e69e2e6b1..4b819e855 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -1825,6 +1825,12 @@ void RenderDoc::AddChildThread(uint32_t pid, Threading::ThreadHandle thread) m_ChildThreads.push_back(make_rdcpair(pid, thread)); } +void RenderDoc::ValidateCaptures() +{ + SCOPED_LOCK(m_CaptureLock); + m_Captures.removeIf([](const CaptureData &cap) { return !FileIO::exists(cap.path); }); +} + rdcarray RenderDoc::GetCaptures() { SCOPED_LOCK(m_CaptureLock); diff --git a/renderdoc/core/core.h b/renderdoc/core/core.h index 20421c23a..0e918da43 100644 --- a/renderdoc/core/core.h +++ b/renderdoc/core/core.h @@ -453,6 +453,7 @@ public: void CompleteChildThread(uint32_t pid); void AddChildThread(uint32_t pid, Threading::ThreadHandle thread); + void ValidateCaptures(); rdcarray GetCaptures(); void MarkCaptureRetrieved(uint32_t idx); diff --git a/renderdoc/core/target_control.cpp b/renderdoc/core/target_control.cpp index dc369b7a1..04b96adf0 100644 --- a/renderdoc/core/target_control.cpp +++ b/renderdoc/core/target_control.cpp @@ -152,6 +152,8 @@ void RenderDoc::TargetControlClientThread(uint32_t version, Network::Socket *cli const int progresstime = 100; // update capture progress every 100ms int curtime = 0; + RenderDoc::Inst().ValidateCaptures(); + rdcarray captures; rdcarray > children; std::map drivers;