diff options
author | Dave Airlie <airlied@redhat.com> | 2011-08-12 14:40:23 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-08-12 14:40:23 +0100 |
commit | 2053325d8525411517e42f719f3429470d33f4b6 (patch) | |
tree | 007f74f1506c9d02b49a1f58249dbeb3292f1d23 | |
parent | 27e0679ddc13e4596f185335548d479e281f92b0 (diff) |
drv/kdrive: fixup some colormap loving
-rw-r--r-- | hw/kdrive/ephyr/ephyr.c | 16 | ||||
-rw-r--r-- | hw/kdrive/src/kcmap.c | 62 | ||||
-rw-r--r-- | hw/kdrive/src/kdrive.c | 59 | ||||
-rw-r--r-- | hw/kdrive/src/kdrive.h | 37 |
4 files changed, 109 insertions, 65 deletions
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c index b369fc542..3a6a9ac5c 100644 --- a/hw/kdrive/ephyr/ephyr.c +++ b/hw/kdrive/ephyr/ephyr.c @@ -214,13 +214,15 @@ ephyrWindowLinear (ScreenPtr pScreen, void *closure) { KdScreenPriv(pScreen); - EphyrPriv *priv = pScreenPriv->card->driver; +#if 0 + EphyrPriv *priv = pScreenPriv->card->driver; if (!pScreenPriv->enabled) return 0; *size = priv->bytes_per_line; return priv->base + row * priv->bytes_per_line + offset; +#endif } /** @@ -326,7 +328,7 @@ ephyrUnmapFramebuffer (KdDrvScreenInfo *screen) void ephyrShadowUpdate (DrvScreenPtr pScreen, shadowBufPtr pBuf) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; EPHYR_LOG("slow paint"); @@ -342,7 +344,7 @@ ephyrShadowUpdate (DrvScreenPtr pScreen, shadowBufPtr pBuf) static void ephyrInternalDamageRedisplay (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; EphyrScrPriv *scrpriv = screen->driver; RegionPtr pRegion; @@ -392,7 +394,7 @@ ephyrInternalDamageWakeupHandler (pointer data, int i, pointer LastSelectMask) Bool ephyrSetInternalDamage (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; EphyrScrPriv *scrpriv = screen->driver; DrvPixmapPtr pPixmap = NULL; @@ -419,7 +421,7 @@ ephyrSetInternalDamage (DrvScreenPtr pScreen) void ephyrUnsetInternalDamage (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; EphyrScrPriv *scrpriv = screen->driver; DrvPixmapPtr pPixmap = NULL; @@ -646,7 +648,7 @@ ephyrCreateColormap (ColormapPtr pmap) Bool ephyrInitScreen (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; EPHYR_LOG ("pScreen->myNum:%d\n", pScreen->myNum) ; @@ -708,7 +710,7 @@ ephyrFinishInitScreen (DrvScreenPtr pScreen) Bool ephyrCreateResources (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; EphyrScrPriv *scrpriv = screen->driver; diff --git a/hw/kdrive/src/kcmap.c b/hw/kdrive/src/kcmap.c index e2df38e62..0bde16c6c 100644 --- a/hw/kdrive/src/kcmap.c +++ b/hw/kdrive/src/kcmap.c @@ -30,7 +30,7 @@ */ void -KdSetColormap (DrvScreenPtr pScreen) +KdSetColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); ColormapPtr pCmap = pScreenPriv->pInstalledmap; @@ -39,13 +39,13 @@ KdSetColormap (DrvScreenPtr pScreen) xColorItem defs[KD_MAX_PSEUDO_SIZE]; int i; - if (!pScreenPriv->card->cfuncs->putColors) - return; - if (pScreenPriv->screen->fb.depth > KD_MAX_PSEUDO_DEPTH) - return; + // if (!pScreenPriv->card->cfuncs->putColors) + // return; + // if (pScreenPriv->screen->fb.depth > KD_MAX_PSEUDO_DEPTH) + // return; - if (!pScreenPriv->enabled) - return; + // if (!pScreenPriv->enabled) + // return; if (!pCmap) return; @@ -54,7 +54,7 @@ KdSetColormap (DrvScreenPtr pScreen) * Make DIX convert pixels into RGB values -- this handles * true/direct as well as pseudo/static visuals */ - +#if 0 for (i = 0; i < (1 << pScreenPriv->screen->fb.depth); i++) pixels[i] = i; @@ -71,11 +71,12 @@ KdSetColormap (DrvScreenPtr pScreen) (*pScreenPriv->card->cfuncs->putColors) (pScreen, (1 << pScreenPriv->screen->fb.depth), - defs); /* recolor hardware cursor */ if (pScreenPriv->card->cfuncs->recolorCursor) (*pScreenPriv->card->cfuncs->recolorCursor) (pScreen, 0, 0); +#endif defs); + } /* @@ -83,11 +84,12 @@ KdSetColormap (DrvScreenPtr pScreen) * the current colormap */ void -KdEnableColormap (DrvScreenPtr pScreen) +KdEnableColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); int i; +#if 0 if (!pScreenPriv->card->cfuncs->putColors) return; @@ -99,16 +101,18 @@ KdEnableColormap (DrvScreenPtr pScreen) (1 << pScreenPriv->screen->fb.depth), pScreenPriv->systemPalette); } +#endif KdSetColormap (pScreen); } void -KdDisableColormap (DrvScreenPtr pScreen) +KdDisableColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); - if (!pScreenPriv->card->cfuncs->putColors) - return; +#if 0 + // if (!pScreenPriv->card->cfuncs->putColors) + // return; if (pScreenPriv->screen->fb.depth <= KD_MAX_PSEUDO_DEPTH) { @@ -116,6 +120,7 @@ KdDisableColormap (DrvScreenPtr pScreen) (1 << pScreenPriv->screen->fb.depth), pScreenPriv->systemPalette); } +#endif } /* @@ -128,25 +133,26 @@ KdDisableColormap (DrvScreenPtr pScreen) * colormap and realize it into the Windows system palette. */ void -KdInstallColormap (DrvScreenPtr pDrvScreen, ColormapPtr pCmap) +KdInstallColormap (ColormapPtr pCmap) { - KdScreenPriv(pDrvScreen); + ScreenPtr pScreen = pCmap->pScreen; + KdScreenPriv(pScreen); if (pCmap == pScreenPriv->pInstalledmap) return; /* Tell X clients that the installed colormap is going away. */ - // if (pScreenPriv->pInstalledmap) - // WalkTree(pScreenPriv->pInstalledmap->pScreen, TellLostMap, - // (pointer) &(pScreenPriv->pInstalledmap->mid)); + if (pScreenPriv->pInstalledmap) + WalkTree(pScreenPriv->pInstalledmap->pScreen, TellLostMap, + (pointer) &(pScreenPriv->pInstalledmap->mid)); /* Take note of the new installed colorscreen-> */ pScreenPriv->pInstalledmap = pCmap; - KdSetColormap (pDrvScreen); + KdSetColormap (pScreen); /* Tell X clients of the new colormap */ - // WalkTree(pCmap->pScreen, TellGainedMap, (pointer) &(pCmap->mid)); + WalkTree(pCmap->pScreen, TellGainedMap, (pointer) &(pCmap->mid)); } /* @@ -157,9 +163,8 @@ KdInstallColormap (DrvScreenPtr pDrvScreen, ColormapPtr pCmap) * The default X colormap itself cannot be uninstalled. */ void -KdUninstallColormap (DrvScreenPtr pDrvScreen, ColormapPtr pCmap) +KdUninstallColormap (ScreenPtr pDrvScreen, ColormapPtr pCmap) { -#if 0 KdScreenPriv(pDrvScreen); Colormap defMapID; ColormapPtr defMap; @@ -169,7 +174,7 @@ KdUninstallColormap (DrvScreenPtr pDrvScreen, ColormapPtr pCmap) return; dixLookupResourceByType((pointer *)&defMap, defMapID, RT_COLORMAP, - 0 serverClient, DixInstallAccess); + serverClient, DixInstallAccess); if (defMap) (*pCmap->pScreen->InstallColormap)(defMap); else @@ -179,13 +184,11 @@ KdUninstallColormap (DrvScreenPtr pDrvScreen, ColormapPtr pCmap) (pointer) &(pCmap->mid)); pScreenPriv->pInstalledmap = 0; } -#endif } int -KdListInstalledColormaps (DrvScreenPtr pScreen, Colormap *pCmaps) +KdListInstalledColormaps (ScreenPtr pScreen, Colormap *pCmaps) { -#if 0 KdScreenPriv(pScreen); int n = 0; @@ -195,7 +198,6 @@ KdListInstalledColormaps (DrvScreenPtr pScreen, Colormap *pCmaps) n++; } return n; -#endif } /* @@ -206,12 +208,13 @@ KdListInstalledColormaps (DrvScreenPtr pScreen, Colormap *pCmaps) * colormap; it can be either the default colormap or a private colorscreen-> */ void -KdStoreColors (DrvScreenPtr pDrvScreen, ColormapPtr pCmap, int ndef, xColorItem *pdefs) +KdStoreColors (ScreenPtr pScreen, ColormapPtr pCmap, int ndef, xColorItem *pdefs) { - KdScreenPriv(pDrvScreen); + KdScreenPriv(pScreen); VisualPtr pVisual; xColorItem expanddefs[KD_MAX_PSEUDO_SIZE]; +#if 0 if (pCmap != pScreenPriv->pInstalledmap) return; @@ -241,4 +244,5 @@ KdStoreColors (DrvScreenPtr pDrvScreen, ColormapPtr pCmap, int ndef, xColorItem /* recolor hardware cursor */ if (pScreenPriv->card->cfuncs->recolorCursor) (*pScreenPriv->card->cfuncs->recolorCursor) (pDrvScreen, ndef, pdefs); +#endif } diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 46f468a12..feeccf80e 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -97,13 +97,12 @@ KdOsFuncs *kdOsFuncs; void KdDisableScreen (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); - + KdDrvScreenPriv(pScreen); if (!pScreenPriv->enabled) return; //TODOif (!pScreenPriv->closed) SetRootClip (pScreen->pScreen, FALSE); - KdDisableColormap (pScreen); + // KdDisableColormap (pScreen); if (!pScreenPriv->screen->dumb && pScreenPriv->card->cfuncs->disableAccel) (*pScreenPriv->card->cfuncs->disableAccel) (pScreen); if (!pScreenPriv->screen->softCursor && pScreenPriv->card->cfuncs->disableCursor) @@ -170,7 +169,7 @@ KdDisableScreens (void) Bool KdEnableScreen (DrvScreenPtr pScreen) { - KdScreenPriv (pScreen); + KdDrvScreenPriv (pScreen); if (pScreenPriv->enabled) return TRUE; @@ -184,7 +183,7 @@ KdEnableScreen (DrvScreenPtr pScreen) (*pScreenPriv->card->cfuncs->enableCursor) (pScreen); if (!pScreenPriv->screen->dumb && pScreenPriv->card->cfuncs->enableAccel) (*pScreenPriv->card->cfuncs->enableAccel) (pScreen); - KdEnableColormap (pScreen); + // KdEnableColormap (pScreen); SetRootClip (pScreen->pScreen, TRUE); if (pScreenPriv->card->cfuncs->dpms) (*pScreenPriv->card->cfuncs->dpms) (pScreen, pScreenPriv->dpmsState); @@ -723,9 +722,9 @@ KdOsInit (KdOsFuncs *pOsFuncs) } Bool -KdAllocatePrivates (DrvScreenPtr pScreen) +KdAllocatePrivates (ScreenPtr pScreen) { - KdPrivDrvScreenPtr pScreenPriv; + KdPrivScreenPtr pScreenPriv; if (kdGeneration != serverGeneration) kdGeneration = serverGeneration; @@ -738,9 +737,24 @@ KdAllocatePrivates (DrvScreenPtr pScreen) } Bool +KdDrvAllocatePrivates (DrvScreenPtr pScreen) +{ + KdPrivDrvScreenPtr pScreenPriv; + + if (kdGeneration != serverGeneration) + kdGeneration = serverGeneration; + + pScreenPriv = calloc(1, sizeof (*pScreenPriv)); + if (!pScreenPriv) + return FALSE; + KdSetDrvScreenPriv (pScreen, pScreenPriv); + return TRUE; +} + +Bool KdCreateScreenResources (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdCardInfo *card = pScreenPriv->card; Bool ret; @@ -759,7 +773,7 @@ KdCreateScreenResources (DrvScreenPtr pScreen) Bool KdCloseScreen (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; KdCardInfo *card = pScreenPriv->card; Bool ret; @@ -826,7 +840,7 @@ KdCloseScreen (DrvScreenPtr pScreen) Bool KdSaveScreen (DrvScreenPtr pScreen, int on) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); int dpmsState; #if 0 @@ -880,7 +894,7 @@ KdCreateWindow (WindowPtr pWin) void KdSetSubpixelOrder (DrvScreenPtr pScreen, Rotation randr) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; int subpixel_order = screen->subpixel_order; Rotation subpixel_dir; @@ -951,7 +965,7 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) Bool rotated = (screen->randr & (RR_Rotate_90|RR_Rotate_270)) != 0; int width, height, *width_mmp, *height_mmp; - KdAllocatePrivates (pScreen); + KdDrvAllocatePrivates (pScreen); pScreenPriv = KdGetDrvScreenPriv(pScreen); @@ -997,9 +1011,6 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) /* * Set colormap functions */ - pScreen->InstallColormap = KdInstallColormap; - pScreen->UninstallColormap = KdUninstallColormap; - pScreen->ListInstalledColormaps = KdListInstalledColormaps; pScreen->StoreColors = KdStoreColors; @@ -1099,7 +1110,7 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) pScreenPriv->enabled = TRUE; if (!screen->softCursor && card->cfuncs->enableCursor) (*card->cfuncs->enableCursor) (pScreen); - KdEnableColormap (pScreen); + // KdEnableColormap (pScreen); if (!screen->dumb && card->cfuncs->enableAccel) (*card->cfuncs->enableAccel) (pScreen); } @@ -1197,6 +1208,8 @@ KdScreenInit(int index, ScreenPtr pScreen, Bool rotated; int width, height; + KdAllocatePrivates (pScreen); + if (!impedSetupScreen(index, pScreen)) return FALSE; @@ -1217,17 +1230,23 @@ KdScreenInit(int index, ScreenPtr pScreen, width = first->height; height = first->width; } + + pScreen->InstallColormap = KdInstallColormap; + pScreen->UninstallColormap = KdUninstallColormap; + pScreen->ListInstalledColormaps = KdListInstalledColormaps; + 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); + if (!miCreateDefColormap (pScreen)) { + return FALSE; + } } static void @@ -1314,6 +1333,8 @@ KdInitOutput (ScreenInfo *pScreenInfo, if (!dixRegisterPrivateKey(&kdDrvScreenPrivateKeyRec, PRIVATE_DRV_SCREEN, 0)) return FALSE; + if (!dixRegisterPrivateKey(&kdScreenPrivateKeyRec, PRIVATE_SCREEN, 0)) + return FALSE; if (!kdCardInfo) { diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h index f1026e664..3a5cb3d8f 100644 --- a/hw/kdrive/src/kdrive.h +++ b/hw/kdrive/src/kdrive.h @@ -169,6 +169,14 @@ typedef struct { DrvCloseScreenProcPtr CloseScreen; } KdPrivDrvScreenRec, *KdPrivDrvScreenPtr; +typedef struct { + KdScreenInfo *screen; + + ColormapPtr pInstalledmap; /* current colormap */ + xColorItem systemPalette[KD_MAX_PSEUDO_SIZE];/* saved windows colors */ + + Bool enabled; +} KdPrivScreenRec, *KdPrivScreenPtr; typedef enum _kdPointerState { start, @@ -377,31 +385,37 @@ extern KdOsFuncs *kdOsFuncs; #define KdGetDrvScreenPriv(pScreen) ((KdPrivDrvScreenPtr) \ dixLookupPrivate(&(pScreen)->devPrivates, kdDrvScreenPrivateKey)) -#define KdSetScreenPriv(pScreen,v) \ +#define KdSetDrvScreenPriv(pScreen,v) \ dixSetPrivate(&(pScreen)->devPrivates, kdDrvScreenPrivateKey, v) -#define KdScreenPriv(pScreen) KdPrivDrvScreenPtr pScreenPriv = KdGetDrvScreenPriv(pScreen) +#define KdDrvScreenPriv(pScreen) KdPrivDrvScreenPtr pScreenPriv = KdGetDrvScreenPriv(pScreen) + +#define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \ + dixLookupPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey)) +#define KdSetScreenPriv(pScreen,v) \ + dixSetPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey, v) +#define KdScreenPriv(pScreen) KdPrivScreenPtr pScreenPriv = KdGetScreenPriv(pScreen) /* kcmap.c */ void -KdSetColormap (DrvScreenPtr pScreen); +KdSetColormap (ScreenPtr pScreen); void -KdEnableColormap (DrvScreenPtr pScreen); +KdEnableColormap (ScreenPtr pScreen); void -KdDisableColormap (DrvScreenPtr pScreen); +KdDisableColormap (ScreenPtr pScreen); void -KdInstallColormap (DrvScreenPtr pDrvScreen, ColormapPtr pCmap); +KdInstallColormap (ColormapPtr pCmap); void -KdUninstallColormap (DrvScreenPtr pDrvScreen, ColormapPtr pCmap); +KdUninstallColormap (ScreenPtr pDrvScreen, ColormapPtr pCmap); int -KdListInstalledColormaps (DrvScreenPtr pScreen, Colormap *pCmaps); +KdListInstalledColormaps (ScreenPtr pScreen, Colormap *pCmaps); void -KdStoreColors (DrvScreenPtr pScreen, ColormapPtr pCmap, int ndef, xColorItem *pdefs); +KdStoreColors (ScreenPtr pScreen, ColormapPtr pCmap, int ndef, xColorItem *pdefs); /* kdrive.c */ extern miPointerScreenFuncRec kdPointerScreenFuncs; @@ -462,7 +476,10 @@ void KdOsAddInputDrivers (void); Bool -KdAllocatePrivates (DrvScreenPtr pScreen); +KdAllocatePrivates (ScreenPtr pScreen); + +Bool +KdDrvAllocatePrivates (DrvScreenPtr pScreen); Bool KdCreateScreenResources (DrvScreenPtr pScreen); |