On 11/09/2013 01:02 AM, Chris Forbes wrote: > From: Christoph Bumiller <e0425...@student.tuwien.ac.at> > > Split from patch implementing ARB_draw_indirect. > > v2: Const-qualify the struct gl_buffer_object *indirect argument. > v3: Fix up some more draw calls for new argument. > v4: Fix up rebase conflicts in i965. > v5: Undo const-qualification > --- > src/mesa/drivers/dri/i965/brw_draw.c | 3 ++- > src/mesa/drivers/dri/i965/brw_draw.h | 3 ++- > src/mesa/drivers/dri/i965/brw_primitive_restart.c | 2 +- > src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c | 13 ++++++++----- > src/mesa/state_tracker/st_cb_rasterpos.c | 2 +- > src/mesa/state_tracker/st_draw.c | 3 ++- > src/mesa/state_tracker/st_draw.h | 6 ++++-- > src/mesa/state_tracker/st_draw_feedback.c | 3 ++- > src/mesa/tnl/t_draw.c | 3 ++- > src/mesa/tnl/tnl.h | 3 ++- > src/mesa/vbo/vbo.h | 5 ++++- > src/mesa/vbo/vbo_exec_array.c | 8 ++++---- > src/mesa/vbo/vbo_exec_draw.c | 2 +- > src/mesa/vbo/vbo_primitive_restart.c | 4 ++-- > src/mesa/vbo/vbo_rebase.c | 2 +- > src/mesa/vbo/vbo_save_draw.c | 2 +- > src/mesa/vbo/vbo_split_copy.c | 2 +- > src/mesa/vbo/vbo_split_inplace.c | 2 +- > 18 files changed, 41 insertions(+), 27 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_draw.c > b/src/mesa/drivers/dri/i965/brw_draw.c > index 7b33b76..0893b6d 100644 > --- a/src/mesa/drivers/dri/i965/brw_draw.c > +++ b/src/mesa/drivers/dri/i965/brw_draw.c > @@ -463,7 +463,8 @@ void brw_draw_prims( struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *unused_tfb_object) > + struct gl_transform_feedback_object *unused_tfb_object, > + struct gl_buffer_object *indirect ) > { > struct brw_context *brw = brw_context(ctx); > const struct gl_client_array **arrays = ctx->Array._DrawArrays; > diff --git a/src/mesa/drivers/dri/i965/brw_draw.h > b/src/mesa/drivers/dri/i965/brw_draw.h > index fb96813..119d6f1 100644 > --- a/src/mesa/drivers/dri/i965/brw_draw.h > +++ b/src/mesa/drivers/dri/i965/brw_draw.h > @@ -41,7 +41,8 @@ void brw_draw_prims( struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *unused_tfb_object); > + struct gl_transform_feedback_object *unused_tfb_object, > + struct gl_buffer_object *indirect ); > > void brw_draw_init( struct brw_context *brw ); > void brw_draw_destroy( struct brw_context *brw ); > diff --git a/src/mesa/drivers/dri/i965/brw_primitive_restart.c > b/src/mesa/drivers/dri/i965/brw_primitive_restart.c > index 2ee6055..a131151 100644 > --- a/src/mesa/drivers/dri/i965/brw_primitive_restart.c > +++ b/src/mesa/drivers/dri/i965/brw_primitive_restart.c > @@ -169,7 +169,7 @@ brw_handle_primitive_restart(struct gl_context *ctx, > /* Cut index should work for primitive restart, so use it > */ > brw->prim_restart.enable_cut_index = true; > - brw_draw_prims(ctx, prims, nr_prims, ib, GL_FALSE, -1, -1, NULL); > + brw_draw_prims(ctx, prims, nr_prims, ib, GL_FALSE, -1, -1, NULL, NULL); > brw->prim_restart.enable_cut_index = false; > } else { > /* Not all the primitive draw modes are supported by the cut index, > diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c > b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c > index 436db32..dff947a 100644 > --- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c > +++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c > @@ -222,7 +222,8 @@ TAG(vbo_render_prims)(struct gl_context *ctx, > const struct _mesa_index_buffer *ib, > GLboolean index_bounds_valid, > GLuint min_index, GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount); > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect); > > static GLboolean > vbo_maybe_split(struct gl_context *ctx, const struct gl_client_array > **arrays, > @@ -453,7 +454,8 @@ TAG(vbo_render_prims)(struct gl_context *ctx, > const struct _mesa_index_buffer *ib, > GLboolean index_bounds_valid, > GLuint min_index, GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount) > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect) > { > struct nouveau_render_state *render = to_render_state(ctx); > const struct gl_client_array **arrays = ctx->Array._DrawArrays; > @@ -489,7 +491,8 @@ TAG(vbo_check_render_prims)(struct gl_context *ctx, > const struct _mesa_index_buffer *ib, > GLboolean index_bounds_valid, > GLuint min_index, GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount) > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect) > { > struct nouveau_context *nctx = to_nouveau_context(ctx); > > @@ -498,12 +501,12 @@ TAG(vbo_check_render_prims)(struct gl_context *ctx, > if (nctx->fallback == HWTNL) > TAG(vbo_render_prims)(ctx, prims, nr_prims, ib, > index_bounds_valid, min_index, max_index, > - tfb_vertcount); > + tfb_vertcount, indirect); > > if (nctx->fallback == SWTNL) > _tnl_vbo_draw_prims(ctx, prims, nr_prims, ib, > index_bounds_valid, min_index, max_index, > - tfb_vertcount); > + tfb_vertcount, indirect); > } > > void > diff --git a/src/mesa/state_tracker/st_cb_rasterpos.c > b/src/mesa/state_tracker/st_cb_rasterpos.c > index 26a5590..420dc5f 100644 > --- a/src/mesa/state_tracker/st_cb_rasterpos.c > +++ b/src/mesa/state_tracker/st_cb_rasterpos.c > @@ -254,7 +254,7 @@ st_RasterPos(struct gl_context *ctx, const GLfloat v[4]) > * st_feedback_draw_vbo doesn't check for that flag. */ > ctx->Array._DrawArrays = rs->arrays; > st_feedback_draw_vbo(ctx, &rs->prim, 1, NULL, GL_TRUE, 0, 1, > - NULL); > + NULL, NULL); > ctx->Array._DrawArrays = saved_arrays; > > /* restore draw's rasterization stage depending on rendermode */ > diff --git a/src/mesa/state_tracker/st_draw.c > b/src/mesa/state_tracker/st_draw.c > index 51bb238..ef0a607 100644 > --- a/src/mesa/state_tracker/st_draw.c > +++ b/src/mesa/state_tracker/st_draw.c > @@ -195,7 +195,8 @@ st_draw_vbo(struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount) > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect) > { > struct st_context *st = st_context(ctx); > struct pipe_index_buffer ibuffer = {0}; > diff --git a/src/mesa/state_tracker/st_draw.h > b/src/mesa/state_tracker/st_draw.h > index 394473b..9c4d6cb 100644 > --- a/src/mesa/state_tracker/st_draw.h > +++ b/src/mesa/state_tracker/st_draw.h > @@ -55,7 +55,8 @@ st_draw_vbo(struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount); > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect); > > extern void > st_feedback_draw_vbo(struct gl_context *ctx, > @@ -65,7 +66,8 @@ st_feedback_draw_vbo(struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount); > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect); > > /** > * When drawing with VBOs, the addresses specified with > diff --git a/src/mesa/state_tracker/st_draw_feedback.c > b/src/mesa/state_tracker/st_draw_feedback.c > index 1ac9585..f556644 100644 > --- a/src/mesa/state_tracker/st_draw_feedback.c > +++ b/src/mesa/state_tracker/st_draw_feedback.c > @@ -116,7 +116,8 @@ st_feedback_draw_vbo(struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount) > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect) > { > struct st_context *st = st_context(ctx); > struct pipe_context *pipe = st->pipe; > diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c > index 637ac6f..d6b0900 100644 > --- a/src/mesa/tnl/t_draw.c > +++ b/src/mesa/tnl/t_draw.c > @@ -415,7 +415,8 @@ void _tnl_vbo_draw_prims(struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount) > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect) > { > const struct gl_client_array **arrays = ctx->Array._DrawArrays; > > diff --git a/src/mesa/tnl/tnl.h b/src/mesa/tnl/tnl.h > index 162b7ab..86ef505 100644 > --- a/src/mesa/tnl/tnl.h > +++ b/src/mesa/tnl/tnl.h > @@ -92,7 +92,8 @@ _tnl_vbo_draw_prims( struct gl_context *ctx, > GLboolean index_bounds_valid, > GLuint min_index, > GLuint max_index, > - struct gl_transform_feedback_object *tfb_vertcount ); > + struct gl_transform_feedback_object *tfb_vertcount, > + struct gl_buffer_object *indirect ); > > extern void > _tnl_RasterPos(struct gl_context *ctx, const GLfloat vObj[4]); > diff --git a/src/mesa/vbo/vbo.h b/src/mesa/vbo/vbo.h > index c4472e9..e1914c8 100644 > --- a/src/mesa/vbo/vbo.h > +++ b/src/mesa/vbo/vbo.h > @@ -53,6 +53,8 @@ struct _mesa_prim { > GLint basevertex; > GLuint num_instances; > GLuint base_instance; > + > + GLsizeiptr indirect_offset; > };
Nothing here uses indirect_offset; perhaps it should go in a later patch? Other than that, patches 1-4 are: Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev