tests: GH576, Add framebuffer attachment tests
Added validation test for attachments with conflicting image usage
settings and unused preserve attachments.
Change-Id: I1790e3a2e5a474adf6820c240a1c018ab5b4cb1f
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index d2346ea..ab5872b 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -2922,6 +2922,95 @@
#if DRAW_STATE_TESTS
+TEST_F(VkLayerTest, UnusedPreserveAttachment) {
+ TEST_DESCRIPTION("Create a framebuffer where a subpass has a preserve "
+ "attachment reference of VK_ATTACHMENT_UNUSED");
+
+ ASSERT_NO_FATAL_FAILURE(InitState());
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+
+ m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT,
+ "must not be VK_ATTACHMENT_UNUSED");
+
+ VkAttachmentReference color_attach = {};
+ color_attach.layout = VK_IMAGE_LAYOUT_GENERAL;
+ color_attach.attachment = 0;
+ uint32_t preserve_attachment = VK_ATTACHMENT_UNUSED;
+ VkSubpassDescription subpass = {};
+ subpass.colorAttachmentCount = 1;
+ subpass.pColorAttachments = &color_attach;
+ subpass.preserveAttachmentCount = 1;
+ subpass.pPreserveAttachments = &preserve_attachment;
+
+ VkRenderPassCreateInfo rpci = {};
+ rpci.subpassCount = 1;
+ rpci.pSubpasses = &subpass;
+ rpci.attachmentCount = 1;
+ VkAttachmentDescription attach_desc = {};
+ attach_desc.format = VK_FORMAT_UNDEFINED;
+ rpci.pAttachments = &attach_desc;
+ rpci.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
+ VkRenderPass rp;
+ vkCreateRenderPass(m_device->device(), &rpci, NULL, &rp);
+
+ m_errorMonitor->VerifyFound();
+
+ vkDestroyRenderPass(m_device->device(), rp, NULL);
+}
+
+TEST_F(VkLayerTest, AttachmentUsageMismatch) {
+ TEST_DESCRIPTION("Create a framebuffer where a subpass uses a color image "
+ "in the depthStencil attachment point");
+
+ ASSERT_NO_FATAL_FAILURE(InitState());
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+
+ m_errorMonitor->SetDesiredFailureMsg(
+ VK_DEBUG_REPORT_ERROR_BIT_EXT,
+ "conflicts with the image's IMAGE_USAGE flags");
+
+ // Create a renderPass with a depth-stencil attachment created with
+ // IMAGE_USAGE_COLOR_ATTACHMENT
+ VkAttachmentReference attach = {};
+ attach.layout = VK_IMAGE_LAYOUT_GENERAL;
+ VkSubpassDescription subpass = {};
+ // Add our color attachment to pDepthStencilAttachment
+ subpass.pDepthStencilAttachment = &attach;
+ VkRenderPassCreateInfo rpci = {};
+ rpci.subpassCount = 1;
+ rpci.pSubpasses = &subpass;
+ rpci.attachmentCount = 1;
+ VkAttachmentDescription attach_desc = {};
+ attach_desc.format = VK_FORMAT_UNDEFINED;
+ rpci.pAttachments = &attach_desc;
+ rpci.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
+ VkRenderPass rp;
+ VkResult err = vkCreateRenderPass(m_device->device(), &rpci, NULL, &rp);
+ ASSERT_VK_SUCCESS(err);
+
+ VkImageView imageView =
+ m_renderTargets[0]->targetView(VK_FORMAT_B8G8R8A8_UNORM);
+ VkFramebufferCreateInfo fb_info = {};
+ fb_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
+ fb_info.pNext = NULL;
+ fb_info.renderPass = rp;
+ fb_info.attachmentCount = 1;
+ fb_info.pAttachments = &imageView;
+ fb_info.width = 100;
+ fb_info.height = 100;
+ fb_info.layers = 1;
+
+ VkFramebuffer fb;
+ err = vkCreateFramebuffer(device(), &fb_info, NULL, &fb);
+
+ m_errorMonitor->VerifyFound();
+
+ if (err == VK_SUCCESS) {
+ vkDestroyFramebuffer(m_device->device(), fb, NULL);
+ }
+ vkDestroyRenderPass(m_device->device(), rp, NULL);
+}
+
// This is a positive test. No errors should be generated.
TEST_F(VkLayerTest, WaitEventThenSet) {
TEST_DESCRIPTION(