From 19e9bd4c117f9f38f4fdec0467a57f0e29e5c0f3 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 18 Aug 2017 15:48:13 -0600 Subject: mesa: optimize _mesa_attr_zero_aliases_vertex() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After the context is initialized, the API and context flags won't change. So, we can compute whether vertex attribute 0 aliases vertex position just once. This should make the glVertexAttrib*() functions a little quicker. Reviewed-by: Samuel Pitoiset Reviewed-by: Marek Olšák --- src/mesa/main/context.c | 17 +++++++++++++++++ src/mesa/main/mtypes.h | 3 +++ src/mesa/main/varray.h | 14 ++------------ 3 files changed, 22 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index b4b7b6e7da1..cd3eccea20f 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1607,6 +1607,23 @@ handle_first_current(struct gl_context *ctx) } } + /* Determine if generic vertex attribute 0 aliases the conventional + * glVertex position. + */ + { + const bool is_forward_compatible_context = + ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; + + /* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES + * 2.0. Note that we cannot just check for API_OPENGL_COMPAT here because + * that will erroneously allow this usage in a 3.0 forward-compatible + * context too. + */ + ctx->_AttribZeroAliasesVertex = (ctx->API == API_OPENGLES + || (ctx->API == API_OPENGL_COMPAT + && !is_forward_compatible_context)); + } + /* We can use this to help debug user's problems. Tell them to set * the MESA_INFO env variable before running their app. Then the * first time each context is made current we'll print some useful diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 49eb7d54bd5..74392f8f1f9 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -4972,6 +4972,9 @@ struct gl_context GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */ GLboolean IntelConservativeRasterization; /**< GL_INTEL_CONSERVATIVE_RASTERIZATION */ + /** Does glVertexAttrib(0) alias glVertex()? */ + bool _AttribZeroAliasesVertex; + /** * \name Hooks for module contexts. * diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index 730f7cf3588..927a1ada38a 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -73,19 +73,9 @@ _mesa_update_client_array(struct gl_context *ctx, } static inline bool -_mesa_attr_zero_aliases_vertex(struct gl_context *ctx) +_mesa_attr_zero_aliases_vertex(const struct gl_context *ctx) { - const bool is_forward_compatible_context = - ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; - - /* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES - * 2.0. Note that we cannot just check for API_OPENGL_COMPAT here because - * that will erroneously allow this usage in a 3.0 forward-compatible - * context too. - */ - return (ctx->API == API_OPENGLES - || (ctx->API == API_OPENGL_COMPAT - && !is_forward_compatible_context)); + return ctx->_AttribZeroAliasesVertex; } extern void -- cgit v1.2.3