On Tue, Apr 24, 2012 at 4:00 PM, Marek Olšák <mar...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev