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

Reply via email to