[Mesa-dev] [PATCH] fix regression caused by b4bb6680200b5a898583392f4c831c02f41e63f7

Xiang, Haihao haihao.xiang at intel.com
Sun Nov 14 22:45:27 PST 2010


On Thu, 2010-11-11 at 10:14 +0800, Xiang, Haihao wrote:
> On Thu, 2010-11-11 at 01:47 +0800, Jerome Glisse wrote:
> > On Wed, Nov 10, 2010 at 12:28 PM, Eric Anholt <eric at anholt.net> wrote:
> > > On Wed, 10 Nov 2010 08:25:19 +0800, "Xiang, Haihao" <haihao.xiang at intel.com> wrote:
> > >> Any comment? If no problem, I will check in this fix.
> > >
> > > This should really be part of the core -- all drivers have to flush when
> > > changing current context.
> > 
> > Agree.
> > 
> 
> I think the core should take pending commands into account, or we saw
> many rendering errors previously. The problem is that b4bb6680 set the
> current context to NULL in some DRI drivers.
> 
> Anyway, how about this one?
Hi, Kristian

  This patch fixes the regression since
b4bb6680200b5a898583392f4c831c02f41e63f7(dri: Unset current context and
dispatch table when unbinding). It works well for me with i965 driver,
however I have no chance to test it with other drivers. Do you have any
comments?

Thanks
Haihao


> 
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index b60875b..292a9a6 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -1381,6 +1381,7 @@ GLboolean
>  _mesa_make_current( struct gl_context *newCtx, struct gl_framebuffer *drawBuffer,
>                      struct gl_framebuffer *readBuffer )
>  {
> +   GET_CURRENT_CONTEXT(curCtx);
>     if (MESA_VERBOSE & VERBOSE_API)
>        _mesa_debug(newCtx, "_mesa_make_current()\n");
>  
> @@ -1401,6 +1402,11 @@ _mesa_make_current( struct gl_context *newCtx, struct gl_framebuffer *drawBuffer
>        }
>     }
>  
> +   if (curCtx && 
> +      (curCtx->WinSysDrawBuffer || curCtx->WinSysReadBuffer) && /* make sure this context is valid for flushing */
> +      curCtx != newCtx)
> +      _mesa_flush(curCtx);
> +
>     /* We used to call _glapi_check_multithread() here.  Now do it in drivers */
>     _glapi_set_context((void *) newCtx);
>     ASSERT(_mesa_get_current_context() == newCtx);
> 
> 
> 
> 
> _______________________________________________
> 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