summaryrefslogtreecommitdiff
path: root/src/egl/drivers/dri2
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2010-11-24 13:42:06 +0800
committerChia-I Wu <olv@lunarg.com>2010-11-24 14:06:30 +0800
commit1f4c55128b7e4a2aa08600ae9338071a97cee8fa (patch)
tree1fd1a34900ad24795af3a02deaf8d7ffc26aa8cf /src/egl/drivers/dri2
parent78a340fd487c56468ace7347a53f95a0c751c419 (diff)
egl_dri2: Fix one context, multiple surfaces.
When a context was made current to another surface, the old code did this dri2_dpy->core->bindContext(cctx, ddraw, rdraw); dri2_dpy->core->unbindContext(old_cctx); and there will be no current context due to the second line. unbindContext should be called only when bindContext is not. This fixes a regression since d19afc57. Thanks to Neil Roberts for noticing the issue and creating a test case.
Diffstat (limited to 'src/egl/drivers/dri2')
-rw-r--r--src/egl/drivers/dri2/egl_dri2.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index a83f32b0d1b..6f40ab951f9 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -1648,7 +1648,11 @@ dri2_make_current(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *dsurf,
dri2_destroy_surface(drv, disp, old_dsurf);
dri2_destroy_surface(drv, disp, old_rsurf);
if (old_ctx) {
- dri2_dpy->core->unbindContext(dri2_egl_context(old_ctx)->dri_context);
+ /* unbind the old context only when there is no new context bound */
+ if (!ctx) {
+ __DRIcontext *old_cctx = dri2_egl_context(old_ctx)->dri_context;
+ dri2_dpy->core->unbindContext(old_cctx);
+ }
/* no destroy? */
_eglPutContext(old_ctx);
}