From 1747c4ed7bb6ef622f7c4cda854de86537f262eb Mon Sep 17 00:00:00 2001 From: ziga-lunarg Date: Wed, 19 Feb 2025 23:39:07 +0200 Subject: [PATCH] tests: Test invalid pNext in pipeline barrier 2 --- tests/unit/sync_object.cpp | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tests/unit/sync_object.cpp b/tests/unit/sync_object.cpp index e7fe8baaf10..43ab0f1b134 100644 --- a/tests/unit/sync_object.cpp +++ b/tests/unit/sync_object.cpp @@ -4860,3 +4860,60 @@ TEST_F(NegativeSyncObject, UnsupportedBufferMemoryBarrier2Stages) { m_command_buffer.End(); } + +TEST_F(NegativeSyncObject, InvalidBarrierPNext) { + SetTargetApiVersion(VK_API_VERSION_1_1); + AddRequiredExtensions(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME); + AddRequiredFeature(vkt::Feature::synchronization2); + RETURN_IF_SKIP(Init()); + + vkt::Buffer buffer(*m_device, 32, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT); + + VkImageCreateInfo image_ci = + vkt::Image::ImageCreateInfo2D(32u, 32u, 1u, 1u, VK_FORMAT_B8G8R8A8_UNORM, + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, VK_IMAGE_TILING_OPTIMAL); + vkt::Image image(*m_device, image_ci); + + VkMemoryBarrier2 memory_barrier = vku::InitStructHelper(); + + VkBufferMemoryBarrier2 buffer_barrier = vku::InitStructHelper(&memory_barrier); + buffer_barrier.buffer = buffer.handle(); + buffer_barrier.size = VK_WHOLE_SIZE; + buffer_barrier.dstStageMask = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR; + + VkImageMemoryBarrier2 image_barrier = vku::InitStructHelper(&memory_barrier); + image_barrier.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR; + image_barrier.srcAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT; + image_barrier.dstStageMask = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT; + image_barrier.dstAccessMask = VK_ACCESS_2_SHADER_READ_BIT; + image_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + image_barrier.newLayout = VK_IMAGE_LAYOUT_GENERAL; + image_barrier.image = image.handle(); + image_barrier.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}; + + VkDependencyInfo dependency_info = vku::InitStructHelper(); + dependency_info.bufferMemoryBarrierCount = 1u; + dependency_info.pBufferMemoryBarriers = &buffer_barrier; + dependency_info.pImageMemoryBarriers = &image_barrier; + + m_command_buffer.Begin(); + + m_errorMonitor->SetDesiredError("VUID-VkBufferMemoryBarrier2-pNext-pNext"); + vk::CmdPipelineBarrier2KHR(m_command_buffer.handle(), &dependency_info); + m_errorMonitor->VerifyFound(); + + dependency_info.bufferMemoryBarrierCount = 0u; + dependency_info.imageMemoryBarrierCount = 1u; + + m_errorMonitor->SetDesiredError("VUID-VkImageMemoryBarrier2-pNext-pNext"); + vk::CmdPipelineBarrier2KHR(m_command_buffer.handle(), &dependency_info); + m_errorMonitor->VerifyFound(); + + dependency_info.imageMemoryBarrierCount = 0u; + dependency_info.pNext = &memory_barrier; + m_errorMonitor->SetDesiredError("VUID-VkDependencyInfo-pNext-pNext"); + vk::CmdPipelineBarrier2KHR(m_command_buffer.handle(), &dependency_info); + m_errorMonitor->VerifyFound(); + + m_command_buffer.End(); +}