diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/glx/dri2_glx.c | 17 | ||||
-rw-r--r-- | src/glx/dri_common.c | 3 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 0a0dac98646..67fe9c1d4f9 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -141,6 +141,7 @@ dri2_bind_context(struct glx_context *context, struct glx_context *old, struct dri2_context *pcp = (struct dri2_context *) context; struct dri2_screen *psc = (struct dri2_screen *) pcp->base.psc; struct dri2_drawable *pdraw, *pread; + __DRIdrawable *dri_draw = NULL, *dri_read = NULL; struct dri2_display *pdp; pdraw = (struct dri2_drawable *) driFetchDrawable(context, draw); @@ -148,20 +149,26 @@ dri2_bind_context(struct glx_context *context, struct glx_context *old, driReleaseDrawables(&pcp->base); - if (pdraw == NULL || pread == NULL) + if (pdraw) + dri_draw = pdraw->driDrawable; + else if (draw != None) return GLXBadDrawable; - if (!(*psc->core->bindContext) (pcp->driContext, - pdraw->driDrawable, pread->driDrawable)) + if (pread) + dri_read = pread->driDrawable; + else if (read != None) + return GLXBadDrawable; + + if (!(*psc->core->bindContext) (pcp->driContext, dri_draw, dri_read)) return GLXBadContext; /* If the server doesn't send invalidate events, we may miss a * resize before the rendering starts. Invalidate the buffers now * so the driver will recheck before rendering starts. */ pdp = (struct dri2_display *) psc->base.display; - if (!pdp->invalidateAvailable) { + if (!pdp->invalidateAvailable && pdraw) { dri2InvalidateBuffers(psc->base.dpy, pdraw->base.xDrawable); - if (pread != pdraw) + if (pread != pdraw && pread) dri2InvalidateBuffers(psc->base.dpy, pread->base.xDrawable); } diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index 0dd8982a18b..012c8f4ec32 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -392,6 +392,9 @@ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable) if (priv == NULL) return NULL; + if (glxDrawable == None) + return NULL; + psc = priv->screens[gc->screen]; if (priv->drawHash == NULL) return NULL; |