[Mesa-dev] [PATCH v2 02/23] mesa: add KHR_no_error support for glVertexArrayVertexBuffers()
Fredrik Höglund
fredrik at kde.org
Mon Jun 5 23:04:57 UTC 2017
On Monday 05 June 2017, Samuel Pitoiset wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> Reviewed-by: Timothy Arceri <tarceri at 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,
>
More information about the mesa-dev
mailing list