From b18697e25ba49b3e86264be6e4c837454358508c Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Fri, 1 Jul 2016 11:45:49 +1200 Subject: layers: Fix crash in ValidateDependencies with VK_ATTACHMENT_UNUSED Signed-off-by: Chris Forbes --- layers/core_validation.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index d4875043..31cb5a1b 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -8653,6 +8653,8 @@ static bool ValidateDependencies(const layer_data *my_data, FRAMEBUFFER_NODE con attachmentIndices.clear(); for (uint32_t j = 0; j < subpass.inputAttachmentCount; ++j) { uint32_t attachment = subpass.pInputAttachments[j].attachment; + if (attachment == VK_ATTACHMENT_UNUSED) + continue; input_attachment_to_subpass[attachment].push_back(i); for (auto overlapping_attachment : overlapping_attachments[attachment]) { input_attachment_to_subpass[overlapping_attachment].push_back(i); @@ -8660,6 +8662,8 @@ static bool ValidateDependencies(const layer_data *my_data, FRAMEBUFFER_NODE con } for (uint32_t j = 0; j < subpass.colorAttachmentCount; ++j) { uint32_t attachment = subpass.pColorAttachments[j].attachment; + if (attachment == VK_ATTACHMENT_UNUSED) + continue; output_attachment_to_subpass[attachment].push_back(i); for (auto overlapping_attachment : overlapping_attachments[attachment]) { output_attachment_to_subpass[overlapping_attachment].push_back(i); @@ -8687,12 +8691,16 @@ static bool ValidateDependencies(const layer_data *my_data, FRAMEBUFFER_NODE con const VkSubpassDescription &subpass = pCreateInfo->pSubpasses[i]; // If the attachment is an input then all subpasses that output must have a dependency relationship for (uint32_t j = 0; j < subpass.inputAttachmentCount; ++j) { - const uint32_t &attachment = subpass.pInputAttachments[j].attachment; + uint32_t attachment = subpass.pInputAttachments[j].attachment; + if (attachment == VK_ATTACHMENT_UNUSED) + continue; CheckDependencyExists(my_data, i, output_attachment_to_subpass[attachment], subpass_to_node, skip_call); } // If the attachment is an output then all subpasses that use the attachment must have a dependency relationship for (uint32_t j = 0; j < subpass.colorAttachmentCount; ++j) { - const uint32_t &attachment = subpass.pColorAttachments[j].attachment; + uint32_t attachment = subpass.pColorAttachments[j].attachment; + if (attachment == VK_ATTACHMENT_UNUSED) + continue; CheckDependencyExists(my_data, i, output_attachment_to_subpass[attachment], subpass_to_node, skip_call); CheckDependencyExists(my_data, i, input_attachment_to_subpass[attachment], subpass_to_node, skip_call); } -- cgit v1.2.3