[Mesa-dev] [PATCH V3 01/13] mesa: add indirect drawing buffer parameter to draw functions
Kenneth Graunke
kenneth at whitecape.org
Tue Nov 12 12:14:33 PST 2013
On 11/09/2013 01:02 AM, Chris Forbes wrote:
> From: Christoph Bumiller <e0425955 at 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 <kenneth at whitecape.org>
More information about the mesa-dev
mailing list