diff options
author | jeremyg-lunarg <jeremyg@lunarg.com> | 2020-12-09 09:00:17 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-09 11:00:17 -0500 |
commit | cc1dec6104f5e0e656d8439296265a19393628df (patch) | |
tree | 0719bdd402dbf3b31ee5c42e478b9297fe5f1cf8 | |
parent | 7c19feb333b5e74ec0d346f22456531a38bb43ef (diff) | |
download | amber-cc1dec6104f5e0e656d8439296265a19393628df.tar.gz |
Fix Vulkan synchronization validation errors (#926)
Vulkan CTS TransferImage::ImageBarrier() is often used to
synchronize images which are then used as attachments in
a RenderPass. Depending on the load operation used, the RenderPass
may need either read or write access. (see Section 8.1 Render Pass
Creation in the Vulkan 1.2.x specification).
To allow any load operation to work correctly, set both read and write
access in the dstAccessMask when transitioning to an attachment layout.
-rw-r--r-- | src/vulkan/transfer_image.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/vulkan/transfer_image.cc b/src/vulkan/transfer_image.cc index 60bd6fd..fcbbff4 100644 --- a/src/vulkan/transfer_image.cc +++ b/src/vulkan/transfer_image.cc @@ -342,10 +342,12 @@ void TransferImage::ImageBarrier(CommandBuffer* command_buffer, switch (to_layout) { case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: - barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; break; case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: - barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; break; case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; |