From 1429b5cd59a6030674e4ca6af7c11713b5e1e2c9 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 19 Jul 2017 15:43:28 +0200 Subject: [PATCH] mesa: add vertex_array_element_buffer() helper Signed-off-by: Samuel Pitoiset Reviewed-by: Timothy Arceri --- src/mesa/main/arrayobj.c | 59 ++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c index 29dd93b1c7c..89fa473ff87 100644 --- a/src/mesa/main/arrayobj.c +++ b/src/mesa/main/arrayobj.c @@ -642,41 +642,58 @@ _mesa_IsVertexArray( GLuint id ) * This is the ARB_direct_state_access equivalent of * glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer). */ -void GLAPIENTRY -_mesa_VertexArrayElementBuffer(GLuint vaobj, GLuint buffer) +static ALWAYS_INLINE void +vertex_array_element_buffer(struct gl_context *ctx, GLuint vaobj, GLuint buffer, + bool no_error) { - GET_CURRENT_CONTEXT(ctx); struct gl_vertex_array_object *vao; struct gl_buffer_object *bufObj; ASSERT_OUTSIDE_BEGIN_END(ctx); - /* The GL_ARB_direct_state_access specification says: - * - * "An INVALID_OPERATION error is generated by VertexArrayElementBuffer - * if is not [compatibility profile: zero or] the name of an - * existing vertex array object." - */ - vao =_mesa_lookup_vao_err(ctx, vaobj, "glVertexArrayElementBuffer"); - if (!vao) - return; + if (!no_error) { + /* The GL_ARB_direct_state_access specification says: + * + * "An INVALID_OPERATION error is generated by + * VertexArrayElementBuffer if is not [compatibility profile: + * zero or] the name of an existing vertex array object." + */ + vao =_mesa_lookup_vao_err(ctx, vaobj, "glVertexArrayElementBuffer"); + if (!vao) + return; + } else { + vao = _mesa_lookup_vao(ctx, vaobj); + } - /* The GL_ARB_direct_state_access specification says: - * - * "An INVALID_OPERATION error is generated if is not zero or - * the name of an existing buffer object." - */ - if (buffer != 0) - bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, - "glVertexArrayElementBuffer"); - else + if (buffer != 0) { + if (!no_error) { + /* The GL_ARB_direct_state_access specification says: + * + * "An INVALID_OPERATION error is generated if is not zero + * or the name of an existing buffer object." + */ + bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, + "glVertexArrayElementBuffer"); + } else { + bufObj = _mesa_lookup_bufferobj(ctx, buffer); + } + } else { bufObj = ctx->Shared->NullBufferObj; + } if (bufObj) _mesa_reference_buffer_object(ctx, &vao->IndexBufferObj, bufObj); } +void GLAPIENTRY +_mesa_VertexArrayElementBuffer(GLuint vaobj, GLuint buffer) +{ + GET_CURRENT_CONTEXT(ctx); + vertex_array_element_buffer(ctx, vaobj, buffer, false); +} + + void GLAPIENTRY _mesa_GetVertexArrayiv(GLuint vaobj, GLenum pname, GLint *param) { -- 2.30.2