? man/fbdev.4 Index: src/fbdev.c =================================================================== RCS file: /cvs/xorg/driver/xf86-video-fbdev/src/fbdev.c,v retrieving revision 1.14 diff -u -p -r1.14 fbdev.c --- src/fbdev.c 7 Apr 2006 19:02:07 -0000 1.14 +++ src/fbdev.c 12 May 2006 22:27:18 -0000 @@ -617,6 +617,36 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flag } static Bool +FBDevShadowInit(ScreenPtr pScreen, FBDevPtr fPtr) +{ + PixmapPtr pPixmap; + ShadowUpdateProc update; + ShadowWindowProc window; + + pPixmap = pScreen->CreatePixmap(pScreen, pScreen->width, pScreen->height, + pScreen->rootDepth); + if (!pPixmap) + return FALSE; + + if (!shadowSetup(pScreen)) { + pScreen->DestroyPixmap(pPixmap); + return FALSE; + } + + update = fPtr->rotate ? shadowUpdateRotatePackedWeak() + : shadowUpdatePackedWeak(); + + if (!shadowAdd(pScreen, pPixmap, update, FBDevWindowLinear, + fPtr->rotate, NULL)) { + pScreen->DestroyPixmap(pPixmap); + return FALSE; + } else { + return TRUE; + } +} + + +static Bool FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; @@ -803,11 +833,7 @@ FBDevScreenInit(int scrnIndex, ScreenPtr xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Render extension initialisation failed\n"); - if (fPtr->shadowFB && - (!shadowSetup(pScreen) || !shadowAdd(pScreen, NULL, - fPtr->rotate ? shadowUpdateRotatePackedWeak() - : shadowUpdatePackedWeak(), - FBDevWindowLinear, fPtr->rotate, NULL)) ) { + if (fPtr->shadowFB && !FBDevShadowInit(pScreen, fPtr)) { xf86DrvMsg(scrnIndex, X_ERROR, "shadow framebuffer initialization failed\n"); return FALSE;