diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index eb0d69d4f..7c9f34e50 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -100,6 +100,9 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res) const ResourceInfo &resInfo = *im->record->resInfo; const ImageInfo &imageInfo = resInfo.imageInfo; + if(!GetResourceManager()->FindImgRefs(id)) + GetResourceManager()->AddImageFrameRefs(id, imageInfo); + if(resInfo.IsSparse()) { // if the image is sparse we have to do a different kind of initial state prepare, @@ -549,6 +552,9 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res) VkDeviceMemory datamem = ToHandle(res); VkDeviceSize datasize = record->Length; + if(!GetResourceManager()->FindMemRefs(id)) + GetResourceManager()->AddMemoryFrameRefs(id); + RDCASSERT(datamem != VK_NULL_HANDLE); RDCASSERT(record->Length > 0); diff --git a/renderdoc/driver/vulkan/vk_manager.cpp b/renderdoc/driver/vulkan/vk_manager.cpp index 1499fbd61..efcbef598 100644 --- a/renderdoc/driver/vulkan/vk_manager.cpp +++ b/renderdoc/driver/vulkan/vk_manager.cpp @@ -844,6 +844,16 @@ void VulkanResourceManager::MarkMemoryFrameReferenced(ResourceId mem, VkDeviceSi MarkResourceFrameReferenced(mem, maxRef, ComposeFrameRefsDisjoint); } +void VulkanResourceManager::AddMemoryFrameRefs(ResourceId mem) +{ + m_MemFrameRefs.insert({mem, MemRefs()}); +} + +void VulkanResourceManager::AddImageFrameRefs(ResourceId img, const ImageInfo &imageInfo) +{ + m_ImgFrameRefs.insert({img, ImgRefs(imageInfo)}); +} + void VulkanResourceManager::MergeReferencedImages(std::map &imgRefs) { for(auto j = imgRefs.begin(); j != imgRefs.end(); j++) diff --git a/renderdoc/driver/vulkan/vk_manager.h b/renderdoc/driver/vulkan/vk_manager.h index 2c27055ec..0692c68f7 100644 --- a/renderdoc/driver/vulkan/vk_manager.h +++ b/renderdoc/driver/vulkan/vk_manager.h @@ -432,6 +432,8 @@ public: FrameRefType refType); void MarkMemoryFrameReferenced(ResourceId mem, VkDeviceSize start, VkDeviceSize end, FrameRefType refType); + void AddMemoryFrameRefs(ResourceId mem); + void AddImageFrameRefs(ResourceId img, const ImageInfo &imageInfo); void MergeReferencedMemory(std::map &memRefs); void MergeReferencedImages(std::map &imgRefs);