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(-) _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev