From f793a8663df1a84230e1041447eacec9db4c0fde Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Fri, 25 Oct 2019 15:20:31 +0200 Subject: [PATCH] mesa: add EXT_dsa glEnableVertexArrayEXT / glDisableVertexArrayEXT MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák --- .../glapi/gen/EXT_direct_state_access.xml | 10 +++ src/mapi/glapi/gen/static_data.py | 2 + src/mesa/main/enable.c | 61 +++++++++++++++++++ src/mesa/main/enable.h | 6 ++ src/mesa/main/tests/dispatch_sanity.cpp | 4 +- 5 files changed, 81 insertions(+), 2 deletions(-) diff --git a/src/mapi/glapi/gen/EXT_direct_state_access.xml b/src/mapi/glapi/gen/EXT_direct_state_access.xml index 19f9048f84a..145d3b92c8e 100644 --- a/src/mapi/glapi/gen/EXT_direct_state_access.xml +++ b/src/mapi/glapi/gen/EXT_direct_state_access.xml @@ -1150,6 +1150,16 @@ + + + + + + + + + + diff --git a/src/mapi/glapi/gen/static_data.py b/src/mapi/glapi/gen/static_data.py index 43011be402d..28ef42c12aa 100644 --- a/src/mapi/glapi/gen/static_data.py +++ b/src/mapi/glapi/gen/static_data.py @@ -1608,6 +1608,8 @@ offsets = { "VertexArraySecondaryColorOffsetEXT": 1572, "VertexArrayVertexAttribOffsetEXT": 1573, "VertexArrayVertexAttribIOffsetEXT": 1574, + "EnableVertexArrayEXT": 1575, + "DisableVertexArrayEXT": 1576, } functions = [ diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index f72a3be0591..e398a67fcb3 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -183,6 +183,37 @@ _mesa_EnableClientState( GLenum cap ) } +void GLAPIENTRY +_mesa_EnableVertexArrayEXT( GLuint vaobj, GLenum cap ) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_vertex_array_object* vao = _mesa_lookup_vao_err(ctx, vaobj, + true, + "glEnableVertexArrayEXT"); + if (!vao) + return; + + /* The EXT_direct_state_access spec says: + * "Additionally EnableVertexArrayEXT and DisableVertexArrayEXT accept + * the tokens TEXTURE0 through TEXTUREn where n is less than the + * implementation-dependent limit of MAX_TEXTURE_COORDS. For these + * GL_TEXTUREi tokens, EnableVertexArrayEXT and DisableVertexArrayEXT + * act identically to EnableVertexArrayEXT(vaobj, TEXTURE_COORD_ARRAY) + * or DisableVertexArrayEXT(vaobj, TEXTURE_COORD_ARRAY) respectively + * as if the active client texture is set to texture coordinate set i + * based on the token TEXTUREi indicated by array." + */ + if (GL_TEXTURE0 <= cap && cap < GL_TEXTURE0 + ctx->Const.MaxTextureCoordUnits) { + GLuint saved_active = ctx->Array.ActiveTexture; + _mesa_ClientActiveTexture(cap); + client_state(ctx, vao, GL_TEXTURE_COORD_ARRAY, GL_TRUE); + _mesa_ClientActiveTexture(GL_TEXTURE0 + saved_active); + } else { + client_state(ctx, vao, cap, GL_TRUE); + } +} + + void GLAPIENTRY _mesa_EnableClientStateiEXT( GLenum cap, GLuint index ) { @@ -205,6 +236,36 @@ _mesa_DisableClientState( GLenum cap ) client_state( ctx, ctx->Array.VAO, cap, GL_FALSE ); } +void GLAPIENTRY +_mesa_DisableVertexArrayEXT( GLuint vaobj, GLenum cap ) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_vertex_array_object* vao = _mesa_lookup_vao_err(ctx, vaobj, + true, + "glDisableVertexArrayEXT"); + if (!vao) + return; + + /* The EXT_direct_state_access spec says: + * "Additionally EnableVertexArrayEXT and DisableVertexArrayEXT accept + * the tokens TEXTURE0 through TEXTUREn where n is less than the + * implementation-dependent limit of MAX_TEXTURE_COORDS. For these + * GL_TEXTUREi tokens, EnableVertexArrayEXT and DisableVertexArrayEXT + * act identically to EnableVertexArrayEXT(vaobj, TEXTURE_COORD_ARRAY) + * or DisableVertexArrayEXT(vaobj, TEXTURE_COORD_ARRAY) respectively + * as if the active client texture is set to texture coordinate set i + * based on the token TEXTUREi indicated by array." + */ + if (GL_TEXTURE0 <= cap && cap < GL_TEXTURE0 + ctx->Const.MaxTextureCoordUnits) { + GLuint saved_active = ctx->Array.ActiveTexture; + _mesa_ClientActiveTexture(cap); + client_state(ctx, vao, GL_TEXTURE_COORD_ARRAY, GL_FALSE); + _mesa_ClientActiveTexture(GL_TEXTURE0 + saved_active); + } else { + client_state(ctx, vao, cap, GL_FALSE); + } +} + void GLAPIENTRY _mesa_DisableClientStateiEXT( GLenum cap, GLuint index ) { diff --git a/src/mesa/main/enable.h b/src/mesa/main/enable.h index fa569edadd2..1cd8f675d33 100644 --- a/src/mesa/main/enable.h +++ b/src/mesa/main/enable.h @@ -67,12 +67,18 @@ _mesa_EnableClientState( GLenum cap ); extern void GLAPIENTRY _mesa_EnableClientStateiEXT( GLenum cap, GLuint index ); +extern void GLAPIENTRY +_mesa_EnableVertexArrayEXT( GLuint vaobj, GLenum cap ); + extern void GLAPIENTRY _mesa_DisableClientState( GLenum cap ); extern void GLAPIENTRY _mesa_DisableClientStateiEXT( GLenum cap, GLuint index ); +extern void GLAPIENTRY +_mesa_DisableVertexArrayEXT( GLuint vaobj, GLenum cap ); + extern void _mesa_set_multisample(struct gl_context *ctx, GLboolean state); diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 78a50532c5c..c58c2943563 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -1180,8 +1180,8 @@ const struct function common_desktop_functions_possible[] = { { "glVertexArraySecondaryColorOffsetEXT", 30, -1 }, { "glVertexArrayVertexAttribOffsetEXT", 30, -1 }, { "glVertexArrayVertexAttribIOffsetEXT", 30, -1 }, - //{ "glEnableVertexArrayEXT", 30, -1 }, - //{ "glDisableVertexArrayEXT", 30, -1 }, + { "glEnableVertexArrayEXT", 30, -1 }, + { "glDisableVertexArrayEXT", 30, -1 }, //{ "glEnableVertexArrayAttribEXT", 30, -1 }, //{ "glDisableVertexArrayAttribEXT", 30, -1 }, //{ "glGetVertexArrayIntegervEXT", 30, -1 }, -- 2.30.2