glx: fix rotation regression. bug #14963
[mesa.git] / src / glx / x11 / dri_glx.c
index a6581465bc20c3479c40148e424d45e990bc8d1d..2e3ab06dce0e96539af63a4add1f1c3036f375e6 100644 (file)
@@ -38,6 +38,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <X11/Xlibint.h>
 #include <X11/extensions/Xext.h>
 #include <X11/extensions/extutil.h>
+#include <X11/extensions/Xfixes.h>
+#include <X11/extensions/Xdamage.h>
 #include "glheader.h"
 #include "glxclient.h"
 #include "xf86dri.h"
@@ -379,8 +381,8 @@ static void __glXReportDamage(__DRIdrawable *driDraw,
     XserverRegion region;
     int i;
     int x_off, y_off;
-    __GLXdrawable *glxDraw =
-       containerOf(driDraw, __GLXdrawable, driDrawable);
+    __GLXDRIdrawable *glxDraw =
+       containerOf(driDraw, __GLXDRIdrawable, driDrawable);
     __GLXscreenConfigs *psc = glxDraw->psc;
     Display *dpy = psc->dpy;
     Drawable drawable;
@@ -742,6 +744,14 @@ static __GLXDRIcontext *driCreateContext(__GLXscreenConfigs *psc,
     return NULL;
 }
 
+static void driDestroyDrawable(__GLXDRIdrawable *pdraw)
+{
+    __GLXscreenConfigs *psc = pdraw->psc;
+
+    (*pdraw->driDrawable.destroyDrawable)(&pdraw->driDrawable);
+    XF86DRIDestroyDrawable(psc->dpy, psc->scr, pdraw->drawable);
+    Xfree(pdraw);
+}
 
 static __GLXDRIdrawable *driCreateDrawable(__GLXscreenConfigs *psc,
                                           GLXDrawable drawable,
@@ -777,12 +787,7 @@ static __GLXDRIdrawable *driCreateDrawable(__GLXscreenConfigs *psc,
        return NULL;
     }
 
-    if (__glxHashInsert(psc->drawHash, drawable, pdraw)) {
-       (*pdraw->driDrawable.destroyDrawable)(&pdraw->driDrawable);
-       XF86DRIDestroyDrawable(psc->dpy, psc->scr, drawable);
-       Xfree(pdraw);
-       return NULL;
-    }
+    pdraw->destroyDrawable = driDestroyDrawable;
 
     return pdraw;
 }
@@ -793,8 +798,6 @@ static void driDestroyScreen(__GLXscreenConfigs *psc)
     if (psc->__driScreen.private)
        (*psc->__driScreen.destroyScreen)(&psc->__driScreen);
     psc->__driScreen.private = NULL;
-    if (psc->drawHash)
-       __glxHashDestroy(psc->drawHash);
     if (psc->driver)
        dlclose(psc->driver);
 }
@@ -810,11 +813,6 @@ static __GLXDRIscreen *driCreateScreen(__GLXscreenConfigs *psc, int screen,
     if (psp == NULL)
        return NULL;
 
-    /* Create drawable hash */
-    psc->drawHash = __glxHashCreate();
-    if ( psc->drawHash == NULL )
-       return NULL;
-
     /* Initialize per screen dynamic client GLX extensions */
     psc->ext_list_first_time = GL_TRUE;