diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index b73178df4..189fb42ae 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -2570,6 +2570,9 @@ void WrappedVulkan::AddDrawcall(const FetchDrawcall &d, bool hasEvents) for(int i = 0; i < 8 && i < (int)colAtt.size(); i++) { + if(colAtt[i] == VK_ATTACHMENT_UNUSED) + continue; + RDCASSERT(colAtt[i] < atts.size()); draw.outputs[i] = atts[colAtt[i]].view; } @@ -2791,6 +2794,8 @@ void WrappedVulkan::AddUsage(VulkanDrawcallTreeNode &drawNode, vector WrappedVulkan::GetImplicitRenderPassBarriers(u // transition the attachments in this subpass for(size_t i = 0; i < rpinfo.subpasses[subpass].colorAttachments.size(); i++) { + uint32_t attIdx = rpinfo.subpasses[subpass].colorAttachments[i]; + + if(attIdx == VK_ATTACHMENT_UNUSED) + continue; + atts.push_back(VkAttachmentReference()); - atts.back().attachment = rpinfo.subpasses[subpass].colorAttachments[i]; + atts.back().attachment = attIdx; atts.back().layout = rpinfo.subpasses[subpass].colorLayouts[i]; } for(size_t i = 0; i < rpinfo.subpasses[subpass].inputAttachments.size(); i++) { + uint32_t attIdx = rpinfo.subpasses[subpass].inputAttachments[i]; + + if(attIdx == VK_ATTACHMENT_UNUSED) + continue; + atts.push_back(VkAttachmentReference()); - atts.back().attachment = rpinfo.subpasses[subpass].inputAttachments[i]; + atts.back().attachment = attIdx; atts.back().layout = rpinfo.subpasses[subpass].inputLayouts[i]; } diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index e6d173e0c..0717a0fe2 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -40,14 +40,20 @@ void WrappedVulkan::MakeSubpassLoadRP(VkRenderPassCreateInfo &info, // so that this RP doesn't perform any layout transitions for(uint32_t a = 0; a < sub->colorAttachmentCount; a++) { - att[sub->pColorAttachments[a].attachment].initialLayout = - att[sub->pColorAttachments[a].attachment].finalLayout = sub->pColorAttachments[a].layout; + if(sub->pColorAttachments[a].attachment != VK_ATTACHMENT_UNUSED) + { + att[sub->pColorAttachments[a].attachment].initialLayout = + att[sub->pColorAttachments[a].attachment].finalLayout = sub->pColorAttachments[a].layout; + } } for(uint32_t a = 0; a < sub->inputAttachmentCount; a++) { - att[sub->pInputAttachments[a].attachment].initialLayout = - att[sub->pInputAttachments[a].attachment].finalLayout = sub->pInputAttachments[a].layout; + if(sub->pInputAttachments[a].attachment != VK_ATTACHMENT_UNUSED) + { + att[sub->pInputAttachments[a].attachment].initialLayout = + att[sub->pInputAttachments[a].attachment].finalLayout = sub->pInputAttachments[a].layout; + } } if(sub->pDepthStencilAttachment && sub->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED)