[Mesa-dev] [PATCH 2/3] mesa: move gl_client_array*[] from vbo_draw_func into gl_context

Brian Paul brian.e.paul at gmail.com
Mon May 7 09:24:02 PDT 2012


On Tue, Apr 24, 2012 at 4:00 PM, Marek Olšák <maraeo at gmail.com> wrote:
> In the future we'd like to treat vertex arrays as a state and
> not as a parameter to the draw function. This is the first step
> towards that goal.

Part of the goal is to avoid array re-validation for every draw call,
right?  Maybe say so in the comment.

More comments below.


>
> This commit adds:
> const struct gl_client_array **gl_context::Array::Arrays.
>
> The pointer is changed in:
> * vbo_draw_method
> * vbo_rebase_prims - unused by gallium
> * vbo_split_prims - unused by gallium
> * st_RasterPos
> ---
>  src/mesa/drivers/dri/i965/brw_draw.c         |    2 +-
>  src/mesa/drivers/dri/i965/brw_draw.h         |    1 -
>  src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c |    9 ++++-----
>  src/mesa/main/mtypes.h                       |    3 +++
>  src/mesa/state_tracker/st_cb_rasterpos.c     |    5 ++++-
>  src/mesa/state_tracker/st_draw.c             |    2 +-
>  src/mesa/state_tracker/st_draw.h             |    2 --
>  src/mesa/state_tracker/st_draw_feedback.c    |    2 +-
>  src/mesa/tnl/t_draw.c                        |    3 ++-
>  src/mesa/tnl/tnl.h                           |    1 -
>  src/mesa/vbo/vbo.h                           |    1 -
>  src/mesa/vbo/vbo_context.h                   |   15 +++++++++++++++
>  src/mesa/vbo/vbo_exec_array.c                |   12 ++++++------
>  src/mesa/vbo/vbo_exec_draw.c                 |    3 +--
>  src/mesa/vbo/vbo_rebase.c                    |    8 ++++++--
>  src/mesa/vbo/vbo_save_draw.c                 |    3 +--
>  src/mesa/vbo/vbo_split_copy.c                |    9 +++++++--
>  src/mesa/vbo/vbo_split_inplace.c             |    9 +++++++--
>  18 files changed, 59 insertions(+), 31 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
> index da37b18..30faa95 100644
> --- a/src/mesa/drivers/dri/i965/brw_draw.c
> +++ b/src/mesa/drivers/dri/i965/brw_draw.c
> @@ -531,7 +531,6 @@ retry:
>  }
>
>  void brw_draw_prims( struct gl_context *ctx,
> -                    const struct gl_client_array *arrays[],
>                     const struct _mesa_prim *prim,
>                     GLuint nr_prims,
>                     const struct _mesa_index_buffer *ib,
> @@ -540,6 +539,7 @@ void brw_draw_prims( struct gl_context *ctx,
>                     GLuint max_index,
>                     struct gl_transform_feedback_object *tfb_vertcount )
>  {
> +   const struct gl_client_array **arrays = ctx->Array.Arrays;
>    bool retval;
>
>    if (!_mesa_check_conditional_render(ctx))
> diff --git a/src/mesa/drivers/dri/i965/brw_draw.h b/src/mesa/drivers/dri/i965/brw_draw.h
> index b910419..2cc4cb3 100644
> --- a/src/mesa/drivers/dri/i965/brw_draw.h
> +++ b/src/mesa/drivers/dri/i965/brw_draw.h
> @@ -35,7 +35,6 @@ struct brw_context;
>
>
>  void brw_draw_prims( struct gl_context *ctx,
> -                    const struct gl_client_array *arrays[],
>                     const struct _mesa_prim *prims,
>                     GLuint nr_prims,
>                     const struct _mesa_index_buffer *ib,
> diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
> index 62fee2e..6358b26 100644
> --- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
> +++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
> @@ -216,7 +216,7 @@ get_max_client_stride(struct gl_context *ctx, const struct gl_client_array **arr
>  }
>
>  static void
> -TAG(vbo_render_prims)(struct gl_context *ctx, const struct gl_client_array **arrays,
> +TAG(vbo_render_prims)(struct gl_context *ctx,
>                      const struct _mesa_prim *prims, GLuint nr_prims,
>                      const struct _mesa_index_buffer *ib,
>                      GLboolean index_bounds_valid,
> @@ -448,7 +448,6 @@ vbo_draw_imm(struct gl_context *ctx, const struct gl_client_array **arrays,
>
>  static void
>  TAG(vbo_render_prims)(struct gl_context *ctx,
> -                     const struct gl_client_array **arrays,
>                      const struct _mesa_prim *prims, GLuint nr_prims,
>                      const struct _mesa_index_buffer *ib,
>                      GLboolean index_bounds_valid,
> @@ -456,6 +455,7 @@ TAG(vbo_render_prims)(struct gl_context *ctx,
>                      struct gl_transform_feedback_object *tfb_vertcount)
>  {
>        struct nouveau_render_state *render = to_render_state(ctx);
> +       const struct gl_client_array **arrays = ctx->Array.Arrays;
>
>        if (!index_bounds_valid)
>                vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index,
> @@ -484,7 +484,6 @@ TAG(vbo_render_prims)(struct gl_context *ctx,
>
>  static void
>  TAG(vbo_check_render_prims)(struct gl_context *ctx,
> -                           const struct gl_client_array **arrays,
>                            const struct _mesa_prim *prims, GLuint nr_prims,
>                            const struct _mesa_index_buffer *ib,
>                            GLboolean index_bounds_valid,
> @@ -496,12 +495,12 @@ TAG(vbo_check_render_prims)(struct gl_context *ctx,
>        nouveau_validate_framebuffer(ctx);
>
>        if (nctx->fallback == HWTNL)
> -               TAG(vbo_render_prims)(ctx, arrays, prims, nr_prims, ib,
> +               TAG(vbo_render_prims)(ctx, prims, nr_prims, ib,
>                                      index_bounds_valid, min_index, max_index,
>                                      tfb_vertcount);
>
>        if (nctx->fallback == SWTNL)
> -               _tnl_vbo_draw_prims(ctx, arrays, prims, nr_prims, ib,
> +               _tnl_vbo_draw_prims(ctx, prims, nr_prims, ib,
>                                    index_bounds_valid, min_index, max_index,
>                                    tfb_vertcount);
>  }
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 2b709de..eb103ad 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -1636,6 +1636,9 @@ struct gl_array_attrib
>
>    /* GL_ARB_vertex_buffer_object */
>    struct gl_buffer_object *ArrayBufferObj;
> +
> +   /** Vertex arrays as consumed by a driver. */

The Arrays field is generally set up only by the VBO module, right?
Maybe say so in the comment.

> +   const struct gl_client_array **Arrays; /**< 0..VERT_ATTRIB_MAX-1 */

The name is kind of generic and easy to gloss over as a key part of
the drawing interface.
I'd be tempted to call it "DrawArrays".  What do you think?


-Brian


More information about the mesa-dev mailing list