Limit implicit external dependencies to accesses performed on the attachments in a render pass instance.
Cc: <mesa-sta...@lists.freedesktop.org> Signed-off-by: Fredrik Höglund <fred...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev