summaryrefslogtreecommitdiff
path: root/driver/xf86-video-wsfb/src
diff options
context:
space:
mode:
Diffstat (limited to 'driver/xf86-video-wsfb/src')
-rw-r--r--driver/xf86-video-wsfb/src/wsfb_driver.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/driver/xf86-video-wsfb/src/wsfb_driver.c b/driver/xf86-video-wsfb/src/wsfb_driver.c
index 0d0bb80c3..61386cdc8 100644
--- a/driver/xf86-video-wsfb/src/wsfb_driver.c
+++ b/driver/xf86-video-wsfb/src/wsfb_driver.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: wsfb_driver.c,v 1.3 2006/11/29 20:07:10 matthieu Exp $ */
+/* $OpenBSD: wsfb_driver.c,v 1.4 2006/12/03 16:32:48 matthieu Exp $ */
/*
* Copyright (c) 2001 Matthieu Herrb
* All rights reserved.
@@ -151,14 +151,14 @@ enum { WSFB_ROTATE_NONE = 0,
*/
static int pix24bpp = 0;
-#define VERSION 4000
+#define WSFB_VERSION 4000
#define WSFB_NAME "wsfb"
#define WSFB_DRIVER_NAME "wsfb"
#define WSFB_MAJOR_VERSION 0
-#define WSFB_MINOR_VERSION 1
+#define WSFB_MINOR_VERSION 2
DriverRec WSFB = {
- VERSION,
+ WSFB_VERSION,
WSFB_DRIVER_NAME,
WsfbIdentify,
WsfbProbe,
@@ -193,8 +193,8 @@ static const char *fbSymbols[] = {
NULL
};
static const char *shadowSymbols[] = {
- "shadowAlloc",
- "shadowInit",
+ "shadowAdd",
+ "shadowSetup",
"shadowUpdatePacked",
"shadowUpdatePackedWeak",
"shadowUpdateRotatePacked",
@@ -255,7 +255,6 @@ typedef struct {
unsigned char* fbstart;
unsigned char* fbmem;
size_t fbmem_len;
- unsigned char* shadowmem;
int rotate;
Bool shadowFB;
CloseScreenProcPtr CloseScreen;
@@ -386,7 +385,7 @@ WsfbProbe(DriverPtr drv, int flags)
NULL,NULL,NULL,NULL);
if (pScrn != NULL) {
foundScreen = TRUE;
- pScrn->driverVersion = VERSION;
+ pScrn->driverVersion = WSFB_VERSION;
pScrn->driverName = WSFB_DRIVER_NAME;
pScrn->name = WSFB_NAME;
pScrn->Probe = WsfbProbe;
@@ -889,17 +888,8 @@ WsfbScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pScrn->PointerMoved = WsfbPointerMoved;
}
- /* shadowfb */
- if (fPtr->shadowFB) {
- if ((fPtr->shadowmem = shadowAlloc(width, height,
- pScrn->bitsPerPixel)) == NULL)
- return FALSE;
+ fPtr->fbstart = fPtr->fbmem;
- fPtr->fbstart = fPtr->shadowmem;
- } else {
- fPtr->shadowmem = NULL;
- fPtr->fbstart = fPtr->fbmem;
- }
switch (pScrn->bitsPerPixel) {
case 1:
ret = xf1bppScreenInit(pScreen, fPtr->fbstart,
@@ -957,17 +947,28 @@ WsfbScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
"RENDER extension initialisation failed.");
}
if (fPtr->shadowFB) {
+ PixmapPtr pPixmap;
+
if (pScrn->bitsPerPixel < 8) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Shadow FB not available on < 8 depth");
} else {
- if (!shadowSetup(pScreen) ||
- !shadowAdd(pScreen, NULL,
+ ErrorF("XXX w %d h %d d %d\n",
+ pScreen->width, pScreen->height,
+ pScreen->rootDepth);
+ pPixmap = pScreen->CreatePixmap(pScreen,
+ pScreen->width, pScreen->height,
+ pScreen->rootDepth);
+ if (!pPixmap)
+ return FALSE;
+ if (!shadowSetup(pScreen) ||
+ !shadowAdd(pScreen, pPixmap,
fPtr->rotate ? shadowUpdateRotatePackedWeak() :
shadowUpdatePackedWeak(),
WsfbWindowLinear, fPtr->rotate, NULL)) {
xf86DrvMsg(scrnIndex, X_ERROR,
"Shadow FB initialization failed\n");
+ pScreen->DestroyPixmap(pPixmap);
return FALSE;
}
}
@@ -1053,8 +1054,6 @@ WsfbCloseScreen(int scrnIndex, ScreenPtr pScreen)
fPtr->fbmem = NULL;
}
- if (fPtr->shadowmem)
- xfree(fPtr->shadowmem);
#ifdef XFreeXDGA
if (fPtr->pDGAMode) {
xfree(fPtr->pDGAMode);