[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:27:02 UTC 2016


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.

> +}
> +
>  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