diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index 364aeba61..2914616f8 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -1089,7 +1089,7 @@ struct ResourceInfo // for images this is a self pointer. For image views when we are using descriptor buffers we // can't alias the resInfo in each view's record because each view needs to track its own // descriptors - instead we point back to the image's resInfo here for sparse info. blech - ResourceInfo *parentResInfo; + ResourceInfo *parentResInfo = this; // for buffers, or for images when layouts can affect descriptors, the set of descriptors which // have already been serialised diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index 4f56d716c..75fa4a5ca 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -2896,7 +2896,6 @@ VkResult WrappedVulkan::vkCreateImage(VkDevice device, const VkImageCreateInfo * AddForcedReference(record); record->resInfo = new ResourceInfo(); - record->resInfo->parentResInfo = record->resInfo; ResourceInfo &resInfo = *record->resInfo; resInfo.imageInfo = ImageInfo(*pCreateInfo); @@ -3327,6 +3326,8 @@ VkResult WrappedVulkan::vkCreateImageView(VkDevice device, const VkImageViewCrea if(m_DescriptorBuffers) { record->resInfo = new ResourceInfo(*imageRecord->resInfo); + // use the image's resinfo for things like sparse records, we only duplicate for descriptor + // uniqueness tracking. record->resInfo->parentResInfo = imageRecord->resInfo; } else diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index fd75b5c3f..f0740061e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -327,7 +327,6 @@ VkResult WrappedVulkan::vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR record->AddParent(swaprecord); record->resInfo = new ResourceInfo(); - record->resInfo->parentResInfo = record->resInfo; record->resInfo->imageInfo = swaprecord->swapInfo->imageInfo; // note we add the chunk to the swap record, that way when the swapchain is created it will