On 08/21/2017 01:09 PM, Samuel Pitoiset wrote:
On 08/21/2017 08:56 PM, Brian Paul wrote:
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.
No Piglit regressions with llvmpipe.
---
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(-)
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index b4b7b6e..842edf0 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 alias 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 49eb7d5..a8fa045 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;
Usually, internal variables are prefixed with '_', no?
With that fixed, series is:
Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Will do. Thanks.
-Brian
+
/**
* \name Hooks for module contexts.
*
diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
index 730f7cf..ba74ae6 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
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev