Commit 19e9bd4c authored by Brian Paul's avatar Brian Paul

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's avatarSamuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
parent 0ef5aa41
......@@ -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
......
......@@ -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.
*
......
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment