aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kniager <jeremyk@lunarg.com>2018-02-02 15:06:10 -0700
committerjeremyk-lunarg <jeremyk@lunarg.com>2018-02-16 09:58:53 -0700
commita2ad0560f6d046747da14a612ac2c4b5e903d3dd (patch)
treef2dfd12db4b3edf70c46b70cd55d53f132309d81
parent5f6b7bf3dab2c213b407e1dc16129c04e4405ff3 (diff)
downloadvulkan-validation-layers-a2ad0560f6d046747da14a612ac2c4b5e903d3dd.tar.gz
tests: Add test to verify issue 2213 fixed
Change-Id: I9776db7e08a0d69260a80f50f708db9517c68d69
-rw-r--r--tests/layer_validation_tests.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 31ef89367..71b57e432 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -13230,6 +13230,50 @@ TEST_F(VkLayerTest, MissingClearAttachment) {
m_errorMonitor->VerifyFound();
}
+TEST_F(VkPositiveLayerTest, ConfirmNoVLErrorWhenVkCmdClearAttachmentsCalledInSecondaryCB) {
+ TEST_DESCRIPTION(
+ "This test is to verify that when vkCmdClearAttachments is called by a secondary commandbuffer, the validation layers do "
+ "not throw an error if the primary commandbuffer begins a renderpass before executing the secondary commandbuffer.");
+
+ ASSERT_NO_FATAL_FAILURE(Init());
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+
+ VkCommandBufferObj secondary(m_device, m_commandPool, VK_COMMAND_BUFFER_LEVEL_SECONDARY);
+
+ VkCommandBufferBeginInfo info = {};
+ VkCommandBufferInheritanceInfo hinfo = {};
+ info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT | VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT;
+ info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+ info.pInheritanceInfo = &hinfo;
+ hinfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
+ hinfo.pNext = NULL;
+ hinfo.renderPass = renderPass();
+ hinfo.subpass = 0;
+ hinfo.framebuffer = m_framebuffer;
+ hinfo.occlusionQueryEnable = VK_FALSE;
+ hinfo.queryFlags = 0;
+ hinfo.pipelineStatistics = 0;
+
+ secondary.begin(&info);
+ VkClearAttachment color_attachment;
+ color_attachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+ color_attachment.clearValue.color.float32[0] = 0.0;
+ color_attachment.clearValue.color.float32[1] = 0.0;
+ color_attachment.clearValue.color.float32[2] = 0.0;
+ color_attachment.clearValue.color.float32[3] = 0.0;
+ color_attachment.colorAttachment = 0;
+ VkClearRect clear_rect = {{{0, 0}, {(uint32_t)m_width, (uint32_t)m_height}}, 0, 1};
+ vkCmdClearAttachments(secondary.handle(), 1, &color_attachment, 1, &clear_rect);
+ m_errorMonitor->VerifyNotFound();
+ secondary.end();
+
+ m_commandBuffer->begin();
+ vkCmdBeginRenderPass(m_commandBuffer->handle(), &m_renderPassBeginInfo, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS);
+ vkCmdExecuteCommands(m_commandBuffer->handle(), 1, &secondary.handle());
+ vkCmdEndRenderPass(m_commandBuffer->handle());
+ m_commandBuffer->end();
+}
+
TEST_F(VkLayerTest, CmdClearAttachmentTests) {
TEST_DESCRIPTION("Various tests for validating usage of vkCmdClearAttachments");