[Mesa-dev] [PATCH 00/11] Implement GL_ARB_vertex_attrib_binding

Fredrik Höglund fredrik at kde.org
Mon Oct 28 23:33:43 CET 2013

This extension decouples the vertex attributes from the vertex buffer
bindings, making it possible to change buffers without having to
respecify the formats.  The mapping between attributes and vertex
buffer bindings also becomes configurable.

This series adds new state structs and changes the gl*Pointer()
functions to update the new states as described in the specification.
To avoid making invasive changes in the vbo module I decided to keep
the gl_client_arrays for now.  Those are now derived from the
gl_vertex_attrib_array and gl_vertex_buffer_binding states.
In theory this should also make it possible to incrementally port
other parts of Mesa to use the new states directly.

Note that this adds a glVertexAttribLFormat() entry point.
Mesa doesn't support double-precision attributes (yet), but the
GL specification says that the results of using a glVertex*L*()
function to set a non-double precision attribute are undefined,
so I don't think this is a problem.

The extension is written against the GL 4.2 specification, and
based on the tables it refers to one can infer that it requires
ARB_vertex_array_bgra, ARB_vertex_type_2_10_10_10_rev and
ARB_ES2_compatibility.  I think the dependencies section should
have language that removes references to vertex formats added by
those extensions when they're not supported, so in this series
I have enabled the extension unconditionally.

There are no regressions with piglit quick.tests.

Fredrik Höglund (11):
      mesa: Restore gl_array_object::NewArray
      mesa: Split out the format code from update_array()
      mesa: Rename gl_array_object::VertexAttrib to _VertexAttrib
      glapi: Add infrastructure for ARB_vertex_attrib_binding
      mesa: Add ARB_vertex_attrib_binding
      mesa: Don't use derived vertex state in the FF vertex program
      mesa: Don't use derived vertex state in Get* queries
      mesa: Don't use derived vertex state in check_valid_to_render()
      mesa: Add Get* support for ARB_vertex_attrib_binding
      mesa: Handle zero-stride arrays in _mesa_update_array_max_element()
      mesa: Optimize rebinding the same VBO

 src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml |   58 ++
 src/mapi/glapi/gen/Makefile.am                   |    1 +
 src/mapi/glapi/gen/gl_API.xml                    |    6 +-
 src/mesa/main/api_arrayelt.c                     |   43 +-
 src/mesa/main/arrayobj.c                         |   73 ++-
 src/mesa/main/arrayobj.h                         |    5 +
 src/mesa/main/attrib.c                           |    7 +-
 src/mesa/main/bufferobj.c                        |    4 +-
 src/mesa/main/context.c                          |    4 +
 src/mesa/main/enable.c                           |    2 +
 src/mesa/main/extensions.c                       |    1 +
 src/mesa/main/get.c                              |   30 +-
 src/mesa/main/get_hash_params.py                 |   17 +-
 src/mesa/main/mtypes.h                           |   53 +-
 src/mesa/main/state.c                            |    4 +
 src/mesa/main/tests/dispatch_sanity.cpp          |   12 +-
 src/mesa/main/varray.c                           |  689 ++++++++++++++++++---
 src/mesa/main/varray.h                           |   77 ++-
 src/mesa/vbo/vbo_exec_array.c                    |   12 +-
 19 files changed, 946 insertions(+), 152 deletions(-)

More information about the mesa-dev mailing list