On Thu, 2010-11-11 at 01:47 +0800, Jerome Glisse wrote:
> On Wed, Nov 10, 2010 at 12:28 PM, Eric Anholt <e...@anholt.net> wrote:
> > On Wed, 10 Nov 2010 08:25:19 +0800, "Xiang, Haihao" 
> > <haihao.xi...@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?

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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to