diff options
| author | Cort Stratton <cort@google.com> | 2017-05-04 15:18:52 -0700 |
|---|---|---|
| committer | Cort <cdwfs@users.noreply.github.com> | 2017-05-09 18:27:50 -0700 |
| commit | 754d46aeab41a0d991ec908355bb0e9299aa0758 (patch) | |
| tree | d4b420d133555e7842278d292068d50131cedce1 /layers/core_validation.cpp | |
| parent | b9fc19dbd6a4e5f2a079a5aa6a7efbcd1be4dedd (diff) | |
| download | usermoji-754d46aeab41a0d991ec908355bb0e9299aa0758.tar.xz | |
layers: Add vkCreateRenderPass subpass attachment VUs
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 1fb4b52d..feeb65ed 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -8834,6 +8834,7 @@ static bool ValidateRenderpassAttachmentUsage(layer_data *dev_data, const VkRend "CreateRenderPass: Pipeline bind point for subpass %d must be VK_PIPELINE_BIND_POINT_GRAPHICS. %s", i, validation_error_map[VALIDATION_ERROR_00347]); } + for (uint32_t j = 0; j < subpass.preserveAttachmentCount; ++j) { uint32_t attachment = subpass.pPreserveAttachments[j]; if (attachment == VK_ATTACHMENT_UNUSED) { @@ -8843,6 +8844,22 @@ static bool ValidateRenderpassAttachmentUsage(layer_data *dev_data, const VkRend validation_error_map[VALIDATION_ERROR_00356]); } else { skip |= ValidateAttachmentIndex(dev_data, attachment, pCreateInfo->attachmentCount, "Preserve"); + + bool found = (subpass.pDepthStencilAttachment != NULL && subpass.pDepthStencilAttachment->attachment == attachment); + for (uint32_t r = 0; !found && r < subpass.inputAttachmentCount; ++r) { + found = (subpass.pInputAttachments[r].attachment == attachment); + } + for (uint32_t r = 0; !found && r < subpass.colorAttachmentCount; ++r) { + found = (subpass.pColorAttachments[r].attachment == attachment) || + (subpass.pResolveAttachments != NULL && subpass.pResolveAttachments[r].attachment == attachment); + } + if (found) { + skip |= log_msg( + dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, + VALIDATION_ERROR_00357, "DS", + "CreateRenderPass: subpass %u pPreserveAttachments[%u] (%u) must not be used elsewhere in the subpass. %s", + i, j, attachment, validation_error_map[VALIDATION_ERROR_00357]); + } } } @@ -8861,6 +8878,7 @@ static bool ValidateRenderpassAttachmentUsage(layer_data *dev_data, const VkRend if (!skip && attachment != VK_ATTACHMENT_UNUSED && pCreateInfo->pAttachments[attachment].samples != VK_SAMPLE_COUNT_1_BIT) { + skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, VALIDATION_ERROR_00352, "DS", "CreateRenderPass: Subpass %u requests multisample resolve into attachment %u, " @@ -8868,6 +8886,15 @@ static bool ValidateRenderpassAttachmentUsage(layer_data *dev_data, const VkRend i, attachment, string_VkSampleCountFlagBits(pCreateInfo->pAttachments[attachment].samples), validation_error_map[VALIDATION_ERROR_00352]); } + + if (!skip && subpass.pResolveAttachments[j].attachment != VK_ATTACHMENT_UNUSED && + subpass.pColorAttachments[j].attachment == VK_ATTACHMENT_UNUSED) { + skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, + 0, __LINE__, VALIDATION_ERROR_00350, "DS", + "CreateRenderPass: Subpass %u requests multisample resolve from attachment %u " + "which has attachment=VK_ATTACHMENT_UNUSED. %s", + i, attachment, validation_error_map[VALIDATION_ERROR_00350]); + } } attachment = subpass.pColorAttachments[j].attachment; skip |= ValidateAttachmentIndex(dev_data, attachment, pCreateInfo->attachmentCount, "Color"); @@ -8882,6 +8909,19 @@ static bool ValidateRenderpassAttachmentUsage(layer_data *dev_data, const VkRend "which has VK_SAMPLE_COUNT_1_BIT. %s", i, attachment, validation_error_map[VALIDATION_ERROR_00351]); } + + if (subpass_performs_resolve && subpass.pResolveAttachments[j].attachment != VK_ATTACHMENT_UNUSED) { + const auto &color_desc = pCreateInfo->pAttachments[attachment]; + const auto &resolve_desc = pCreateInfo->pAttachments[subpass.pResolveAttachments[j].attachment]; + if (color_desc.format != resolve_desc.format) { + skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, VALIDATION_ERROR_00353, "DS", + "CreateRenderPass: Subpass %u pColorAttachments[%u] resolves to an attachment with a " + "different format. " + "color format: %u, resolve format: %u. %s", + i, j, color_desc.format, resolve_desc.format, validation_error_map[VALIDATION_ERROR_00353]); + } + } } } |
