On Tuesday 26 June 2018, Fredrik Höglund wrote:
> Limit implicit external dependencies to accesses performed on the
> attachments in a render pass instance.

Note that I'm not sure if we are supposed to optimize implicit dependencies
in this way. I have a similar patch that takes load/store ops into account,
and that patch causes some CTS tests to fail.

> 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 {
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to