[Mesa-dev] [PATCH 21/25] anv/blorp: Break the guts of alloc_binding_table into a shared helper

Pohjolainen, Topi topi.pohjolainen at gmail.com
Fri Oct 28 19:30:47 UTC 2016


On Fri, Oct 28, 2016 at 10:27:02PM +0300, Pohjolainen, Topi wrote:
> On Sat, Oct 22, 2016 at 10:50:52AM -0700, Jason Ekstrand wrote:
> > ---
> >  src/intel/vulkan/anv_blorp.c       | 24 ++++++++++++++++++++++++
> >  src/intel/vulkan/anv_private.h     |  5 +++++
> >  src/intel/vulkan/genX_blorp_exec.c | 18 ++----------------
> >  3 files changed, 31 insertions(+), 16 deletions(-)
> > 
> > diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
> > index 5361c4b..f495815 100644
> > --- a/src/intel/vulkan/anv_blorp.c
> > +++ b/src/intel/vulkan/anv_blorp.c
> > @@ -868,6 +868,30 @@ void anv_CmdClearDepthStencilImage(
> >     blorp_batch_finish(&batch);
> >  }
> >  
> > +struct anv_state
> > +anv_cmd_buffer_alloc_blorp_binding_table(struct anv_cmd_buffer *cmd_buffer,
> > +                                         uint32_t num_entries,
> > +                                         uint32_t *state_offset)
> > +{
> > +   struct anv_state bt_state =
> > +      anv_cmd_buffer_alloc_binding_table(cmd_buffer, num_entries,
> > +                                         state_offset);
> > +   if (bt_state.map == NULL) {
> > +      /* We ran out of space.  Grab a new binding table block. */
> > +      VkResult result = anv_cmd_buffer_new_binding_table_block(cmd_buffer);
> > +      assert(result == VK_SUCCESS);
> > +
> > +      /* Re-emit state base addresses so we get the new surface state base
> > +       * address before we start emitting binding tables etc.
> > +       */
> > +      anv_cmd_buffer_emit_state_base_address(cmd_buffer);
> > +
> > +      bt_state = anv_cmd_buffer_alloc_binding_table(cmd_buffer, num_entries,
> > +                                                    state_offset);
> > +      assert(bt_state.map != NULL);
> > +   }
> 
> This is not returning the state.

And reading the next patch I found it there.

> 
> > +}
> > +
> >  static void
> >  clear_color_attachment(struct anv_cmd_buffer *cmd_buffer,
> >                         struct blorp_batch *batch,
> > diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
> > index 5664a6e..44fe606 100644
> > --- a/src/intel/vulkan/anv_private.h
> > +++ b/src/intel/vulkan/anv_private.h
> > @@ -1271,6 +1271,11 @@ void anv_cmd_buffer_resolve_subpass(struct anv_cmd_buffer *cmd_buffer);
> >  const struct anv_image_view *
> >  anv_cmd_buffer_get_depth_stencil_view(const struct anv_cmd_buffer *cmd_buffer);
> >  
> > +struct anv_state
> > +anv_cmd_buffer_alloc_blorp_binding_table(struct anv_cmd_buffer *cmd_buffer,
> > +                                         uint32_t num_entries,
> > +                                         uint32_t *state_offset);
> > +
> >  void anv_cmd_buffer_dump(struct anv_cmd_buffer *cmd_buffer);
> >  
> >  struct anv_fence {
> > diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c
> > index 185aff6..a705de0 100644
> > --- a/src/intel/vulkan/genX_blorp_exec.c
> > +++ b/src/intel/vulkan/genX_blorp_exec.c
> > @@ -87,22 +87,8 @@ blorp_alloc_binding_table(struct blorp_batch *batch, unsigned num_entries,
> >  
> >     uint32_t state_offset;
> >     struct anv_state bt_state =
> > -      anv_cmd_buffer_alloc_binding_table(cmd_buffer, num_entries,
> > -                                         &state_offset);
> > -   if (bt_state.map == NULL) {
> > -      /* We ran out of space.  Grab a new binding table block. */
> > -      VkResult result = anv_cmd_buffer_new_binding_table_block(cmd_buffer);
> > -      assert(result == VK_SUCCESS);
> > -
> > -      /* Re-emit state base addresses so we get the new surface state base
> > -       * address before we start emitting binding tables etc.
> > -       */
> > -      genX(cmd_buffer_emit_state_base_address)(cmd_buffer);
> > -
> > -      bt_state = anv_cmd_buffer_alloc_binding_table(cmd_buffer, num_entries,
> > -                                                    &state_offset);
> > -      assert(bt_state.map != NULL);
> > -   }
> > +      anv_cmd_buffer_alloc_blorp_binding_table(cmd_buffer, num_entries,
> > +                                               &state_offset);
> >  
> >     uint32_t *bt_map = bt_state.map;
> >     *bt_offset = bt_state.offset;
> > -- 
> > 2.5.0.400.gff86faf
> > 
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list