--- src/mapi/glapi/gen/ARB_direct_state_access.xml | 5 +++ src/mesa/main/tests/dispatch_sanity.cpp | 1 + src/mesa/main/varray.c | 46 ++++++++++++++++++++------ src/mesa/main/varray.h | 4 +++ 4 files changed, 46 insertions(+), 10 deletions(-)
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index cc9c350..f92734d 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -391,5 +391,10 @@ <param name="index" type="GLuint" /> </function> + <function name="EnableVertexArrayAttrib" offset="assign"> + <param name="vaobj" type="GLuint" /> + <param name="index" type="GLuint" /> + </function> + </category> </OpenGLAPI> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 1d82038..2b7d4cb 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -972,6 +972,7 @@ const struct function gl_core_functions_possible[] = { { "glTextureBufferRange", 45, -1 }, { "glCreateVertexArrays", 45, -1 }, { "glDisableVertexArrayAttrib", 45, -1 }, + { "glEnableVertexArrayAttrib", 45, -1 }, /* GL_EXT_polygon_offset_clamp */ { "glPolygonOffsetClampEXT", 11, -1 }, diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index 203c858..2017167 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -700,21 +700,17 @@ _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type, } - -void GLAPIENTRY -_mesa_EnableVertexAttribArray(GLuint index) +static void +enable_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, - "glEnableVertexAttribArrayARB(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) { @@ -727,6 +723,36 @@ _mesa_EnableVertexAttribArray(GLuint index) } +void GLAPIENTRY +_mesa_EnableVertexAttribArray(GLuint index) +{ + GET_CURRENT_CONTEXT(ctx); + enable_vertex_array_attrib(ctx, ctx->Array.VAO, index, + "glEnableVertexAttribArray"); +} + + +void GLAPIENTRY +_mesa_EnableVertexArrayAttrib(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 <vaobj> is not + * [compatibility profile: zero or] the name of an existing vertex + * array object." + */ + vao = _mesa_lookup_vao_err(ctx, vaobj, "glEnableVertexArrayAttrib"); + if (!vao) + return; + + enable_vertex_array_attrib(ctx, vao, index, "glEnableVertexArrayAttrib"); +} + + static void disable_vertex_array_attrib(struct gl_context *ctx, struct gl_vertex_array_object *vao, diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index df78e1d..a77cdb8 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -172,6 +172,10 @@ _mesa_EnableVertexAttribArray(GLuint index); extern void GLAPIENTRY +_mesa_EnableVertexArrayAttrib(GLuint vaobj, GLuint index); + + +extern void GLAPIENTRY _mesa_DisableVertexAttribArray(GLuint index); -- 1.8.5.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev