[Mesa-dev] [PATCH 1/7] gallium: make image views non-persistent objects

Dave Airlie airlied at gmail.com
Sat Jan 30 23:34:18 PST 2016


On 31 January 2016 at 11:55, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> Make them akin to shader buffers, with no refcounting/etc. Just used to
> pass data about the bound image in ->set_shader_images.

LGTM.

Reviewed-by: Dave Airlie <airlied at redhat.com>
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  src/gallium/auxiliary/util/u_inlines.h        | 11 -----------
>  src/gallium/drivers/ddebug/dd_context.c       | 28 +--------------------------
>  src/gallium/drivers/ddebug/dd_pipe.h          |  2 +-
>  src/gallium/drivers/ilo/ilo_state.c           |  2 +-
>  src/gallium/drivers/nouveau/nvc0/nvc0_state.c |  2 +-
>  src/gallium/include/pipe/p_context.h          | 14 ++------------
>  src/gallium/include/pipe/p_state.h            |  4 +---
>  7 files changed, 7 insertions(+), 56 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h
> index 57a3b0b..d081203 100644
> --- a/src/gallium/auxiliary/util/u_inlines.h
> +++ b/src/gallium/auxiliary/util/u_inlines.h
> @@ -174,17 +174,6 @@ pipe_sampler_view_release(struct pipe_context *ctx,
>  }
>
>  static inline void
> -pipe_image_view_reference(struct pipe_image_view **ptr, struct pipe_image_view *view)
> -{
> -   struct pipe_image_view *old_view = *ptr;
> -
> -   if (pipe_reference_described(&(*ptr)->reference, &view->reference,
> -                                (debug_reference_descriptor)debug_describe_image_view))
> -      old_view->context->image_view_destroy(old_view->context, old_view);
> -   *ptr = view;
> -}
> -
> -static inline void
>  pipe_so_target_reference(struct pipe_stream_output_target **ptr,
>                           struct pipe_stream_output_target *target)
>  {
> diff --git a/src/gallium/drivers/ddebug/dd_context.c b/src/gallium/drivers/ddebug/dd_context.c
> index 3ae7764..9dfaa0a 100644
> --- a/src/gallium/drivers/ddebug/dd_context.c
> +++ b/src/gallium/drivers/ddebug/dd_context.c
> @@ -415,30 +415,6 @@ dd_context_sampler_view_destroy(struct pipe_context *_pipe,
>     pipe->sampler_view_destroy(pipe, view);
>  }
>
> -static struct pipe_image_view *
> -dd_context_create_image_view(struct pipe_context *_pipe,
> -                             struct pipe_resource *resource,
> -                             const struct pipe_image_view *templ)
> -{
> -   struct pipe_context *pipe = dd_context(_pipe)->pipe;
> -   struct pipe_image_view *view =
> -      pipe->create_image_view(pipe, resource, templ);
> -
> -   if (!view)
> -      return NULL;
> -   view->context = _pipe;
> -   return view;
> -}
> -
> -static void
> -dd_context_image_view_destroy(struct pipe_context *_pipe,
> -                              struct pipe_image_view *view)
> -{
> -   struct pipe_context *pipe = dd_context(_pipe)->pipe;
> -
> -   pipe->image_view_destroy(pipe, view);
> -}
> -
>  static struct pipe_stream_output_target *
>  dd_context_create_stream_output_target(struct pipe_context *_pipe,
>                                         struct pipe_resource *res,
> @@ -486,7 +462,7 @@ dd_context_set_sampler_views(struct pipe_context *_pipe, unsigned shader,
>  static void
>  dd_context_set_shader_images(struct pipe_context *_pipe, unsigned shader,
>                               unsigned start, unsigned num,
> -                             struct pipe_image_view **views)
> +                             struct pipe_image_view *views)
>  {
>     struct dd_context *dctx = dd_context(_pipe);
>     struct pipe_context *pipe = dctx->pipe;
> @@ -744,8 +720,6 @@ dd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe)
>     CTX_INIT(sampler_view_destroy);
>     CTX_INIT(create_surface);
>     CTX_INIT(surface_destroy);
> -   CTX_INIT(create_image_view);
> -   CTX_INIT(image_view_destroy);
>     CTX_INIT(transfer_map);
>     CTX_INIT(transfer_flush_region);
>     CTX_INIT(transfer_unmap);
> diff --git a/src/gallium/drivers/ddebug/dd_pipe.h b/src/gallium/drivers/ddebug/dd_pipe.h
> index 80098dc..c9bbd56 100644
> --- a/src/gallium/drivers/ddebug/dd_pipe.h
> +++ b/src/gallium/drivers/ddebug/dd_pipe.h
> @@ -94,7 +94,7 @@ struct dd_context
>     struct pipe_constant_buffer constant_buffers[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS];
>     struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
>     struct dd_state *sampler_states[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
> -   struct pipe_image_view *shader_images[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_IMAGES];
> +   struct pipe_image_view shader_images[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_IMAGES];
>     struct pipe_shader_buffer shader_buffers[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_BUFFERS];
>
>     struct dd_state *velems;
> diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c
> index 8dc2d38..f8d2637 100644
> --- a/src/gallium/drivers/ilo/ilo_state.c
> +++ b/src/gallium/drivers/ilo/ilo_state.c
> @@ -1851,7 +1851,7 @@ ilo_set_sampler_views(struct pipe_context *pipe, unsigned shader,
>  static void
>  ilo_set_shader_images(struct pipe_context *pipe, unsigned shader,
>                        unsigned start, unsigned count,
> -                      struct pipe_image_view **views)
> +                      struct pipe_image_view *views)
>  {
>  #if 0
>     struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
> index cf3d349..23fc721 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
> @@ -1241,7 +1241,7 @@ nvc0_set_compute_resources(struct pipe_context *pipe,
>  static void
>  nvc0_set_shader_images(struct pipe_context *pipe, unsigned shader,
>                         unsigned start_slot, unsigned count,
> -                       struct pipe_image_view **views)
> +                       struct pipe_image_view *views)
>  {
>  }
>
> diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
> index f69a75b..c380399 100644
> --- a/src/gallium/include/pipe/p_context.h
> +++ b/src/gallium/include/pipe/p_context.h
> @@ -290,14 +290,14 @@ struct pipe_context {
>      * \param shader     selects shader stage
>      * \param start_slot first image slot to bind.
>      * \param count      number of consecutive images to bind.
> -    * \param buffers    array of pointers to the images to bind, it
> +    * \param buffers    array of the images to bind, it
>      *                   should contain at least \a count elements
>      *                   unless it's NULL, in which case no images will
>      *                   be bound.
>      */
>     void (*set_shader_images)(struct pipe_context *, unsigned shader,
>                               unsigned start_slot, unsigned count,
> -                             struct pipe_image_view **images);
> +                             struct pipe_image_view *images);
>
>     void (*set_vertex_buffers)( struct pipe_context *,
>                                 unsigned start_slot,
> @@ -455,16 +455,6 @@ struct pipe_context {
>     void (*surface_destroy)(struct pipe_context *ctx,
>                             struct pipe_surface *);
>
> -   /**
> -    * Create an image view into a buffer or texture to be used with load,
> -    * store, and atomic instructions by a shader stage.
> -    */
> -   struct pipe_image_view * (*create_image_view)(struct pipe_context *ctx,
> -                                                 struct pipe_resource *texture,
> -                                                 const struct pipe_image_view *templat);
> -
> -   void (*image_view_destroy)(struct pipe_context *ctx,
> -                              struct pipe_image_view *view);
>
>     /**
>      * Map a resource.
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index 2e4d283..ca7775d 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -393,14 +393,12 @@ struct pipe_sampler_view
>
>
>  /**
> - * A view into a writable buffer or texture that can be bound to a shader
> + * A description of a writable buffer or texture that can be bound to a shader
>   * stage.
>   */
>  struct pipe_image_view
>  {
> -   struct pipe_reference reference;
>     struct pipe_resource *resource; /**< resource into which this is a view  */
> -   struct pipe_context *context; /**< context this view belongs to */
>     enum pipe_format format;      /**< typed PIPE_FORMAT_x */
>
>     union {
> --
> 2.4.10
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list