aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjeremyg-lunarg <jeremyg@lunarg.com>2020-12-09 09:00:17 -0700
committerGitHub <noreply@github.com>2020-12-09 11:00:17 -0500
commitcc1dec6104f5e0e656d8439296265a19393628df (patch)
tree0719bdd402dbf3b31ee5c42e478b9297fe5f1cf8
parent7c19feb333b5e74ec0d346f22456531a38bb43ef (diff)
downloadamber-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.cc6
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;