[Mesa-dev] [PATCH 01/11] i965: Fix ctx->Texture.CubeMapSeamless

Iago Toral itoral at igalia.com
Tue Feb 10 23:35:43 PST 2015


On Tue, 2015-02-10 at 09:33 -0800, Ian Romanick wrote:
> On 02/10/2015 07:40 AM, Eduardo Lima Mitev wrote:
> > From: Iago Toral Quiroga <itoral at igalia.com>
> > 
> > The intel driver code, and apparently all other Mesa drivers, call
> > _mesa_initialize_context early in the CreateContext hook. That
> > function will end up calling _mesa_init_texture which will do:
> > 
> > ctx->Texture.CubeMapSeamless = _mesa_is_gles3(ctx);
> > 
> > But this won't work at this point, since _mesa_is_gles3 requires
> > ctx->Version to be set and that will not happen until late
> > in the CreateContext hook, when _mesa_compute_version is called.
> > 
> > We can't just move the call to _mesa_compute_version before
> > _mesa_initialize_context since it needs that available extensions
> > have been computed, which again requires other things to be
> > initialized, etc. Instead, we just re-compute
> > ctx->Texture.CubeMapSeamless after the version is known.
> > 
> > As far as I can see, this should affect all Mesa drivers, as it
> > seems that all call _mesa_initialize_context before _mesa_compute_version.
> > Separate patches can fix the problem for other drivers.
> > 
> > Fixes the following 190 dEQP tests:
> > dEQP-GLES3.functional.texture.filtering.cube.formats.*
> > dEQP-GLES3.functional.texture.filtering.cube.sizes.*
> > dEQP-GLES3.functional.texture.filtering.cube.combinations.*
> > dEQP-GLES3.functional.texture.mipmap.cube.*
> > dEQP-GLES3.functional.texture.vertex.cube.filtering.*
> > dEQP-GLES3.functional.texture.vertex.cube.wrap.*
> > ---
> >  src/mesa/drivers/dri/i965/brw_context.c | 6 ++++++
> >  src/mesa/main/texstate.c                | 8 ++++++++
> >  2 files changed, 14 insertions(+)
> > 
> > diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
> > index e20da0b..f5b0624 100644
> > --- a/src/mesa/drivers/dri/i965/brw_context.c
> > +++ b/src/mesa/drivers/dri/i965/brw_context.c
> > @@ -859,6 +859,12 @@ brwCreateContext(gl_api api,
> >  
> >     _mesa_compute_version(ctx);
> >  
> > +   /* This is done in _mesa_init_texture called from _mesa_initialize_context
> > +    * above, but it won't work until we have computed the GL version, so
> > +    * do it again here.
> > +    */
> > +   ctx->Texture.CubeMapSeamless = _mesa_is_gles3(ctx);
> > +
> >     _mesa_initialize_dispatch_tables(ctx);
> >     _mesa_initialize_vbo_vtxfmt(ctx);
> >  
> > diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
> > index 66fd718..f03862e 100644
> > --- a/src/mesa/main/texstate.c
> > +++ b/src/mesa/main/texstate.c
> > @@ -882,6 +882,14 @@ _mesa_init_texture(struct gl_context *ctx)
> >      *     "OpenGL ES 3.0 requires that all cube map filtering be
> >      *     seamless. OpenGL ES 2.0 specified that a single cube map face be
> >      *     selected and used for filtering."
> > +    *
> > +    * FIXME: the call to _mesa_is_gles3 below will only work as intended if
> > +    * the driver has already computed and set ctx->Version, however drivers
> > +    * seem to call _mesa_initialize_context (which calls this) early
> > +    * in the CreateContext hook and _mesa_compute_version much later (since
> > +    * it needs information about available extensions), which means that this
> > +    * won't actually work unless we figure out a way to compute the GL version
> > +    * before _mesa_initialize_context is called.
> >      */
> >     ctx->Texture.CubeMapSeamless = _mesa_is_gles3(ctx);
> 
> We at least know the API at this point, right?  My recollection is that
> ES2 is a imprecise in the sort of cubemap filtering you get.  Further, I
> believe that some implementations have always given seamless filtering
> in ES2.  It might be better to change this to
> 
>    ctx->Texture.CubeMapSeamless = ctx->API == API_OPENGLES2;
> 
> This could cause problems for drivers that can't do seamless, I suppose...

These drivers can still force ctx->Texture.CubeMapSeamless = false in
their context initialization routine I guess... If nobody opposes to the
change I'll update the patch to follow your suggestion.

Iago

> _______________________________________________
> 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