From 96b646346372ec0e2b9336ef26e0d2a084b69400 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fredrik=20H=C3=B6glund?= Date: Mon, 2 Mar 2015 18:27:18 +0100 Subject: [PATCH] mesa: Implement DisableVertexArrayAttrib Reviewed-by: Laura Ekstrand --- src/mapi/glapi/gen/ARB_direct_state_access.xml | 5 +++ src/mesa/main/tests/dispatch_sanity.cpp | 1 + src/mesa/main/varray.c | 45 ++++++++++++++++++++------ src/mesa/main/varray.h | 4 +++ 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 26328e9..3592b1c 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -455,6 +455,11 @@ + + + + + diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index a4a0644..7909d38 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -1018,6 +1018,7 @@ const struct function gl_core_functions_possible[] = { { "glTextureBuffer", 45, -1 }, { "glTextureBufferRange", 45, -1 }, { "glCreateVertexArrays", 45, -1 }, + { "glDisableVertexArrayAttrib", 45, -1 }, { "glCreateSamplers", 45, -1 }, { "glCreateProgramPipelines", 45, -1 }, { "glCreateQueries", 45, -1 }, diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index d003c6d..b5370a8 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -744,20 +744,17 @@ _mesa_EnableVertexAttribArray(GLuint index) } -void GLAPIENTRY -_mesa_DisableVertexAttribArray(GLuint index) +static void +disable_vertex_array_attrib(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + GLuint index, + const char *func) { - struct gl_vertex_array_object *vao; - GET_CURRENT_CONTEXT(ctx); - if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glDisableVertexAttribArrayARB(index)"); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(index)", func); return; } - vao = ctx->Array.VAO; - assert(VERT_ATTRIB_GENERIC(index) < ARRAY_SIZE(vao->VertexAttrib)); if (vao->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled) { @@ -770,6 +767,36 @@ _mesa_DisableVertexAttribArray(GLuint index) } +void GLAPIENTRY +_mesa_DisableVertexAttribArray(GLuint index) +{ + GET_CURRENT_CONTEXT(ctx); + disable_vertex_array_attrib(ctx, ctx->Array.VAO, index, + "glDisableVertexAttribArray"); +} + + +void GLAPIENTRY +_mesa_DisableVertexArrayAttrib(GLuint vaobj, GLuint index) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_vertex_array_object *vao; + + /* The ARB_direct_state_access specification says: + * + * "An INVALID_OPERATION error is generated by EnableVertexArrayAttrib + * and DisableVertexArrayAttrib if is not + * [compatibility profile: zero or] the name of an existing vertex + * array object." + */ + vao = _mesa_lookup_vao_err(ctx, vaobj, "glDisableVertexArrayAttrib"); + if (!vao) + return; + + disable_vertex_array_attrib(ctx, vao, index, "glDisableVertexArrayAttrib"); +} + + /** * Return info for a vertex attribute array (no alias with legacy * vertex attributes (pos, normal, color, etc)). This function does diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index c70545a..f783f88 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -180,6 +180,10 @@ _mesa_DisableVertexAttribArray(GLuint index); extern void GLAPIENTRY +_mesa_DisableVertexArrayAttrib(GLuint vaobj, GLuint index); + + +extern void GLAPIENTRY _mesa_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params); extern void GLAPIENTRY -- 2.7.4