[Mesa-dev] [PATCH 04/10] mesa: Recompute LegalTypesMask if the GL API has changed

Iago Toral itoral at igalia.com
Tue Dec 2 02:54:17 PST 2014


On Mon, 2014-12-01 at 09:24 -0700, Brian Paul wrote:
> On 12/01/2014 06:04 AM, Eduardo Lima Mitev wrote:
> > From: Iago Toral Quiroga <itoral at igalia.com>
> >
> > The current code computes ctx->Array.LegalTypesMask just once,
> > however, computing this needs to consider ctx->API so we need
> > to make sure that the API for that context has not changed if
> > we intend to reuse the result.
> >
> > The context API can change, at least, if we go through
> > _mesa_meta_begin, since that will always force
> > API_OPENGL_COMPAT until we call _mesa_meta_end. If any
> > operation in between these two calls triggers a call to
> > update_array_format, then we might be caching a value for
> > LegalTypesMask that will not be right once we have called
> > _mesa_meta_end and restored the context API.
> >
> > Fixes the following 179 dEQP tests in i965:
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.strides.fixed.*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.normalize.fixed.*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.output_types.fixed.*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.static_draw.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.stream_draw.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.dynamic_draw.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.static_copy.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.stream_copy.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.dynamic_copy.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.static_read.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.stream_read.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.single_attribute.usages.dynamic_read.*fixed*
> > dEQP-GLES3.functional.vertex_arrays.multiple_attributes.input_types.3_*fixed2*
> > dEQP-GLES3.functional.draw.random.{2,18,28,68,83,106,109,156,181,191}
> > ---
> >   src/mesa/main/mtypes.h | 3 ++-
> >   src/mesa/main/varray.c | 3 ++-
> >   2 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> > index 7389baa..78f034d 100644
> > --- a/src/mesa/main/mtypes.h
> > +++ b/src/mesa/main/mtypes.h
> > @@ -1701,8 +1701,9 @@ struct gl_array_attrib
> >      /** One of the DRAW_xxx flags, not consumed by drivers */
> >      gl_draw_method DrawMethod;
> >
> > -   /** Legal array datatypes */
> > +   /** Legal array datatypes and the API for which they have been computed */
> >      GLbitfield LegalTypesMask;
> > +   int LegalTypesMaskAPI;
> 
> gl_api LegalTypesMaskAPI;
> 

Sure. This also requires to move the gl_api enum definition above this.
Will do that too.

> >   };
> >
> >
> > diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
> > index 96c2b26..acfc4bd 100644
> > --- a/src/mesa/main/varray.c
> > +++ b/src/mesa/main/varray.c
> > @@ -258,11 +258,12 @@ update_array_format(struct gl_context *ctx,
> >      GLuint elementSize;
> >      GLenum format = GL_RGBA;
> >
> > -   if (ctx->Array.LegalTypesMask == 0) {
> > +   if (ctx->Array.LegalTypesMask == 0 || ctx->Array.LegalTypesMaskAPI != ctx->API) {
> >         /* One-time initialization.  We can't do this in _mesa_init_varrays()
> >          * below because extensions are not yet enabled at that point.
> >          */
> 
> Should probably update the comment to say something like:
> 
> "Compute the LegalTypesMask if it's uninitialized or the context API 
> changes."

Sure, will do.

Thanks for reviewing!
Iago

> 
> >         ctx->Array.LegalTypesMask = get_legal_types_mask(ctx);
> > +      ctx->Array.LegalTypesMaskAPI = ctx->API;
> >      }
> >
> >      legalTypesMask &= ctx->Array.LegalTypesMask;
> >
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list