layers: CmdClearAttachments colorAttachment is index into subpass
authorChris Forbes <chrisforbes@google.com>
Thu, 8 Sep 2016 03:25:24 +0000 (15:25 +1200)
committerChris Forbes <chrisforbes@google.com>
Fri, 9 Sep 2016 02:55:31 +0000 (14:55 +1200)
We were previously treating this as being an index into the renderpass
attachment descriptions, but that's nonsense. It's also well-defined
what happens if an out-of-range index is provided, so downgrade to a
warning.

Signed-off-by: Chris Forbes <chrisforbes@google.com>
layers/core_validation.cpp
tests/layer_validation_tests.cpp

index 8b5e9f6..b25eea8 100644 (file)
@@ -8102,18 +8102,11 @@ VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(VkCommandBuffer commandBuffer, ui
         for (uint32_t attachment_idx = 0; attachment_idx < attachmentCount; attachment_idx++) {
             const VkClearAttachment *attachment = &pAttachments[attachment_idx];
             if (attachment->aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) {
-                bool found = false;
-                for (uint32_t i = 0; i < pSD->colorAttachmentCount; i++) {
-                    if (attachment->colorAttachment == pSD->pColorAttachments[i].attachment) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found) {
+                if (attachment->colorAttachment >= pSD->colorAttachmentCount) {
                     skip_call |= log_msg(
-                        dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+                        dev_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
                         (uint64_t)commandBuffer, __LINE__, DRAWSTATE_MISSING_ATTACHMENT_REFERENCE, "DS",
-                        "vkCmdClearAttachments() attachment index %d not found in attachment reference array of active subpass %d",
+                        "vkCmdClearAttachments() color attachment index %d out of range for active subpass %d; ignored",
                         attachment->colorAttachment, pCB->activeSubpass);
                 }
             } else if (attachment->aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
index 579f8ed..ce584de 100644 (file)
@@ -11756,9 +11756,8 @@ TEST_F(VkLayerTest, MissingClearAttachment) {
     TEST_DESCRIPTION("Points to a wrong colorAttachment index in a VkClearAttachment "
                      "structure passed to vkCmdClearAttachments");
     ASSERT_NO_FATAL_FAILURE(InitState());
-    m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT,
-                                         "vkCmdClearAttachments() attachment index 1 not found in attachment "
-                                         "reference array of active subpass 0");
+    m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_WARNING_BIT_EXT,
+                                         "vkCmdClearAttachments() color attachment index 1 out of range for active subpass 0; ignored");
 
     VKTriangleTest(bindStateVertShaderText, bindStateFragShaderText, BsoFailCmdClearAttachments);
     m_errorMonitor->VerifyFound();