[Mesa-dev] [PATCH 3/3] mesa: optimize _mesa_attr_zero_aliases_vertex()
Brian Paul
brianp at vmware.com
Mon Aug 21 19:27:47 UTC 2017
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.pitoiset at 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
>>
More information about the mesa-dev
mailing list