diff options
author | Dave Airlie <airlied@redhat.com> | 2011-08-11 15:28:58 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-08-11 15:28:58 +0100 |
commit | d06d7c0e7e12fb216f5b98be959ac1a94aa92c80 (patch) | |
tree | 6b01b3b5bec6a48252ecd3ddcc08dd5ec9cec525 | |
parent | 8aa4ceb71791a057c62ad05f5ece184fa9a62c2f (diff) |
drv: got ephyr to start again, now to fix damaiste
-rw-r--r-- | drv/Makefile.am | 1 | ||||
-rw-r--r-- | drv/drv_imped.h | 11 | ||||
-rw-r--r-- | drv/drv_screen.c | 9 | ||||
-rw-r--r-- | drv/drv_screenint.h | 2 | ||||
-rw-r--r-- | drv/fb/fbscreen.c | 12 | ||||
-rw-r--r-- | drv/impedscrn.c | 9 | ||||
-rw-r--r-- | hw/kdrive/src/kdrive.c | 79 | ||||
-rw-r--r-- | hw/kdrive/src/kdrive.h | 1 |
8 files changed, 101 insertions, 23 deletions
diff --git a/drv/Makefile.am b/drv/Makefile.am index bbf0c23fa..4e3c880ec 100644 --- a/drv/Makefile.am +++ b/drv/Makefile.am @@ -31,6 +31,7 @@ libdrv_la_SOURCES = \ drv_pixmap.c \ drv_picture.c \ drv_damage.c \ + drv_screen.c \ impedscrn.c \ impedgc.c \ impedpict.c diff --git a/drv/drv_imped.h b/drv/drv_imped.h index d2757a9ef..6c8673567 100644 --- a/drv/drv_imped.h +++ b/drv/drv_imped.h @@ -97,7 +97,16 @@ extern _X_EXPORT void impedScreenSetPixmapSize(ScreenPtr pScreen); extern _X_EXPORT void impedAttachDrvScreen(ScreenPtr pScreen, DrvScreenPtr pDrvScreen); -extern _X_EXPORT Bool impedScreenInit(int i, ScreenPtr pScreen, int argc, char **argv); +extern _X_EXPORT Bool impedSetupScreen(int index, ScreenPtr pScreen); + +extern _X_EXPORT Bool impedFinishScreenInit(ScreenPtr pScreen, + pointer pbits, + int xsize, + int ysize, + int dpix, + int dpiy, + int width, + int bpp); extern _X_EXPORT void impedInit(void); #endif diff --git a/drv/drv_screen.c b/drv/drv_screen.c new file mode 100644 index 000000000..ec236991b --- /dev/null +++ b/drv/drv_screen.c @@ -0,0 +1,9 @@ +#include "drv_scrnintstr.h" + +Bool +drvScreenInit(DrvScreenPtr pDrvScreen) +{ + pDrvScreen->ModifyPixmapHeader = drvModifyPixmapHeader; +} + + diff --git a/drv/drv_screenint.h b/drv/drv_screenint.h index dc3d3c7f3..9afbf4933 100644 --- a/drv/drv_screenint.h +++ b/drv/drv_screenint.h @@ -4,4 +4,6 @@ #include "drv_types.h" DrvScreenPtr DrvScreenAllocate(void); +Bool +drvScreenInit(DrvScreenPtr pDrvScreen); #endif diff --git a/drv/fb/fbscreen.c b/drv/fb/fbscreen.c index bc51b8d1f..eedcf836b 100644 --- a/drv/fb/fbscreen.c +++ b/drv/fb/fbscreen.c @@ -98,10 +98,9 @@ fbSetupScreen(DrvScreenPtr pScreen, pScreen->GetSpans = fbGetSpans; pScreen->CreatePixmap = fbCreatePixmap; pScreen->DestroyPixmap = fbDestroyPixmap; - pScreen->ModifyPixmapHeader = drvModifyPixmapHeader; - // if (!impedScreenInit(pScreen)) - // return FALSE; + if (!drvScreenInit(pScreen)) + return FALSE; return TRUE; } @@ -188,6 +187,11 @@ fbFinishScreenInit(DrvScreenPtr pScreen, fbGetScreenPrivate(pScreen)->finishWrap = finishWrap; #endif rootdepth = 0; + + // if (!drvScreenInit(pScreen)) + // return FALSE; +#if 0 + if (!miInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &rootdepth, &defaultVisual,((unsigned long)1<<(imagebpp-1)), 8, -1)) { @@ -195,7 +199,6 @@ fbFinishScreenInit(DrvScreenPtr pScreen, free(depths); return FALSE; } -#if 0 if (! miScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, rootdepth, ndepths, depths, defaultVisual, nvisuals, visuals)) @@ -203,6 +206,7 @@ fbFinishScreenInit(DrvScreenPtr pScreen, #endif /* overwrite miCloseScreen with our own */ pScreen->CloseScreen = fbCloseScreen; + if (bpp == 24 && imagebpp == 32) { pScreen->ModifyPixmapHeader = fb24_32ModifyPixmapHeader; diff --git a/drv/impedscrn.c b/drv/impedscrn.c index de9420dcb..ce3f02cf5 100644 --- a/drv/impedscrn.c +++ b/drv/impedscrn.c @@ -350,7 +350,7 @@ impedCloseScreen (int index,ScreenPtr pScreen) } Bool -impedSetupScreen(int index, ScreenPtr pScreen, int argc, char **argv) +impedSetupScreen(int index, ScreenPtr pScreen) { if (!impedAllocatePrivates(pScreen, NULL)) @@ -381,7 +381,6 @@ impedSetupScreen(int index, ScreenPtr pScreen, int argc, char **argv) pScreen->CreatePixmap = impedCreatePixmap; pScreen->DestroyPixmap = impedDestroyPixmap; - pScreen->ModifyPixmapHeader = impedModifyPixmapHeader; pScreen->CreateGC = impedCreateGC; @@ -414,6 +413,8 @@ Bool impedFinishScreenInit(ScreenPtr pScreen, VisualID defaultVisual; int imagebpp = bpp; + rootdepth = 0; + if (!miInitVisuals(&visuals, &depths, &nvisuals, &ndepths, &rootdepth, &defaultVisual, 8, ((unsigned long)1<<(imagebpp - 1)), -1)) return FALSE; @@ -421,6 +422,9 @@ Bool impedFinishScreenInit(ScreenPtr pScreen, rootdepth, ndepths, depths, defaultVisual, nvisuals, visuals)) return FALSE; + + pScreen->ModifyPixmapHeader = impedModifyPixmapHeader; + } void impedScreenSetPixmapSize(ScreenPtr pScreen) @@ -454,6 +458,7 @@ void impedAttachDrvScreen(ScreenPtr pScreen, DrvScreenPtr pDrvScreen) } imped_screen->gpu[i] = pDrvScreen; + pDrvScreen->pScreen = pScreen; imped_screen->num_gpu++; } diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 80a9ef2d2..46f468a12 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -102,7 +102,7 @@ KdDisableScreen (DrvScreenPtr pScreen) if (!pScreenPriv->enabled) return; //TODOif (!pScreenPriv->closed) - // SetRootClip (pScreen, FALSE); + SetRootClip (pScreen->pScreen, FALSE); KdDisableColormap (pScreen); if (!pScreenPriv->screen->dumb && pScreenPriv->card->cfuncs->disableAccel) (*pScreenPriv->card->cfuncs->disableAccel) (pScreen); @@ -185,7 +185,7 @@ KdEnableScreen (DrvScreenPtr pScreen) if (!pScreenPriv->screen->dumb && pScreenPriv->card->cfuncs->enableAccel) (*pScreenPriv->card->cfuncs->enableAccel) (pScreen); KdEnableColormap (pScreen); - // SetRootClip (pScreen, TRUE); + SetRootClip (pScreen->pScreen, TRUE); if (pScreenPriv->card->cfuncs->dpms) (*pScreenPriv->card->cfuncs->dpms) (pScreen, pScreenPriv->dpmsState); return TRUE; @@ -594,6 +594,7 @@ KdProcessArgument (int argc, char **argv, int i) screen = KdScreenInfoAdd (); // KdParseScreen (screen, argv[i+1]); drvscreen = KdDrvScreenInfoAdd(card); + drvscreen->proto_screen = screen->mynum; KdParseDrvScreen (drvscreen, argv[i+1]); } else ErrorF("No matching card found!\n"); @@ -828,6 +829,7 @@ KdSaveScreen (DrvScreenPtr pScreen, int on) KdScreenPriv(pScreen); int dpmsState; +#if 0 if (!pScreenPriv->card->cfuncs->dpms) return FALSE; @@ -854,6 +856,7 @@ KdSaveScreen (DrvScreenPtr pScreen, int on) pScreenPriv->dpmsState = dpmsState; } return TRUE; +#endif } static Bool @@ -999,7 +1002,7 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) pScreen->ListInstalledColormaps = KdListInstalledColormaps; pScreen->StoreColors = KdStoreColors; - //pScreen->SaveScreen = KdSaveScreen; + // pScreen->CreateWindow = KdCreateWindow; if (!fbFinishScreenInit (pScreen, @@ -1069,7 +1072,7 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) { /* Use MI for cursor display and event queueing. */ screen->softCursor = TRUE; - // miDCInitialize(pScreen, &kdPointerScreenFuncs); + //miDCInitialize(pScreen, &kdPointerScreenFuncs); } @@ -1184,15 +1187,46 @@ KdSetPixmapFormats (ScreenInfo *pScreenInfo) return TRUE; } -static void +static Bool KdScreenInit(int index, ScreenPtr pScreen, - int argc, char *argv) + int argc, char **argv) { + KdScreenInfo *screen = kdCurrentScreen; + KdCardInfo *card; + KdDrvScreenInfo *drvscreen, *first = NULL; + Bool rotated; + int width, height; - if (!miCreateDefColormap (pScreen)) - { + if (!impedSetupScreen(index, pScreen)) + return FALSE; + + /* add drv screens to screen with imped */ + for (card = kdCardInfo; card; card = card->next) + for (drvscreen = card->drv_screenList; drvscreen; drvscreen = drvscreen->next) + if (drvscreen->proto_screen == screen->mynum) { + if (!first) + first = drvscreen; + impedAttachDrvScreen(pScreen, drvscreen->pDrvScreen); + } + + rotated = first->randr & (RR_Rotate_90 | RR_Rotate_270); + if (!rotated) { + width = first->width; + height = first->height; + } else { + width = first->height; + height = first->width; + } + if (!impedFinishScreenInit(pScreen, first->fb.frameBuffer, width, height, + 75, 75, + first->fb.pixelStride, first->fb.bitsPerPixel)) + return FALSE; + if (!miCreateDefColormap (pScreen)) { return FALSE; } + pScreen->SaveScreen = KdSaveScreen; + if (first->softCursor) + miDCInitialize(pScreen, &kdPointerScreenFuncs); } @@ -1203,10 +1237,23 @@ KdAddScreen (ScreenInfo *pScreenInfo, char **argv) { int i; + KdCardInfo *card; + KdDrvScreenInfo *drvscreen, *found = NULL; /* * Fill in fb visual type masks for this screen */ -#if 0 + for (card = kdCardInfo; card; card = card->next) { + for (drvscreen = card->drv_screenList; drvscreen; drvscreen = drvscreen->next) + if (drvscreen->proto_screen == screen->mynum) + found = drvscreen; + break; + } + + if (!found) { + ErrorF("can't find screen for protocol screen\n"); + return; + } + for (i = 0; i < pScreenInfo->numPixmapFormats; i++) { unsigned long visuals; @@ -1214,19 +1261,19 @@ KdAddScreen (ScreenInfo *pScreenInfo, visuals = 0; rm = gm = bm = 0; - if (pScreenInfo->formats[i].depth == screen->fb.depth) + if (pScreenInfo->formats[i].depth == found->fb.depth) { - visuals = screen->fb.visuals; - rm = screen->drvscreen->fb.redMask; - gm = screen->drvscreen->fb.greenMask; - bm = screen->drvscreen->fb.blueMask; + visuals = found->fb.visuals; + rm = found->fb.redMask; + gm = found->fb.greenMask; + bm = found->fb.blueMask; } miSetVisualTypesAndMasks (pScreenInfo->formats[i].depth, visuals, - 8, + 8, -1, rm, gm, bm); } -#endif + kdCurrentScreen = screen; AddScreen (KdScreenInit, argc, argv); diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h index 837b3dc80..f1026e664 100644 --- a/hw/kdrive/src/kdrive.h +++ b/hw/kdrive/src/kdrive.h @@ -115,6 +115,7 @@ typedef struct _KdDrvScreenInfo { int mynum; DDXPointRec origin; KdFrameBuffer fb; + int proto_screen; /* which protocol screen this is going to */ } KdDrvScreenInfo; |