mesa: optimize _mesa_attr_zero_aliases_vertex()

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 <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Brian Paul
2017-08-18 15:48:13 -06:00
parent 0ef5aa4128
commit 19e9bd4c11
3 changed files with 22 additions and 12 deletions
+17
View File
@@ -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
+3
View File
@@ -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.
*
+2 -12
View File
@@ -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