diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index d3ed3bc49..ce1dfdc6b 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -2825,16 +2825,26 @@ string ToStrHelper::Get(const VkPresentModeKHR &el) } // we know the object will be a non-dispatchable object type -#define SerialiseObject(type, name, obj) \ - { \ - VulkanResourceManager *rm = (VulkanResourceManager *)GetUserData(); \ - ResourceId id; \ - if(m_Mode >= WRITING) \ - id = GetResID(obj); \ - Serialise(name, id); \ - if(m_Mode < WRITING) \ - obj = (id == ResourceId() || !rm->HasLiveResource(id)) ? VK_NULL_HANDLE \ - : Unwrap(rm->GetLiveHandle(id)); \ +#define SerialiseObject(type, name, obj) \ + { \ + VulkanResourceManager *rm = (VulkanResourceManager *)GetUserData(); \ + ResourceId id; \ + if(m_Mode >= WRITING) \ + id = GetResID(obj); \ + Serialise(name, id); \ + if(m_Mode < WRITING) \ + { \ + obj = VK_NULL_HANDLE; \ + if(id != ResourceId()) \ + { \ + if(rm->HasLiveResource(id)) \ + obj = Unwrap(rm->GetLiveHandle(id)); \ + else \ + /* It can be OK for a resource to have no live equivalent if the \ + capture decided its not needed, which some APIs do fairly often. */ \ + RDCWARN("Capture may be missing reference to " #type " resource."); \ + } \ + } \ } static void SerialiseNext(Serialiser *ser, VkStructureType &sType, const void *&pNext) diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 7954ac21f..1c868a06b 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -650,6 +650,14 @@ VkResult WrappedVulkan::vkBeginCommandBuffer(VkCommandBuffer commandBuffer, record->AddChunk(scope.Get()); } + + if(pBeginInfo->pInheritanceInfo) + { + record->MarkResourceFrameReferenced(GetResID(pBeginInfo->pInheritanceInfo->renderPass), + eFrameRef_Read); + record->MarkResourceFrameReferenced(GetResID(pBeginInfo->pInheritanceInfo->framebuffer), + eFrameRef_Read); + } } VkCommandBufferInheritanceInfo unwrappedInfo;