| 18 | class NegativeImageLayout : public ImageTest {}; |
| 19 | |
| 20 | TEST_F(NegativeImageLayout, Blit) { |
| 21 | TEST_DESCRIPTION("Incorrect vkCmdBlitImage layouts"); |
| 22 | RETURN_IF_SKIP(Init()); |
| 23 | |
| 24 | VkFormat fmt = VK_FORMAT_R8G8B8A8_UNORM; |
| 25 | |
| 26 | vkt::Image img_src_transfer(*m_device, 64, 64, fmt, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT); |
| 27 | vkt::Image img_dst_transfer(*m_device, 64, 64, fmt, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT); |
| 28 | vkt::Image img_general(*m_device, 64, 64, fmt, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT); |
| 29 | vkt::Image img_color(*m_device, 64, 64, fmt, |
| 30 | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); |
| 31 | |
| 32 | img_src_transfer.SetLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); |
| 33 | img_dst_transfer.SetLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); |
| 34 | img_general.SetLayout(VK_IMAGE_LAYOUT_GENERAL); |
| 35 | img_color.SetLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); |
| 36 | |
| 37 | VkImageBlit blit_region = {}; |
| 38 | blit_region.srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; |
| 39 | blit_region.dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}; |
| 40 | blit_region.srcOffsets[0] = {0, 0, 0}; |
| 41 | blit_region.srcOffsets[1] = {32, 32, 1}; |
| 42 | blit_region.dstOffsets[0] = {32, 32, 0}; |
| 43 | blit_region.dstOffsets[1] = {64, 64, 1}; |
| 44 | |
| 45 | // Illegal srcImageLayout/dstImageLayout |
| 46 | m_command_buffer.Begin(); |
| 47 | vk::CmdBlitImage(m_command_buffer, img_general, VK_IMAGE_LAYOUT_GENERAL, img_general, VK_IMAGE_LAYOUT_GENERAL, 1, &blit_region, |
| 48 | VK_FILTER_LINEAR); |
| 49 | |
| 50 | m_errorMonitor->SetDesiredError("VUID-vkCmdBlitImage-srcImageLayout-01398"); |
| 51 | vk::CmdBlitImage(m_command_buffer, img_src_transfer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, img_dst_transfer, |
| 52 | VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &blit_region, VK_FILTER_LINEAR); |
| 53 | m_errorMonitor->VerifyFound(); |
| 54 | |
| 55 | m_errorMonitor->SetDesiredError("VUID-vkCmdBlitImage-dstImageLayout-01399"); |
| 56 | vk::CmdBlitImage(m_command_buffer, img_src_transfer, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, img_dst_transfer, |
| 57 | VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, 1, &blit_region, VK_FILTER_LINEAR); |
| 58 | m_errorMonitor->VerifyFound(); |
| 59 | m_command_buffer.End(); |
| 60 | |
| 61 | // Destination image in invalid layout at start of the CB |
| 62 | m_command_buffer.Begin(); |
| 63 | vk::CmdBlitImage(m_command_buffer, img_src_transfer, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, img_color, VK_IMAGE_LAYOUT_GENERAL, |
| 64 | 1, &blit_region, VK_FILTER_LINEAR); |
| 65 | m_command_buffer.End(); |
| 66 | m_errorMonitor->SetDesiredError("VUID-vkCmdDraw-None-09600"); |
| 67 | m_default_queue->SubmitAndWait(m_command_buffer); |
| 68 | m_errorMonitor->VerifyFound(); |
| 69 | |
| 70 | // Source image in invalid layout at start of the CB |
| 71 | m_command_buffer.Begin(); |
| 72 | vk::CmdBlitImage(m_command_buffer, img_color, VK_IMAGE_LAYOUT_GENERAL, img_dst_transfer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
| 73 | 1, &blit_region, VK_FILTER_LINEAR); |
| 74 | m_command_buffer.End(); |
| 75 | m_errorMonitor->SetDesiredError("VUID-vkCmdDraw-None-09600"); |
| 76 | m_default_queue->SubmitAndWait(m_command_buffer); |
| 77 | m_errorMonitor->VerifyFound(); |
nothing calls this directly
no test coverage detected