[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