aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2016-07-01 11:45:49 +1200
committerChris Forbes <chrisforbes@google.com>2016-07-01 12:02:31 +1200
commitb18697e25ba49b3e86264be6e4c837454358508c (patch)
tree52a9031d965bd20104fd622af2223810c44caf22 /layers/core_validation.cpp
parent3bca19296ac3001ebf1e787ed5d2945e6360aa10 (diff)
downloadusermoji-b18697e25ba49b3e86264be6e4c837454358508c.tar.xz
layers: Fix crash in ValidateDependencies with VK_ATTACHMENT_UNUSED
Signed-off-by: Chris Forbes <chrisforbes@google.com>
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp12
1 files changed, 10 insertions, 2 deletions
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);
}