[Mesa-dev] [PATCH 4/4] vbo: fix VBO optimization regression

Ian Romanick idr at freedesktop.org
Thu Jan 18 22:10:12 UTC 2018


Mark: Can you check that this fixes the G33 regression that you
mentioned to me this morning?

On 01/17/2018 02:57 PM, Brian Paul wrote:
> The optimization in change 8e4efdc895ea ("vbo: optimize some display
> list drawing") missed the loopback case.  This is used when the
> glBegin/End primitive doesn't have a uniform set of vertex attributes.
> The new Piglit gl-1.0-dlist-materials test hits this.
> 
> So check the aligned_vertex_buffer_offset(list) value and adjust the
> buffer offset accordingly.
> 
> We also need to remove the 'start == 0' assertion in the loopback
> code since it no longer applies.
> ---
>  src/mesa/vbo/vbo_save_draw.c     | 5 ++++-
>  src/mesa/vbo/vbo_save_loopback.c | 6 +++---
>  2 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c
> index 6bccc85..a63e067 100644
> --- a/src/mesa/vbo/vbo_save_draw.c
> +++ b/src/mesa/vbo/vbo_save_draw.c
> @@ -240,8 +240,11 @@ loopback_vertex_list(struct gl_context *ctx,
>                                   list->vertex_store->bufferobj,
>                                   MAP_INTERNAL);
>  
> +   unsigned buffer_offset =
> +      aligned_vertex_buffer_offset(list) ? 0 : list->buffer_offset;
> +
>     vbo_loopback_vertex_list(ctx,
> -                            (const GLfloat *)(buffer + list->buffer_offset),
> +                            (const GLfloat *) (buffer + buffer_offset),
>                              list->attrsz,
>                              list->prims,
>                              list->prim_count,
> diff --git a/src/mesa/vbo/vbo_save_loopback.c b/src/mesa/vbo/vbo_save_loopback.c
> index 1dae91b..9c0e937 100644
> --- a/src/mesa/vbo/vbo_save_loopback.c
> +++ b/src/mesa/vbo/vbo_save_loopback.c
> @@ -107,17 +107,17 @@ loopback_prim(struct gl_context *ctx,
>     GLuint k;
>  
>     if (0)
> -      printf("loopback prim %s(%s,%s) verts %d..%d\n",
> +      printf("loopback prim %s(%s,%s) verts %d..%d  vsize %d\n",
>               _mesa_lookup_prim_by_nr(prim->mode),
>               prim->begin ? "begin" : "..",
>               prim->end ? "end" : "..",
> -             start, end);
> +             start, end,
> +             vertex_size);
>  
>     if (prim->begin) {
>        CALL_Begin(GET_DISPATCH(), (prim->mode));
>     }
>     else {
> -      assert(start == 0);
>        start += wrap_count;
>     }
>  
> 



More information about the mesa-dev mailing list