On Monday 05 June 2017, Samuel Pitoiset wrote: > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > Reviewed-by: Timothy Arceri <tarc...@itsqueeze.com> > --- > src/mapi/glapi/gen/ARB_direct_state_access.xml | 2 +- > src/mesa/main/varray.c | 15 +++++++++++++++ > src/mesa/main/varray.h | 6 ++++++ > 3 files changed, 22 insertions(+), 1 deletion(-) > > diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml > b/src/mapi/glapi/gen/ARB_direct_state_access.xml > index f13a1444a9..cb24d7981c 100644 > --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml > +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml > @@ -607,7 +607,7 @@ > <param name="stride" type="GLsizei" /> > </function> > > - <function name="VertexArrayVertexBuffers"> > + <function name="VertexArrayVertexBuffers" no_error="true"> > <param name="vaobj" type="GLuint" /> > <param name="first" type="GLuint" /> > <param name="count" type="GLsizei" /> > diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c > index c2c771c173..0cc8b56c64 100644 > --- a/src/mesa/main/varray.c > +++ b/src/mesa/main/varray.c > @@ -2273,6 +2273,21 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei count, > const GLuint *buffers, > > > void GLAPIENTRY > +_mesa_VertexArrayVertexBuffers_no_error(GLuint vaobj, GLuint first, > + GLsizei count, const GLuint *buffers, > + const GLintptr *offsets, > + const GLsizei *strides) > +{ > + GET_CURRENT_CONTEXT(ctx); > + > + struct gl_vertex_array_object *vao = _mesa_lookup_vao(ctx, vaobj);
_mesa_lookup_vao_err() has an optimization for DSA entry points in that it keeps a reference to the last looked up VAO in the context, and checks if the ID of that object matches the requested ID before it calls _mesa_HashLookup(). The idea is that when a client makes a series of calls like this: glVertexArrayAttribFormat(vaobj, ...); glVertexArrayAttribBinding(vaobj, ...); glEnableVertexArrayAttrib(vaobj, ...); We only look up the object once. By using _mesa_lookup_vao() here, you bypass that optimization. That being said, glVertexArrayVertexBuffers() may be the one vertex array function that doesn't benefit from that optimization. > + vertex_array_vertex_buffers(ctx, vao, first, count, > + buffers, offsets, strides, true, > + "glVertexArrayVertexBuffers"); > +} > + > + > +void GLAPIENTRY > _mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, > const GLuint *buffers, > const GLintptr *offsets, const GLsizei > *strides) > diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h > index 24e37a9bf7..90ca8483ca 100644 > --- a/src/mesa/main/varray.h > +++ b/src/mesa/main/varray.h > @@ -379,6 +379,12 @@ extern void GLAPIENTRY > _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, > const GLintptr *offsets, const GLsizei *strides); > > +void GLAPIENTRY > +_mesa_VertexArrayVertexBuffers_no_error(GLuint vaobj, GLuint first, > + GLsizei count, const GLuint *buffers, > + const GLintptr *offsets, > + const GLsizei *strides); > + > extern void GLAPIENTRY > _mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, > const GLuint *buffers, > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev