[Mesa-dev] [PATCH 2/9] vbo: Move vbo_bind_arrays into a dd_driver_functions draw callback.

Brian Paul brianp at vmware.com
Tue Mar 20 15:16:20 UTC 2018


On 03/15/2018 11:48 PM, Mathias.Froehlich at gmx.net wrote:
> From: Mathias Fröhlich <mathias.froehlich at web.de>
> 
> Factor out that common call into the almost single place.
> Remove the _mesa_set_drawing_arrays call from vbo_{exec,save}_draw code
> paths as the fonction is now called through vbo_bind_arrays.

"function"

> And prepare that task of updating the list of struct gl_vertex_array
> entries for being pushed into drivers that want to finaly work on
> that data type.

Can you rephrase that?


> 
> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
> ---
>   src/mesa/vbo/vbo_context.c    | 27 ++++++++++++++++++++++++++
>   src/mesa/vbo/vbo_exec_array.c | 44 -------------------------------------------
>   src/mesa/vbo/vbo_exec_draw.c  |  1 -
>   src/mesa/vbo/vbo_save_draw.c  |  1 -
>   4 files changed, 27 insertions(+), 46 deletions(-)
> 
> diff --git a/src/mesa/vbo/vbo_context.c b/src/mesa/vbo/vbo_context.c
> index bef2b47fdf..28f494839e 100644
> --- a/src/mesa/vbo/vbo_context.c
> +++ b/src/mesa/vbo/vbo_context.c
> @@ -309,6 +309,31 @@ vbo_set_indirect_draw_func(struct gl_context *ctx,
>   }
>   
>   
> +/**
> + * Examine the enabled vertex arrays to set the exec->array.inputs[] values.
> + * These will point to the arrays to actually use for drawing.  Some will
> + * be user-provided arrays, other will be zero-stride const-valued arrays.
> + */
> +static void
> +vbo_bind_arrays(struct gl_context *ctx)
> +{
> +   struct vbo_context *vbo = vbo_context(ctx);
> +   struct vbo_exec_context *exec = &vbo->exec;
> +
> +   _mesa_set_drawing_arrays(ctx, vbo->draw_arrays.inputs);
> +
> +   if (exec->array.recalculate_inputs) {
> +      /* Finally update the inputs array */
> +      _vbo_update_inputs(ctx, &vbo->draw_arrays);
> +      ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> +      exec->array.recalculate_inputs = GL_FALSE;
> +   }
> +
> +   assert(ctx->NewState == 0);
> +   assert(ctx->Array._DrawVAO->NewArrays == 0);
> +}
> +
> +
>   void
>   _vbo_draw(struct gl_context *ctx, const struct _mesa_prim *prims,
>                  GLuint nr_prims, const struct _mesa_index_buffer *ib,
> @@ -317,6 +342,7 @@ _vbo_draw(struct gl_context *ctx, const struct _mesa_prim *prims,
>                  unsigned tfb_stream, struct gl_buffer_object *indirect)
>   {
>      struct vbo_context *vbo = vbo_context(ctx);
> +   vbo_bind_arrays(ctx);
>      vbo->draw_prims(ctx, prims, nr_prims, ib, index_bounds_valid,
>                      min_index, max_index, tfb_vertcount, tfb_stream, indirect);
>   }
> @@ -332,6 +358,7 @@ _vbo_draw_indirect(struct gl_context *ctx, GLuint mode,
>                           const struct _mesa_index_buffer *ib)
>   {
>      struct vbo_context *vbo = vbo_context(ctx);
> +   vbo_bind_arrays(ctx);
>      vbo->draw_indirect_prims(ctx, mode, indirect_data, indirect_offset,
>                               draw_count, stride, indirect_draw_count_buffer,
>                               indirect_draw_count_offset, ib);
> diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
> index 18b0032ae8..51fd434dc4 100644
> --- a/src/mesa/vbo/vbo_exec_array.c
> +++ b/src/mesa/vbo/vbo_exec_array.c
> @@ -360,30 +360,6 @@ enabled_filter(const struct gl_context *ctx)
>   }
>   
>   
> -/**
> - * Examine the enabled vertex arrays to set the exec->array.inputs[] values.
> - * These will point to the arrays to actually use for drawing.  Some will
> - * be user-provided arrays, other will be zero-stride const-valued arrays.
> - */
> -static void
> -vbo_bind_arrays(struct gl_context *ctx)
> -{
> -   struct vbo_context *vbo = vbo_context(ctx);
> -   struct vbo_exec_context *exec = &vbo->exec;
> -
> -   _mesa_set_drawing_arrays(ctx, vbo->draw_arrays.inputs);
> -
> -   if (exec->array.recalculate_inputs) {
> -      /* Finally update the inputs array */
> -      _vbo_update_inputs(ctx, &vbo->draw_arrays);
> -      ctx->NewDriverState |= ctx->DriverFlags.NewArray;
> -      exec->array.recalculate_inputs = GL_FALSE;
> -
> -      assert(ctx->NewState == 0);
> -   }
> -}
> -
> -
>   /**
>    * Helper function called by the other DrawArrays() functions below.
>    * This is where we handle primitive restart for drawing non-indexed
> @@ -400,8 +376,6 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
>      if (skip_validated_draw(ctx))
>         return;
>   
> -   vbo_bind_arrays(ctx);
> -
>      /* OpenGL 4.5 says that primitive restart is ignored with non-indexed
>       * draws.
>       */
> @@ -818,8 +792,6 @@ vbo_validated_drawrangeelements(struct gl_context *ctx, GLenum mode,
>      if (skip_draw_elements(ctx, count, indices))
>         return;
>   
> -   vbo_bind_arrays(ctx);
> -
>      ib.count = count;
>      ib.index_size = sizeof_ib_type(type);
>      ib.obj = ctx->Array.VAO->IndexBufferObj;
> @@ -1251,8 +1223,6 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
>         return;
>      }
>   
> -   vbo_bind_arrays(ctx);
> -
>      min_index_ptr = (uintptr_t) indices[0];
>      max_index_ptr = 0;
>      for (i = 0; i < primcount; i++) {
> @@ -1458,8 +1428,6 @@ vbo_draw_transform_feedback(struct gl_context *ctx, GLenum mode,
>      if (skip_validated_draw(ctx))
>         return;
>   
> -   vbo_bind_arrays(ctx);
> -
>      /* init most fields to zero */
>      memset(&prim, 0, sizeof(prim));
>      prim.begin = 1;
> @@ -1557,8 +1525,6 @@ static void
>   vbo_validated_drawarraysindirect(struct gl_context *ctx,
>                                    GLenum mode, const GLvoid *indirect)
>   {
> -   vbo_bind_arrays(ctx);
> -
>      ctx->Driver.DrawIndirect(ctx, mode,
>                               ctx->DrawIndirectBuffer, (GLsizeiptr) indirect,
>                               1 /* draw_count */ , 16 /* stride */ ,
> @@ -1580,8 +1546,6 @@ vbo_validated_multidrawarraysindirect(struct gl_context *ctx,
>      if (primcount == 0)
>         return;
>   
> -   vbo_bind_arrays(ctx);
> -
>      ctx->Driver.DrawIndirect(ctx, mode, ctx->DrawIndirectBuffer, offset,
>                               primcount, stride, NULL, 0, NULL);
>   
> @@ -1597,8 +1561,6 @@ vbo_validated_drawelementsindirect(struct gl_context *ctx,
>   {
>      struct _mesa_index_buffer ib;
>   
> -   vbo_bind_arrays(ctx);
> -
>      ib.count = 0;                /* unknown */
>      ib.index_size = sizeof_ib_type(type);
>      ib.obj = ctx->Array.VAO->IndexBufferObj;
> @@ -1626,8 +1588,6 @@ vbo_validated_multidrawelementsindirect(struct gl_context *ctx,
>      if (primcount == 0)
>         return;
>   
> -   vbo_bind_arrays(ctx);
> -
>      /* NOTE: IndexBufferObj is guaranteed to be a VBO. */
>   
>      ib.count = 0;                /* unknown */
> @@ -1798,8 +1758,6 @@ vbo_validated_multidrawarraysindirectcount(struct gl_context *ctx,
>      if (maxdrawcount == 0)
>         return;
>   
> -   vbo_bind_arrays(ctx);
> -
>      ctx->Driver.DrawIndirect(ctx, mode,
>                               ctx->DrawIndirectBuffer, offset,
>                               maxdrawcount, stride,
> @@ -1824,8 +1782,6 @@ vbo_validated_multidrawelementsindirectcount(struct gl_context *ctx,
>      if (maxdrawcount == 0)
>         return;
>   
> -   vbo_bind_arrays(ctx);
> -
>      /* NOTE: IndexBufferObj is guaranteed to be a VBO. */
>   
>      ib.count = 0;                /* unknown */
> diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c
> index 628720b1d0..1ed9d5eac0 100644
> --- a/src/mesa/vbo/vbo_exec_draw.c
> +++ b/src/mesa/vbo/vbo_exec_draw.c
> @@ -238,7 +238,6 @@ vbo_exec_bind_arrays(struct gl_context *ctx)
>      /* The exec VAO is not immutable, so we need to set manually */
>      ctx->NewDriverState |= ctx->DriverFlags.NewArray;
>   
> -   _mesa_set_drawing_arrays(ctx, vbo->draw_arrays.inputs);
>      /* Finally update the inputs array */
>      _vbo_update_inputs(ctx, &vbo->draw_arrays);
>   }
> diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c
> index 280e16cb81..ed3b50434f 100644
> --- a/src/mesa/vbo/vbo_save_draw.c
> +++ b/src/mesa/vbo/vbo_save_draw.c
> @@ -208,7 +208,6 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
>   
>         /* Finally update the inputs array */
>         _vbo_update_inputs(ctx, &vbo->draw_arrays);
> -      _mesa_set_drawing_arrays(ctx, vbo->draw_arrays.inputs);
>   
>         assert(ctx->NewState == 0);
>   
> 



More information about the mesa-dev mailing list