Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> for the series.
On Wed, Jul 18, 2018 at 4:19 PM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > The goal is to use radv_barrier()/radv_subpass_barrier() as > much as possible for further optimizations. > > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > --- > src/amd/vulkan/radv_cmd_buffer.c | 3 ++- > src/amd/vulkan/radv_meta_resolve_cs.c | 16 +++++++++------- > src/amd/vulkan/radv_meta_resolve_fs.c | 13 ++++++------- > src/amd/vulkan/radv_private.h | 3 +++ > 4 files changed, 20 insertions(+), 15 deletions(-) > > diff --git a/src/amd/vulkan/radv_cmd_buffer.c > b/src/amd/vulkan/radv_cmd_buffer.c > index 041ebf0ca3..b67f0ffdbe 100644 > --- a/src/amd/vulkan/radv_cmd_buffer.c > +++ b/src/amd/vulkan/radv_cmd_buffer.c > @@ -2048,7 +2048,8 @@ radv_dst_access_flush(struct radv_cmd_buffer > *cmd_buffer, > return flush_bits; > } > > -static void radv_subpass_barrier(struct radv_cmd_buffer *cmd_buffer, const > struct radv_subpass_barrier *barrier) > +void radv_subpass_barrier(struct radv_cmd_buffer *cmd_buffer, > + const struct radv_subpass_barrier *barrier) > { > cmd_buffer->state.flush_bits |= radv_src_access_flush(cmd_buffer, > barrier->src_access_mask, > NULL); > diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c > b/src/amd/vulkan/radv_meta_resolve_cs.c > index daf11e0576..ad02594614 100644 > --- a/src/amd/vulkan/radv_meta_resolve_cs.c > +++ b/src/amd/vulkan/radv_meta_resolve_cs.c > @@ -473,6 +473,8 @@ radv_cmd_buffer_resolve_subpass_cs(struct radv_cmd_buffer > *cmd_buffer) > struct radv_framebuffer *fb = cmd_buffer->state.framebuffer; > const struct radv_subpass *subpass = cmd_buffer->state.subpass; > struct radv_meta_saved_state saved_state; > + struct radv_subpass_barrier barrier; > + > /* FINISHME(perf): Skip clears for resolve attachments. > * > * From the Vulkan 1.0 spec: > @@ -485,13 +487,13 @@ radv_cmd_buffer_resolve_subpass_cs(struct > radv_cmd_buffer *cmd_buffer) > if (!subpass->has_resolve) > return; > > - /* Resolves happen before the end-of-subpass barriers get executed, > - * so we have to make the attachment shader-readable */ > - cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_PS_PARTIAL_FLUSH | > - RADV_CMD_FLAG_FLUSH_AND_INV_CB | > - RADV_CMD_FLAG_FLUSH_AND_INV_CB_META | > - RADV_CMD_FLAG_INV_GLOBAL_L2 | > - RADV_CMD_FLAG_INV_VMEM_L1; > + /* Resolves happen before the end-of-subpass barriers get executed, so > + * we have to make the attachment shader-readable. > + */ > + barrier.src_stage_mask = > VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; > + barrier.src_access_mask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; > + barrier.dst_access_mask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; > + radv_subpass_barrier(cmd_buffer, &barrier); > > radv_decompress_resolve_subpass_src(cmd_buffer); > > diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c > b/src/amd/vulkan/radv_meta_resolve_fs.c > index 5f4f241893..0e4957b163 100644 > --- a/src/amd/vulkan/radv_meta_resolve_fs.c > +++ b/src/amd/vulkan/radv_meta_resolve_fs.c > @@ -580,6 +580,7 @@ radv_cmd_buffer_resolve_subpass_fs(struct radv_cmd_buffer > *cmd_buffer) > struct radv_framebuffer *fb = cmd_buffer->state.framebuffer; > const struct radv_subpass *subpass = cmd_buffer->state.subpass; > struct radv_meta_saved_state saved_state; > + struct radv_subpass_barrier barrier; > > /* FINISHME(perf): Skip clears for resolve attachments. > * > @@ -600,13 +601,11 @@ radv_cmd_buffer_resolve_subpass_fs(struct > radv_cmd_buffer *cmd_buffer) > > /* Resolves happen before the end-of-subpass barriers get executed, > * so we have to make the attachment shader-readable */ > - cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_PS_PARTIAL_FLUSH | > - RADV_CMD_FLAG_FLUSH_AND_INV_CB | > - RADV_CMD_FLAG_FLUSH_AND_INV_CB_META | > - RADV_CMD_FLAG_FLUSH_AND_INV_DB | > - RADV_CMD_FLAG_FLUSH_AND_INV_DB_META | > - RADV_CMD_FLAG_INV_GLOBAL_L2 | > - RADV_CMD_FLAG_INV_VMEM_L1; > + barrier.src_stage_mask = > VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; > + barrier.src_access_mask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | > + > VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; > + barrier.dst_access_mask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; > + radv_subpass_barrier(cmd_buffer, &barrier); > > radv_decompress_resolve_subpass_src(cmd_buffer); > > diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h > index 338cb07b3e..f17efeeccd 100644 > --- a/src/amd/vulkan/radv_private.h > +++ b/src/amd/vulkan/radv_private.h > @@ -1713,6 +1713,9 @@ struct radv_subpass_barrier { > VkAccessFlags dst_access_mask; > }; > > +void radv_subpass_barrier(struct radv_cmd_buffer *cmd_buffer, > + const struct radv_subpass_barrier *barrier); > + > struct radv_subpass_attachment { > uint32_t attachment; > VkImageLayout layout; > -- > 2.18.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev