glx: fix GLXChangeDrawableAttributesSGIX request
[mesa.git] / src / glx / dri_common.c
index a7fb4c642442652d22a4b067ab5aa3251f0ad0a3..83d6e3c31082ca22420e58468be3535ce268bb66 100644 (file)
@@ -380,4 +380,31 @@ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable)
    return pdraw;
 }
 
+_X_HIDDEN void
+driReleaseDrawables(struct glx_context *gc)
+{
+   struct glx_display *const priv = __glXInitialize(gc->psc->dpy);
+   __GLXDRIdrawable *pdraw;
+
+   if (priv == NULL)
+      return;
+
+   if (__glxHashLookup(priv->drawHash,
+                      gc->currentDrawable, (void *) &pdraw) == 0) {
+      if (pdraw->drawable == pdraw->xDrawable) {
+        (*pdraw->destroyDrawable)(pdraw);
+        __glxHashDelete(priv->drawHash, gc->currentDrawable);
+      }
+   }
+
+   if (gc->currentDrawable != gc->currentReadable &&
+       __glxHashLookup(priv->drawHash,
+                      gc->currentReadable, (void *) &pdraw) == 0) {
+      if (pdraw->drawable == pdraw->xDrawable) {
+        (*pdraw->destroyDrawable)(pdraw);
+        __glxHashDelete(priv->drawHash, gc->currentReadable);
+      }
+   }
+}
+
 #endif /* GLX_DIRECT_RENDERING */