vbo: reduce number of vertex buffer mappings for vertex attributes
authorBrian Paul <brianp@vmware.com>
Thu, 15 Oct 2015 18:33:00 +0000 (12:33 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 20 Oct 2015 18:52:40 +0000 (12:52 -0600)
commitf6d4e20d10d2316b70b73676e97b2c1e5cf7634a
tree6d17b5d15172830b7885174c95df2e2af3d584e2
parentd11fefa96165836ffeed531a74319a64aa98a696
vbo: reduce number of vertex buffer mappings for vertex attributes

Whenever we got a glColor, glNormal, glTexCoord, etc. call outside a
glBegin/End pair, we'd immediately map a vertex buffer to begin
accumulating vertex data.  In some cases, such as with display lists,
this led to excessive vertex buffer mapping.  For example, if we have
a display list such as:

glNewList(42, GL_COMPILE);
glBegin(prim);
glVertex2f();
...
glVertex2f();
glEnd();
glEndList();

Then did:

glColor3f();
glCallList(42);

We'd map a vertex buffer as soon as we saw glColor3f but we'd never
actually write anything to it.  Note that the vertex position data
was put into a vertex buffer during display list compilation.

With this change, we delay mapping the vertex buffer until we actually
have a vertex to write to it (triggered by a glVertex() call).  In the
above case, we no longer map a vertex buffer when setting the color and
calling the list.

For drivers such as VMware's, reducing buffer mappings gives improved
performance.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/vbo/vbo_exec_api.c