Mesa (master): vbo: fix VBO optimization regression
Brian Paul
brianp at kemper.freedesktop.org
Thu Jan 18 22:09:48 UTC 2018
Module: Mesa
Branch: master
Commit: 9e6efdd1776cb76386d8aa774926c77aa2db7804
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9e6efdd1776cb76386d8aa774926c77aa2db7804
Author: Brian Paul <brianp at vmware.com>
Date: Wed Jan 17 15:15:54 2018 -0700
vbo: fix VBO optimization regression
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.
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
---
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 f5c4a900b3..ddf911700f 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 1dae91b0b7..9c0e937fe4 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-commit
mailing list