[Mesa-stable] [PATCH 8/8] radv: take accesses into account in subpass dependencies
Fredrik Höglund
fredrik at kde.org
Tue Jun 26 21:49:36 UTC 2018
Limit implicit external dependencies to accesses performed on the
attachments in a render pass instance.
Cc: <mesa-stable at lists.freedesktop.org>
Signed-off-by: Fredrik Höglund <fredrik at kde.org>
---
src/amd/vulkan/radv_pass.c | 19 +++++++------------
src/amd/vulkan/radv_private.h | 1 +
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/src/amd/vulkan/radv_pass.c b/src/amd/vulkan/radv_pass.c
index 5bdaa7fd554..2f783f8b3f4 100644
--- a/src/amd/vulkan/radv_pass.c
+++ b/src/amd/vulkan/radv_pass.c
@@ -118,6 +118,7 @@ VkResult radv_CreateRenderPass(
pass->attachments[a].view_mask |= subpass->view_mask;
pass->attachments[a].first_subpass = MIN2(pass->attachments[a].first_subpass, i);
pass->attachments[a].last_subpass = i;
+ pass->attachments[a].access_mask |= VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
}
}
}
@@ -134,6 +135,8 @@ VkResult radv_CreateRenderPass(
pass->attachments[a].view_mask |= subpass->view_mask;
pass->attachments[a].first_subpass = MIN2(pass->attachments[a].first_subpass, i);
pass->attachments[a].last_subpass = i;
+ pass->attachments[a].access_mask |= VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
+ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
color_sample_count = pCreateInfo->pAttachments[a].samples;
}
}
@@ -165,6 +168,8 @@ VkResult radv_CreateRenderPass(
pass->attachments[a].view_mask |= subpass->view_mask;
pass->attachments[a].first_subpass = MIN2(pass->attachments[a].first_subpass, i);
pass->attachments[a].last_subpass = i;
+ pass->attachments[a].access_mask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
+ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
depth_sample_count = pCreateInfo->pAttachments[a].samples;
}
} else {
@@ -256,22 +261,12 @@ VkResult radv_CreateRenderPass(
/* Implicit dependency from external */
if (first_subpass != UINT32_MAX && !pass->subpasses[first_subpass].explicit_dependency_from_external) {
/* We always add the dependency to the first subpass to avoid repeating dependencies */
- pass->subpasses[0].start_barrier.dst_access_mask |=
- VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
- VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
- VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+ pass->subpasses[0].start_barrier.dst_access_mask |= pass->attachments[i].access_mask;
}
/* Implicit dependency to external */
if (last_subpass != UINT32_MAX && !pass->subpasses[last_subpass].explicit_dependency_to_external) {
- pass->end_barrier.src_access_mask |=
- VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
- VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
- VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
- VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+ pass->end_barrier.src_access_mask |= pass->attachments[i].access_mask;
}
}
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index adf259981f1..faeb618292f 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1727,6 +1727,7 @@ struct radv_render_pass_attachment {
uint32_t view_mask;
uint32_t first_subpass;
uint32_t last_subpass;
+ VkAccessFlags access_mask;
};
struct radv_render_pass {
--
2.17.0
More information about the mesa-stable
mailing list