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