diff options
author | Pierre-Eric Pelloux-Prayer <[email protected]> | 2019-10-25 15:20:31 +0200 |
---|---|---|
committer | Pierre-Eric Pelloux-Prayer <[email protected]> | 2019-11-05 13:58:28 +0100 |
commit | f793a8663df1a84230e1041447eacec9db4c0fde (patch) | |
tree | 7df22782567dc0ca25be0688653150613233e1fb /src/mesa/main | |
parent | a05336179314fcaba37bda12599f076000effbcd (diff) |
mesa: add EXT_dsa glEnableVertexArrayEXT / glDisableVertexArrayEXT
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/enable.c | 61 | ||||
-rw-r--r-- | src/mesa/main/enable.h | 6 | ||||
-rw-r--r-- | src/mesa/main/tests/dispatch_sanity.cpp | 4 |
3 files changed, 69 insertions, 2 deletions
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 @@ -184,6 +184,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 ) { GET_CURRENT_CONTEXT(ctx); @@ -206,6 +237,36 @@ _mesa_DisableClientState( GLenum cap ) } 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 ) { GET_CURRENT_CONTEXT(ctx); 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 @@ -68,11 +68,17 @@ 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 }, |