layers: Reenable fix for DS layout transitions

Fix for GH650, plus added fix for cube/tri.

Change-Id: I66c2332c30eb34a0f022c033efd9b1c5b8284c32
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 7ef8562..9984dc3 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -4095,145 +4095,144 @@
     vkDestroyImageView(m_device->device(), view, nullptr);
 }
 
-// TODO : Re-enable this test when DS-layout workaround is fixed
-//TEST_F(VkLayerTest, DepthStencilLayoutTransitionForDepthOnlyImageview) {
-//    TEST_DESCRIPTION("Validate that when an imageView of a depth/stencil image "
-//                     "is used as a depth/stencil framebuffer attachment, the "
-//                     "aspectMask is ignored and both depth and stencil image "
-//                     "subresources are used.");
-//
-//    VkFormatProperties format_properties;
-//    vkGetPhysicalDeviceFormatProperties(gpu(), VK_FORMAT_D32_SFLOAT_S8_UINT,
-//                                        &format_properties);
-//    if (!(format_properties.optimalTilingFeatures &
-//          VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
-//        return;
-//    }
-//
-//    m_errorMonitor->ExpectSuccess();
-//
-//    ASSERT_NO_FATAL_FAILURE(InitState());
-//
-//    VkAttachmentDescription attachment = {
-//        0,
-//        VK_FORMAT_D32_SFLOAT_S8_UINT,
-//        VK_SAMPLE_COUNT_1_BIT,
-//        VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-//        VK_ATTACHMENT_STORE_OP_STORE,
-//        VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-//        VK_ATTACHMENT_STORE_OP_DONT_CARE,
-//        VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-//        VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL};
-//
-//    VkAttachmentReference att_ref = {
-//        0, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL};
-//
-//    VkSubpassDescription subpass = {0,       VK_PIPELINE_BIND_POINT_GRAPHICS,
-//                                    0,       nullptr,
-//                                    0,       nullptr,
-//                                    nullptr, &att_ref,
-//                                    0,       nullptr};
-//
-//    VkSubpassDependency dep = {0,
-//                               0,
-//                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
-//                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
-//                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
-//                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
-//                               VK_DEPENDENCY_BY_REGION_BIT};
-//
-//    VkRenderPassCreateInfo rpci = {VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
-//                                   nullptr,
-//                                   0,
-//                                   1,
-//                                   &attachment,
-//                                   1,
-//                                   &subpass,
-//                                   1,
-//                                   &dep};
-//
-//    VkResult err;
-//    VkRenderPass rp;
-//    err = vkCreateRenderPass(m_device->device(), &rpci, nullptr, &rp);
-//    ASSERT_VK_SUCCESS(err);
-//
-//    VkImageObj image(m_device);
-//    image.init_no_layout(32, 32, VK_FORMAT_D32_SFLOAT_S8_UINT,
-//                         0x26, // usage
-//                         VK_IMAGE_TILING_OPTIMAL, 0);
-//    ASSERT_TRUE(image.initialized());
-//    image.SetLayout(0x6, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
-//
-//    VkImageViewCreateInfo ivci = {
-//        VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
-//        nullptr,
-//        0,
-//        image.handle(),
-//        VK_IMAGE_VIEW_TYPE_2D,
-//        VK_FORMAT_D32_SFLOAT_S8_UINT,
-//        {VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B,
-//         VK_COMPONENT_SWIZZLE_A},
-//        {0x2, 0, 1, 0, 1},
-//    };
-//    VkImageView view;
-//    err = vkCreateImageView(m_device->device(), &ivci, nullptr, &view);
-//    ASSERT_VK_SUCCESS(err);
-//
-//    VkFramebufferCreateInfo fci = {VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
-//                                   nullptr,
-//                                   0,
-//                                   rp,
-//                                   1,
-//                                   &view,
-//                                   32,
-//                                   32,
-//                                   1};
-//    VkFramebuffer fb;
-//    err = vkCreateFramebuffer(m_device->device(), &fci, nullptr, &fb);
-//    ASSERT_VK_SUCCESS(err);
-//
-//    VkRenderPassBeginInfo rpbi = {VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-//                                  nullptr,
-//                                  rp,
-//                                  fb,
-//                                  {{0, 0}, {32, 32}},
-//                                  0,
-//                                  nullptr};
-//    BeginCommandBuffer();
-//    vkCmdBeginRenderPass(m_commandBuffer->handle(), &rpbi,
-//                         VK_SUBPASS_CONTENTS_INLINE);
-//
-//    VkImageMemoryBarrier imb = {};
-//    imb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-//    imb.pNext = nullptr;
-//    imb.srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
-//    imb.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
-//    imb.oldLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
-//    imb.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
-//    imb.srcQueueFamilyIndex = 0;
-//    imb.dstQueueFamilyIndex = 0;
-//    imb.image = image.handle();
-//    imb.subresourceRange.aspectMask = 0x6;
-//    imb.subresourceRange.baseMipLevel = 0;
-//    imb.subresourceRange.levelCount = 0x1;
-//    imb.subresourceRange.baseArrayLayer = 0;
-//    imb.subresourceRange.layerCount = 0x1;
-//
-//    vkCmdPipelineBarrier(m_commandBuffer->handle(),
-//                         VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
-//                         VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
-//                         VK_DEPENDENCY_BY_REGION_BIT, 0, nullptr, 0, nullptr, 1,
-//                         &imb);
-//
-//    vkCmdEndRenderPass(m_commandBuffer->handle());
-//    EndCommandBuffer();
-//    QueueCommandBuffer(false);
-//    m_errorMonitor->VerifyNotFound();
-//
-//    vkDestroyFramebuffer(m_device->device(), fb, nullptr);
-//    vkDestroyRenderPass(m_device->device(), rp, nullptr);
-//    vkDestroyImageView(m_device->device(), view, nullptr);
-//}
+TEST_F(VkLayerTest, DepthStencilLayoutTransitionForDepthOnlyImageview) {
+    TEST_DESCRIPTION("Validate that when an imageView of a depth/stencil image "
+                     "is used as a depth/stencil framebuffer attachment, the "
+                     "aspectMask is ignored and both depth and stencil image "
+                     "subresources are used.");
+
+    VkFormatProperties format_properties;
+    vkGetPhysicalDeviceFormatProperties(gpu(), VK_FORMAT_D32_SFLOAT_S8_UINT,
+                                        &format_properties);
+    if (!(format_properties.optimalTilingFeatures &
+          VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
+        return;
+    }
+
+    m_errorMonitor->ExpectSuccess();
+
+    ASSERT_NO_FATAL_FAILURE(InitState());
+
+    VkAttachmentDescription attachment = {
+        0,
+        VK_FORMAT_D32_SFLOAT_S8_UINT,
+        VK_SAMPLE_COUNT_1_BIT,
+        VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+        VK_ATTACHMENT_STORE_OP_STORE,
+        VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+        VK_ATTACHMENT_STORE_OP_DONT_CARE,
+        VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+        VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL};
+
+    VkAttachmentReference att_ref = {
+        0, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL};
+
+    VkSubpassDescription subpass = {0,       VK_PIPELINE_BIND_POINT_GRAPHICS,
+                                    0,       nullptr,
+                                    0,       nullptr,
+                                    nullptr, &att_ref,
+                                    0,       nullptr};
+
+    VkSubpassDependency dep = {0,
+                               0,
+                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
+                               VK_DEPENDENCY_BY_REGION_BIT};
+
+    VkRenderPassCreateInfo rpci = {VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
+                                   nullptr,
+                                   0,
+                                   1,
+                                   &attachment,
+                                   1,
+                                   &subpass,
+                                   1,
+                                   &dep};
+
+    VkResult err;
+    VkRenderPass rp;
+    err = vkCreateRenderPass(m_device->device(), &rpci, nullptr, &rp);
+    ASSERT_VK_SUCCESS(err);
+
+    VkImageObj image(m_device);
+    image.init_no_layout(32, 32, VK_FORMAT_D32_SFLOAT_S8_UINT,
+                         0x26, // usage
+                         VK_IMAGE_TILING_OPTIMAL, 0);
+    ASSERT_TRUE(image.initialized());
+    image.SetLayout(0x6, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
+
+    VkImageViewCreateInfo ivci = {
+        VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+        nullptr,
+        0,
+        image.handle(),
+        VK_IMAGE_VIEW_TYPE_2D,
+        VK_FORMAT_D32_SFLOAT_S8_UINT,
+        {VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B,
+         VK_COMPONENT_SWIZZLE_A},
+        {0x2, 0, 1, 0, 1},
+    };
+    VkImageView view;
+    err = vkCreateImageView(m_device->device(), &ivci, nullptr, &view);
+    ASSERT_VK_SUCCESS(err);
+
+    VkFramebufferCreateInfo fci = {VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
+                                   nullptr,
+                                   0,
+                                   rp,
+                                   1,
+                                   &view,
+                                   32,
+                                   32,
+                                   1};
+    VkFramebuffer fb;
+    err = vkCreateFramebuffer(m_device->device(), &fci, nullptr, &fb);
+    ASSERT_VK_SUCCESS(err);
+
+    VkRenderPassBeginInfo rpbi = {VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+                                  nullptr,
+                                  rp,
+                                  fb,
+                                  {{0, 0}, {32, 32}},
+                                  0,
+                                  nullptr};
+    BeginCommandBuffer();
+    vkCmdBeginRenderPass(m_commandBuffer->handle(), &rpbi,
+                         VK_SUBPASS_CONTENTS_INLINE);
+
+    VkImageMemoryBarrier imb = {};
+    imb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+    imb.pNext = nullptr;
+    imb.srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+    imb.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
+    imb.oldLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
+    imb.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+    imb.srcQueueFamilyIndex = 0;
+    imb.dstQueueFamilyIndex = 0;
+    imb.image = image.handle();
+    imb.subresourceRange.aspectMask = 0x6;
+    imb.subresourceRange.baseMipLevel = 0;
+    imb.subresourceRange.levelCount = 0x1;
+    imb.subresourceRange.baseArrayLayer = 0;
+    imb.subresourceRange.layerCount = 0x1;
+
+    vkCmdPipelineBarrier(m_commandBuffer->handle(),
+                         VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+                         VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+                         VK_DEPENDENCY_BY_REGION_BIT, 0, nullptr, 0, nullptr, 1,
+                         &imb);
+
+    vkCmdEndRenderPass(m_commandBuffer->handle());
+    EndCommandBuffer();
+    QueueCommandBuffer(false);
+    m_errorMonitor->VerifyNotFound();
+
+    vkDestroyFramebuffer(m_device->device(), fb, nullptr);
+    vkDestroyRenderPass(m_device->device(), rp, nullptr);
+    vkDestroyImageView(m_device->device(), view, nullptr);
+}
 
 TEST_F(VkLayerTest, RenderPassTransitionsAttachmentUnused) {
     TEST_DESCRIPTION("Ensure that layout transitions work correctly without "