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:
@@ -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.
|
||||
*
|
||||
|
||||
+2
-12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user