diff --git a/renderdoc/driver/vulkan/vk_image_states.cpp b/renderdoc/driver/vulkan/vk_image_states.cpp index 57faf56dc..79417ddea 100644 --- a/renderdoc/driver/vulkan/vk_image_states.cpp +++ b/renderdoc/driver/vulkan/vk_image_states.cpp @@ -1271,8 +1271,9 @@ void ImageState::Transition(const ImageState &dstState, VkAccessFlags srcAccessM { ImageSubresourceState srcSub; - // ignore transitions of subresources that were untouched - if(it->state() == ImageSubresourceState()) + // ignore transitions of subresources that were untouched if this isn't the *canonical* image + // state, but just an overlay tracking changes within a command buffer + if(it->state() == ImageSubresourceState() && m_Overlay) continue; if(!it->state().Update(dstSub, srcSub, info.GetFrameRefCompFunc())) diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index fba59d303..ef20699d4 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -1700,6 +1700,7 @@ struct ImageState rdcarray oldQueueFamilyTransfers; rdcarray newQueueFamilyTransfers; bool isMemoryBound = false; + bool m_Overlay = false; ResourceId boundMemory = ResourceId(); VkDeviceSize boundMemoryOffset = 0ull; VkDeviceSize boundMemorySize = 0ull; @@ -1712,6 +1713,7 @@ struct ImageState : wrappedHandle(wrappedHandle), subresourceStates(imageInfo, refType), maxRefType(refType) { } + void SetOverlay() { m_Overlay = true; } ImageState InitialState() const; void InitialState(ImageState &result) const; ImageState CommandBufferInitialState() const; diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index db7b0fa8e..c67ce8730 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -1164,6 +1164,7 @@ bool WrappedVulkan::Serialise_vkEndCommandBuffer(SerialiserType &ser, VkCommandB { ResourceId id = it->first; ImageState &endState = it->second; + endState.SetOverlay(); LockedConstImageStateRef current = FindConstImageState(id); if(!current) {