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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user