From 4e4b9e21ad66aef4b25855360e055f3542da0dbb Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 12 Sep 2016 14:15:06 +0200 Subject: [PATCH] Fix a crash with vulkan shader edit & replace --- renderdoc/core/resource_manager.h | 9 +++++++++ renderdoc/driver/vulkan/vk_debug.cpp | 3 +++ 2 files changed, 12 insertions(+) diff --git a/renderdoc/core/resource_manager.h b/renderdoc/core/resource_manager.h index c347aee08..4d4087ba5 100644 --- a/renderdoc/core/resource_manager.h +++ b/renderdoc/core/resource_manager.h @@ -398,6 +398,7 @@ public: // when asked for a given id, return the resource for a replacement id void ReplaceResource(ResourceId from, ResourceId to); + bool HasReplacement(ResourceId from); void RemoveReplacement(ResourceId id); // fetch original ID for a real ID or vice-versa. @@ -1121,6 +1122,14 @@ void ResourceManager::Replace m_Replacements[from] = to; } +template +bool ResourceManager::HasReplacement(ResourceId from) +{ + SCOPED_LOCK(m_Lock); + + return m_Replacements.find(from) != m_Replacements.end(); +} + template void ResourceManager::RemoveReplacement(ResourceId id) { diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index da55092c8..c828c9884 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -2458,6 +2458,9 @@ void VulkanDebugManager::RemoveReplacement(ResourceId id) // we're passed in the original ID but we want the live ID for comparison ResourceId liveid = GetResourceManager()->GetLiveID(id); + if(!GetResourceManager()->HasReplacement(id)) + return; + // remove the actual shader module replacements GetResourceManager()->RemoveReplacement(id); GetResourceManager()->RemoveReplacement(liveid);