aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorCort Stratton <cort@google.com>2017-05-04 15:18:52 -0700
committerCort <cdwfs@users.noreply.github.com>2017-05-09 18:27:50 -0700
commit754d46aeab41a0d991ec908355bb0e9299aa0758 (patch)
treed4b420d133555e7842278d292068d50131cedce1 /layers/core_validation.cpp
parentb9fc19dbd6a4e5f2a079a5aa6a7efbcd1be4dedd (diff)
downloadusermoji-754d46aeab41a0d991ec908355bb0e9299aa0758.tar.xz
layers: Add vkCreateRenderPass subpass attachment VUs
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp40
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]);
+ }
+ }
}
}