MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-ValidationLayers / TEST_F

Function TEST_F

tests/unit/sync_object.cpp:25–182  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23class NegativeSyncObject : public SyncObjectTest {};
24
25TEST_F(NegativeSyncObject, ImageBarrierSubpassConflicts) {
26 TEST_DESCRIPTION("Add a pipeline barrier within a subpass that has conflicting state");
27 RETURN_IF_SKIP(Init());
28
29 // A renderpass with a single subpass that declared a self-dependency
30 VkAttachmentDescription attach[] = {
31 {0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT, VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_STORE_OP_DONT_CARE,
32 VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_STORE_OP_DONT_CARE, VK_IMAGE_LAYOUT_UNDEFINED,
33 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL},
34 };
35 VkAttachmentReference ref = {0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL};
36 VkSubpassDescription subpasses[] = {
37 {0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0, nullptr, 1, &ref, nullptr, nullptr, 0, nullptr},
38 };
39 VkSubpassDependency dep = {0,
40 0,
41 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
42 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
43 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
44 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
45 VK_DEPENDENCY_BY_REGION_BIT};
46 VkRenderPassCreateInfo rpci = {VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, nullptr, 0, 1, attach, 1, subpasses, 1, &dep};
47 vkt::RenderPass rp(*m_device, rpci);
48
49 rpci.dependencyCount = 0;
50 rpci.pDependencies = nullptr;
51
52 vkt::RenderPass rp_noselfdep(*m_device, rpci);
53 vkt::Image image(*m_device, 32, 32, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
54 vkt::ImageView imageView = image.CreateView();
55 vkt::Framebuffer fb(*m_device, rp, 1, &imageView.handle());
56 vkt::Framebuffer fb_noselfdep(*m_device, rp_noselfdep, 1, &imageView.handle());
57
58 m_command_buffer.Begin();
59 m_command_buffer.BeginRenderPass(rp_noselfdep, fb_noselfdep, 32, 32);
60 VkMemoryBarrier mem_barrier = vku::InitStructHelper();
61 mem_barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT;
62 mem_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
63 m_errorMonitor->SetDesiredError("VUID-vkCmdPipelineBarrier-None-07889");
64 vk::CmdPipelineBarrier(m_command_buffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, 0, 1,
65 &mem_barrier, 0, nullptr, 0, nullptr);
66 m_errorMonitor->VerifyFound();
67 m_command_buffer.EndRenderPass();
68
69 m_command_buffer.FullMemoryBarrier();
70 m_command_buffer.BeginRenderPass(rp, fb, 32, 32);
71 VkImageMemoryBarrier img_barrier = vku::InitStructHelper();
72 img_barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
73 img_barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
74 img_barrier.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
75 img_barrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
76 img_barrier.image = image;
77 img_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
78 img_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
79 img_barrier.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
80 // Mis-match src stage mask
81 m_errorMonitor->SetDesiredError("VUID-vkCmdPipelineBarrier-None-07889");
82 vk::CmdPipelineBarrier(m_command_buffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,

Callers

nothing calls this directly

Calls 15

CmdPipelineBarrierFunction · 0.85
CreateImageFunction · 0.85
AllocateMemoryFunction · 0.85
BindImageMemory2KHRFunction · 0.85
FreeMemoryFunction · 0.85
DestroyImageFunction · 0.85
CmdWaitEventsFunction · 0.85
CmdPipelineBarrier2KHRFunction · 0.85
make_spanFunction · 0.85
SignalClass · 0.85

Tested by

no test coverage detected