layers: lx465 update core_validation image layout warning.
authorMark Young <marky@lunarg.com>
Mon, 11 Apr 2016 22:53:53 +0000 (16:53 -0600)
committerTobin Ehlis <tobine@google.com>
Thu, 14 Apr 2016 22:01:47 +0000 (16:01 -0600)
If sub-resource data is present, print out that info as part of
the error message when the image layout is incorrect.

Change-Id: Ibd4d95e22d846b823b5c76986e8646624c109bc6

layers/core_validation.cpp

index c65a838..ce15dd9 100644 (file)
@@ -4744,13 +4744,24 @@ static bool ValidateCmdBufImageLayouts(VkCommandBuffer cmdBuffer) {
             if (cb_image_data.second.initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) {
                 // TODO: Set memory invalid which is in mem_tracker currently
             } else if (imageLayout != cb_image_data.second.initialLayout) {
-                skip_call |=
-                    log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
-                            reinterpret_cast<uint64_t &>(cmdBuffer), __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS",
-                            "Cannot submit cmd buffer using image (%" PRIx64 ") with layout %s when "
-                            "first use is %s.",
-                            reinterpret_cast<const uint64_t &>(cb_image_data.first.image), string_VkImageLayout(imageLayout),
-                            string_VkImageLayout(cb_image_data.second.initialLayout));
+                if (cb_image_data.first.hasSubresource) {
+                    skip_call |= log_msg(
+                        dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+                        reinterpret_cast<uint64_t &>(cmdBuffer), __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS",
+                        "Cannot submit cmd buffer using image (%" PRIx64 ") [sub-resource: array layer %u, mip level %u], "
+                        "with layout %s when first use is %s.",
+                        reinterpret_cast<const uint64_t &>(cb_image_data.first.image), cb_image_data.first.subresource.arrayLayer,
+                        cb_image_data.first.subresource.mipLevel, string_VkImageLayout(imageLayout),
+                        string_VkImageLayout(cb_image_data.second.initialLayout));
+                } else {
+                    skip_call |= log_msg(
+                        dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+                        reinterpret_cast<uint64_t &>(cmdBuffer), __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS",
+                        "Cannot submit cmd buffer using image (%" PRIx64 ") with layout %s when "
+                        "first use is %s.",
+                        reinterpret_cast<const uint64_t &>(cb_image_data.first.image), string_VkImageLayout(imageLayout),
+                        string_VkImageLayout(cb_image_data.second.initialLayout));
+                }
             }
             SetLayout(dev_data, cb_image_data.first, cb_image_data.second.layout);
         }