Kristian Høgsberg 8d0b84f
--- ./hw/xfree86/xaa/xaaInit.c.offscreen-pixmaps	2006-07-05 14:31:42.000000000 -0400
Kristian Høgsberg ed663d8
+++ ./hw/xfree86/xaa/xaaInit.c	2006-08-30 16:47:29.000000000 -0400
Kristian Høgsberg ed663d8
@@ -98,6 +98,30 @@
Kristian Høgsberg 22c56dc
     xfree(infoRec);
Kristian Høgsberg 22c56dc
 }
Kristian Høgsberg 22c56dc
 
Kristian Høgsberg ed663d8
+void
Kristian Høgsberg ed663d8
+XAAEvictPixmaps(void)
Kristian Høgsberg 22c56dc
+{
Kristian Høgsberg ed663d8
+    XAAScreenPtr pScreenPriv;
Kristian Høgsberg ed663d8
+    XAAInfoRecPtr infoRec;
Kristian Høgsberg ed663d8
+    ScreenPtr pScreen;
Kristian Høgsberg ed663d8
+    int i;
Kristian Høgsberg 22c56dc
+
Kristian Høgsberg ed663d8
+    xf86MsgVerb(X_INFO, 3, "XAA: Evicting pixmaps\n");
Kristian Høgsberg 22c56dc
+
Kristian Høgsberg ed663d8
+    for (i = 0; i < screenInfo.numScreens; i++) {
Kristian Høgsberg ed663d8
+	pScreen = screenInfo.screens[i];
Kristian Høgsberg ed663d8
+	infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
Kristian Høgsberg ed663d8
+
Kristian Høgsberg ed663d8
+	pScreenPriv = pScreen->devPrivates[XAAScreenIndex].ptr;
Kristian Høgsberg ed663d8
+	infoRec = pScreenPriv->AccelInfoRec;
Kristian Høgsberg 8d0b84f
+
Kristian Høgsberg 22c56dc
+	infoRec->offscreenDepths = 0;
Kristian Høgsberg 22c56dc
+	infoRec->Flags &= ~OFFSCREEN_PIXMAPS;
Kristian Høgsberg 22c56dc
+       
Kristian Høgsberg 22c56dc
+	XAAMoveOutOffscreenPixmaps(pScreen);
Kristian Høgsberg 22c56dc
+	XAAInvalidatePixmapCache(pScreen);
Kristian Høgsberg 22c56dc
+    }
Kristian Høgsberg 22c56dc
+}
Kristian Høgsberg 22c56dc
 
Kristian Høgsberg 22c56dc
 Bool 
Kristian Høgsberg 22c56dc
 XAAInit(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
Kristian Høgsberg ed663d8
--- ./GL/glx/glxdri.c.offscreen-pixmaps	2006-08-30 16:46:45.000000000 -0400
Kristian Høgsberg ed663d8
+++ ./GL/glx/glxdri.c	2006-08-30 16:45:52.000000000 -0400
Kristian Høgsberg ed663d8
@@ -367,6 +367,19 @@
Kristian Høgsberg ed663d8
     int		bpp;
Kristian Høgsberg ed663d8
     GLenum	target, format, type;
Kristian Høgsberg ed663d8
 
Kristian Høgsberg ed663d8
+    /* When the GLX_EXT_texture_from_pixmap is used, as it's
Kristian Høgsberg ed663d8
+     * implemented here, we want to pull pixmap out of video memory
Kristian Høgsberg ed663d8
+     * and into host memory. */
Kristian Høgsberg ed663d8
+    {
Kristian Høgsberg ed663d8
+      extern void XAAEvictPixmaps(void);
Kristian Høgsberg ed663d8
+      static int evictedPixmaps;
Kristian Høgsberg 22c56dc
+
Kristian Høgsberg ed663d8
+      if (!evictedPixmaps) {
Kristian Høgsberg ed663d8
+	XAAEvictPixmaps();
Kristian Høgsberg ed663d8
+	evictedPixmaps = TRUE;
Kristian Høgsberg ed663d8
+      }
Kristian Høgsberg ed663d8
+    }
Kristian Høgsberg 22c56dc
+
Kristian Høgsberg ed663d8
     pixmap = (PixmapPtr) glxPixmap->pDraw;
Kristian Høgsberg ed663d8
     if (!glxPixmap->pDamage) {
Kristian Høgsberg ed663d8
         glxPixmap->pDamage = DamageCreate(NULL, NULL, DamageReportNone,