layers: Check swapchain image layout

Change-Id: I8c8461e2b3b0670ecb78416d4d7dee935bfd0c11
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp
index dbfd175..db6c3a0 100644
--- a/layers/buffer_validation.cpp
+++ b/layers/buffer_validation.cpp
@@ -3291,11 +3291,22 @@
         const auto image = layout_map_entry.first;
         const auto *image_state = GetImageState(image);
         if (!image_state) continue;  // Can't check layouts of a dead image
-        const auto &subres_map = layout_map_entry.second;
+        auto subres_map = layout_map_entry.second.get();
         ImageSubresourcePair isr_pair;
         isr_pair.image = image;
         isr_pair.hasSubresource = true;
 
+        std::string bind_swapchain_msg = "";
+        if (image_state->bind_swapchain) {
+            auto swapchain_node = GetSwapchainState(image_state->bind_swapchain);
+            const auto swapchain_image = swapchain_node->images[image_state->bind_swapchain_imageIndex];
+            isr_pair.image = swapchain_image;
+
+            string_sprintf(&bind_swapchain_msg, "bind %s imageIndex %d (%s)",
+                           report_data->FormatHandle(image_state->bind_swapchain).c_str(), image_state->bind_swapchain_imageIndex,
+                           report_data->FormatHandle(swapchain_image).c_str());
+        }
+
         // Validate the initial_uses for each subresource referenced
         for (auto it_init = subres_map->BeginInitialUse(); !it_init.AtEnd(); ++it_init) {
             isr_pair.subresource = (*it_init).subresource;
@@ -3311,15 +3322,14 @@
                     bool matches = ImageLayoutMatches(initial_layout_state->aspect_mask, image_layout, initial_layout);
                     if (!matches) {
                         std::string formatted_label = FormatDebugLabel(" ", pCB->debug_label);
-                        skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
-                                        HandleToUint64(pCB->commandBuffer), kVUID_Core_DrawState_InvalidImageLayout,
-                                        "Submitted command buffer expects %s  (subresource: aspectMask 0x%X array layer %u, "
-                                        "mip level %u) "
-                                        "to be in layout %s--instead, current layout is %s.%s",
-                                        report_data->FormatHandle(image).c_str(), isr_pair.subresource.aspectMask,
-                                        isr_pair.subresource.arrayLayer, isr_pair.subresource.mipLevel,
-                                        string_VkImageLayout(initial_layout), string_VkImageLayout(image_layout),
-                                        formatted_label.c_str());
+                        skip |= log_msg(
+                            report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+                            HandleToUint64(pCB->commandBuffer), kVUID_Core_DrawState_InvalidImageLayout,
+                            "Submitted command buffer expects %s %s (subresource: aspectMask 0x%X array layer %u, mip level %u) "
+                            "to be in layout %s--instead, current layout is %s.%s",
+                            report_data->FormatHandle(image).c_str(), bind_swapchain_msg.c_str(), isr_pair.subresource.aspectMask,
+                            isr_pair.subresource.arrayLayer, isr_pair.subresource.mipLevel, string_VkImageLayout(initial_layout),
+                            string_VkImageLayout(image_layout), formatted_label.c_str());
                     }
                 }
             }