[Mesa-dev] [PATCH 6/8] vbo: Readd the arrays argument to the legacy draw methods.
Brian Paul
brianp at vmware.com
Thu Mar 29 17:05:08 UTC 2018
On 03/25/2018 12:42 PM, Mathias.Froehlich at gmx.net wrote:
> From: Mathias Fröhlich <mathias.froehlich at web.de>
>
> The legacy draw paths from back before 2012 contained a gl_vertex_array
> array for the inputs to be used for draw. So all draw methods from legacy
> drivers and evereything that goes through tnl are originally written
"everything"
-Brian
> for this calling convention. The same goes for tools like t_rebase or
> vbo_split*, that even partly still have the original calling convention
> with a currently unused such pointer.
> Back in 2012 patch 50f7e75
>
> mesa: move gl_client_array*[] from vbo_draw_func into gl_context
>
> introduced Array._DrawArrays, which was something that was IMO aiming for
> a similar direction than Array._DrawVAO introduced recently.
> Now several tools like t_rebase and vbo_split*, which are mostly used by
> tnl based drivers, would need to be converted to use the internal
> Array._DrawVAO instead of Array._DrawArrays. The same goes for the driver
> backends that use any of these tools.
> Alternatively we can reintroduce the gl_vertex_array array in its call
> argument list and put these tools finally into the tnl directory.
> So this change reintroduces this gl_vertex_array array for the legacy
> draw paths that are still required for the tools t_rebase and vbo_split*.
> A followup will move vbo_split also into tnl.
>
> Note that none of the affected drivers use the DriverFlags.NewArray
> driver bit. So it should be safe to remove this also for the legacy
> draw path.
>
> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
> ---
> src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c | 11 +++++++----
> src/mesa/tnl/t_draw.c | 7 ++++---
> src/mesa/tnl/t_rebase.c | 10 ++--------
> src/mesa/tnl/tnl.h | 1 +
> src/mesa/vbo/vbo.h | 2 ++
> src/mesa/vbo/vbo_split_copy.c | 8 +-------
> src/mesa/vbo/vbo_split_inplace.c | 8 +-------
> 7 files changed, 18 insertions(+), 29 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
> index 10b5c15e41..4533069692 100644
> --- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
> +++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
> @@ -239,6 +239,7 @@ get_max_client_stride(struct gl_context *ctx, const struct gl_vertex_array *arra
>
> static void
> TAG(vbo_render_prims)(struct gl_context *ctx,
> + const struct gl_vertex_array *arrays,
> const struct _mesa_prim *prims, GLuint nr_prims,
> const struct _mesa_index_buffer *ib,
> GLboolean index_bounds_valid,
> @@ -476,6 +477,7 @@ vbo_draw_imm(struct gl_context *ctx, const struct gl_vertex_array *arrays,
>
> static void
> TAG(vbo_render_prims)(struct gl_context *ctx,
> + const struct gl_vertex_array *arrays,
> const struct _mesa_prim *prims, GLuint nr_prims,
> const struct _mesa_index_buffer *ib,
> GLboolean index_bounds_valid,
> @@ -485,7 +487,6 @@ TAG(vbo_render_prims)(struct gl_context *ctx,
> struct gl_buffer_object *indirect)
> {
> struct nouveau_render_state *render = to_render_state(ctx);
> - const struct gl_vertex_array *arrays = ctx->Array._DrawArrays;
>
> if (!index_bounds_valid)
> vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index,
> @@ -514,6 +515,7 @@ TAG(vbo_render_prims)(struct gl_context *ctx,
>
> static void
> TAG(vbo_check_render_prims)(struct gl_context *ctx,
> + const struct gl_vertex_array *arrays,
> const struct _mesa_prim *prims, GLuint nr_prims,
> const struct _mesa_index_buffer *ib,
> GLboolean index_bounds_valid,
> @@ -527,12 +529,12 @@ TAG(vbo_check_render_prims)(struct gl_context *ctx,
> nouveau_validate_framebuffer(ctx);
>
> if (nctx->fallback == HWTNL)
> - TAG(vbo_render_prims)(ctx, prims, nr_prims, ib,
> + TAG(vbo_render_prims)(ctx, arrays, prims, nr_prims, ib,
> index_bounds_valid, min_index, max_index,
> tfb_vertcount, stream, indirect);
>
> if (nctx->fallback == SWTNL)
> - _tnl_draw_prims(ctx, prims, nr_prims, ib,
> + _tnl_draw_prims(ctx, arrays, prims, nr_prims, ib,
> index_bounds_valid, min_index, max_index,
> tfb_vertcount, stream, indirect);
> }
> @@ -550,7 +552,8 @@ TAG(vbo_draw)(struct gl_context *ctx,
> /* Borrow and update the inputs list from the tnl context */
> _tnl_bind_inputs(ctx);
>
> - TAG(vbo_check_render_prims)(ctx, prims, nr_prims, ib,
> + TAG(vbo_check_render_prims)(ctx, ctx->Array._DrawArrays,
> + prims, nr_prims, ib,
> index_bounds_valid, min_index, max_index,
> tfb_vertcount, stream, indirect);
> }
> diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c
> index 96d6b988d3..a0fd58432a 100644
> --- a/src/mesa/tnl/t_draw.c
> +++ b/src/mesa/tnl/t_draw.c
> @@ -426,6 +426,7 @@ static void unmap_vbos( struct gl_context *ctx,
> /* This is the main workhorse doing all the rendering work.
> */
> void _tnl_draw_prims(struct gl_context *ctx,
> + const struct gl_vertex_array *arrays,
> const struct _mesa_prim *prim,
> GLuint nr_prims,
> const struct _mesa_index_buffer *ib,
> @@ -437,7 +438,6 @@ void _tnl_draw_prims(struct gl_context *ctx,
> struct gl_buffer_object *indirect)
> {
> TNLcontext *tnl = TNL_CONTEXT(ctx);
> - const struct gl_vertex_array *arrays = ctx->Array._DrawArrays;
> const GLuint TEST_SPLIT = 0;
> const GLint max = TEST_SPLIT ? 8 : tnl->vb.Size - MAX_CLIPPED_VERTICES;
> GLint max_basevertex = prim->basevertex;
> @@ -563,8 +563,9 @@ _tnl_draw(struct gl_context *ctx,
> */
> _tnl_bind_inputs(ctx);
>
> - _tnl_draw_prims(ctx, prim, nr_prims, ib, index_bounds_valid,
> - min_index, max_index, tfb_vertcount, stream, indirect);
> + _tnl_draw_prims(ctx, ctx->Array._DrawArrays, prim, nr_prims, ib,
> + index_bounds_valid, min_index, max_index,
> + tfb_vertcount, stream, indirect);
> }
>
>
> diff --git a/src/mesa/tnl/t_rebase.c b/src/mesa/tnl/t_rebase.c
> index 0fcee03b24..19e759f44b 100644
> --- a/src/mesa/tnl/t_rebase.c
> +++ b/src/mesa/tnl/t_rebase.c
> @@ -115,7 +115,6 @@ void t_rebase_prims( struct gl_context *ctx,
>
> struct _mesa_index_buffer tmp_ib;
> struct _mesa_prim *tmp_prims = NULL;
> - const struct gl_vertex_array *saved_arrays = ctx->Array._DrawArrays;
> void *tmp_indices = NULL;
> GLuint i;
>
> @@ -233,10 +232,8 @@ void t_rebase_prims( struct gl_context *ctx,
>
> /* Re-issue the draw call.
> */
> - ctx->Array._DrawArrays = tmp_arrays;
> - ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> -
> - draw( ctx,
> + draw( ctx,
> + tmp_arrays,
> prim,
> nr_prims,
> ib,
> @@ -245,9 +242,6 @@ void t_rebase_prims( struct gl_context *ctx,
> max_index - min_index,
> NULL, 0, NULL );
>
> - ctx->Array._DrawArrays = saved_arrays;
> - ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> -
> free(tmp_indices);
>
> free(tmp_prims);
> diff --git a/src/mesa/tnl/tnl.h b/src/mesa/tnl/tnl.h
> index 14e590501e..e79c4f6204 100644
> --- a/src/mesa/tnl/tnl.h
> +++ b/src/mesa/tnl/tnl.h
> @@ -83,6 +83,7 @@ struct _mesa_index_buffer;
>
> void
> _tnl_draw_prims(struct gl_context *ctx,
> + const struct gl_vertex_array *arrays,
> const struct _mesa_prim *prim,
> GLuint nr_prims,
> const struct _mesa_index_buffer *ib,
> diff --git a/src/mesa/vbo/vbo.h b/src/mesa/vbo/vbo.h
> index 13f77d9db3..37aa59d306 100644
> --- a/src/mesa/vbo/vbo.h
> +++ b/src/mesa/vbo/vbo.h
> @@ -145,6 +145,7 @@ vbo_save_EndCallList(struct gl_context *ctx);
> * Draw a number of primitives.
> * \param prims array [nr_prims] describing what to draw (prim type,
> * vertex count, first index, instance count, etc).
> + * \param arrays array of vertex arrays for draw
> * \param ib index buffer for indexed drawing, NULL for array drawing
> * \param index_bounds_valid are min_index and max_index valid?
> * \param min_index lowest vertex index used
> @@ -158,6 +159,7 @@ vbo_save_EndCallList(struct gl_context *ctx);
> * This may be deprecated in the future
> */
> typedef void (*vbo_draw_func)(struct gl_context *ctx,
> + const struct gl_vertex_array* arrays,
> const struct _mesa_prim *prims,
> GLuint nr_prims,
> const struct _mesa_index_buffer *ib,
> diff --git a/src/mesa/vbo/vbo_split_copy.c b/src/mesa/vbo/vbo_split_copy.c
> index 96828a073f..2aab670de1 100644
> --- a/src/mesa/vbo/vbo_split_copy.c
> +++ b/src/mesa/vbo/vbo_split_copy.c
> @@ -179,7 +179,6 @@ static void
> flush(struct copy_context *copy)
> {
> struct gl_context *ctx = copy->ctx;
> - const struct gl_vertex_array *saved_arrays = ctx->Array._DrawArrays;
> GLuint i;
>
> /* Set some counters:
> @@ -198,10 +197,8 @@ flush(struct copy_context *copy)
> (void) dump_draw_info;
> #endif
>
> - ctx->Array._DrawArrays = copy->dstarray;
> - ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> -
> copy->draw(ctx,
> + copy->dstarray,
> copy->dstprim,
> copy->dstprim_nr,
> ©->dstib,
> @@ -210,9 +207,6 @@ flush(struct copy_context *copy)
> copy->dstbuf_nr - 1,
> NULL, 0, NULL);
>
> - ctx->Array._DrawArrays = saved_arrays;
> - ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> -
> /* Reset all pointers:
> */
> copy->dstprim_nr = 0;
> diff --git a/src/mesa/vbo/vbo_split_inplace.c b/src/mesa/vbo/vbo_split_inplace.c
> index 971c52a078..b63c05c75f 100644
> --- a/src/mesa/vbo/vbo_split_inplace.c
> +++ b/src/mesa/vbo/vbo_split_inplace.c
> @@ -63,7 +63,6 @@ static void
> flush_vertex( struct split_context *split)
> {
> struct gl_context *ctx = split->ctx;
> - const struct gl_vertex_array *saved_arrays = ctx->Array._DrawArrays;
> struct _mesa_index_buffer ib;
> GLuint i;
>
> @@ -84,10 +83,8 @@ flush_vertex( struct split_context *split)
>
> assert(split->max_index >= split->min_index);
>
> - ctx->Array._DrawArrays = split->array;
> - ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> -
> split->draw(ctx,
> + split->array,
> split->dstprim,
> split->dstprim_nr,
> split->ib ? &ib : NULL,
> @@ -96,9 +93,6 @@ flush_vertex( struct split_context *split)
> split->max_index,
> NULL, 0, NULL);
>
> - ctx->Array._DrawArrays = saved_arrays;
> - ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> -
> split->dstprim_nr = 0;
> split->min_index = ~0;
> split->max_index = 0;
>
More information about the mesa-dev
mailing list