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