For the series: Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Marek On Mon, Aug 21, 2017 at 8:56 PM, Brian Paul <bri...@vmware.com> 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; > + > /** > * \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 > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev