From d5b16b037b8fe12ba85c68c8289b6a8cc5e3a09d Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 17 Mar 2011 23:48:52 -0700 Subject: [PATCH] Revert "dix: Remove usage_hint from pixmaps, store it in ->drawable.class" This reverts commit 1564c82417d201de5b9a5ec5e7aa4ef14c45fbad. The drivers used the top bits of the usage_hint to store driver private flags (intel, radeon, nouveau). With EXA we need to get at this data so if we migrate the pixmap we can create the correct type of pixmap in the driver, however this commit truncates the usage_hint into 8-bit class and loses all the good stuff. Signed-off-by: Dave Airlie Reviewed-by: Keith Packard --- exa/exa.h | 2 +- exa/exa_classic.c | 4 ++-- exa/exa_driver.c | 6 +++--- exa/exa_migration_mixed.c | 4 ++-- exa/exa_mixed.c | 4 ++-- exa/exa_priv.h | 6 +++--- fb/fb.h | 4 ++-- fb/fb24_32.c | 2 +- fb/fbpixmap.c | 10 ++++++---- hw/dmx/dmxpixmap.c | 5 +++-- hw/dmx/dmxpixmap.h | 2 +- hw/xfree86/common/xf86VGAarbiter.c | 4 ++-- hw/xfree86/common/xf86VGAarbiterPriv.h | 2 +- hw/xfree86/xaa/xaaInit.c | 10 +++++----- hw/xnest/Pixmap.c | 5 +++-- hw/xnest/XNPixmap.h | 2 +- hw/xwin/win.h | 2 +- hw/xwin/winpixmap.c | 7 ++++--- include/pixmapstr.h | 1 + include/scrnintstr.h | 2 +- 20 files changed, 45 insertions(+), 39 deletions(-) diff --git a/exa/exa.h b/exa/exa.h index 6de63008ef..8c93d156f8 100644 --- a/exa/exa.h +++ b/exa/exa.h @@ -712,7 +712,7 @@ typedef struct _ExaDriver { * driver MUST fill out new_fb_pitch with valid pitch of pixmap */ void *(*CreatePixmap2)(ScreenPtr pScreen, int width, int height, - int depth, int class, int bitsPerPixel, + int depth, int usage_hint, int bitsPerPixel, int *new_fb_pitch); /** @} */ } ExaDriverRec, *ExaDriverPtr; diff --git a/exa/exa_classic.c b/exa/exa_classic.c index 640b26a122..169ce3aac3 100644 --- a/exa/exa_classic.c +++ b/exa/exa_classic.c @@ -54,7 +54,7 @@ ExaGetPixmapAddress(PixmapPtr p) */ PixmapPtr exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, - unsigned class) + unsigned usage_hint) { PixmapPtr pPixmap; ExaPixmapPrivPtr pExaPixmap; @@ -66,7 +66,7 @@ exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, return NullPixmap; swap(pExaScr, pScreen, CreatePixmap); - pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, class); + pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, usage_hint); swap(pExaScr, pScreen, CreatePixmap); if (!pPixmap) diff --git a/exa/exa_driver.c b/exa/exa_driver.c index 4d2a1a5dfa..b9903d1bc3 100644 --- a/exa/exa_driver.c +++ b/exa/exa_driver.c @@ -48,7 +48,7 @@ ExaGetPixmapAddress(PixmapPtr p) */ PixmapPtr exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, - unsigned class) + unsigned usage_hint) { PixmapPtr pPixmap; ExaPixmapPrivPtr pExaPixmap; @@ -60,7 +60,7 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, return NullPixmap; swap(pExaScr, pScreen, CreatePixmap); - pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, class); + pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, usage_hint); swap(pExaScr, pScreen, CreatePixmap); if (!pPixmap) @@ -78,7 +78,7 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, if (pExaScr->info->CreatePixmap2) { int new_pitch = 0; - pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, class, bpp, &new_pitch); + pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp, &new_pitch); paddedWidth = pExaPixmap->fb_pitch = new_pitch; } else { diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c index a563357be6..fb47151358 100644 --- a/exa/exa_migration_mixed.c +++ b/exa/exa_migration_mixed.c @@ -39,7 +39,7 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap) ExaPixmapPriv(pPixmap); int w = pPixmap->drawable.width, h = pPixmap->drawable.height; int depth = pPixmap->drawable.depth, bpp = pPixmap->drawable.bitsPerPixel; - int class = pPixmap->drawable.class; + int usage_hint = pPixmap->usage_hint; int paddedWidth = pExaPixmap->sys_pitch; /* Already done. */ @@ -55,7 +55,7 @@ exaCreateDriverPixmap_mixed(PixmapPtr pPixmap) if (pExaScr->info->CreatePixmap2) { int new_pitch = 0; - pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, class, bpp, &new_pitch); + pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp, &new_pitch); paddedWidth = pExaPixmap->fb_pitch = new_pitch; } else { if (paddedWidth < pExaPixmap->fb_pitch) diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c index 24fce76458..fd1afb2469 100644 --- a/exa/exa_mixed.c +++ b/exa/exa_mixed.c @@ -47,7 +47,7 @@ ExaGetPixmapAddress(PixmapPtr p) */ PixmapPtr exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, - unsigned class) + unsigned usage_hint) { PixmapPtr pPixmap; ExaPixmapPrivPtr pExaPixmap; @@ -59,7 +59,7 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, return NullPixmap; swap(pExaScr, pScreen, CreatePixmap); - pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, class); + pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, usage_hint); swap(pExaScr, pScreen, CreatePixmap); if (!pPixmap) diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 1f6dede94e..e5d90d468c 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -588,7 +588,7 @@ extern const GCFuncs exaGCFuncs; /* exa_classic.c */ PixmapPtr exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, - unsigned class); + unsigned usage_hint); Bool exaModifyPixmapHeader_classic(PixmapPtr pPixmap, int width, int height, int depth, @@ -603,7 +603,7 @@ exaPixmapHasGpuCopy_classic(PixmapPtr pPixmap); /* exa_driver.c */ PixmapPtr exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, - unsigned class); + unsigned usage_hint); Bool exaModifyPixmapHeader_driver(PixmapPtr pPixmap, int width, int height, int depth, @@ -618,7 +618,7 @@ exaPixmapHasGpuCopy_driver(PixmapPtr pPixmap); /* exa_mixed.c */ PixmapPtr exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, - unsigned class); + unsigned usage_hint); Bool exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth, diff --git a/fb/fb.h b/fb/fb.h index d90521907b..021a940d05 100644 --- a/fb/fb.h +++ b/fb/fb.h @@ -1625,11 +1625,11 @@ fbPictureInit (ScreenPtr pScreen, extern _X_EXPORT PixmapPtr fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, - unsigned class); + unsigned usage_hint); extern _X_EXPORT PixmapPtr fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, - unsigned class); + unsigned usage_hint); extern _X_EXPORT Bool fbDestroyPixmap (PixmapPtr pPixmap); diff --git a/fb/fb24_32.c b/fb/fb24_32.c index e24f394bcf..2e600edc0d 100644 --- a/fb/fb24_32.c +++ b/fb/fb24_32.c @@ -546,7 +546,7 @@ fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel) pNewTile = pScreen->CreatePixmap(pScreen, pOldTile->drawable.width, pOldTile->drawable.height, pOldTile->drawable.depth, - pOldTile->drawable.class); + pOldTile->usage_hint); if (!pNewTile) return 0; fbGetDrawable (&pOldTile->drawable, diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c index 232de82a91..41b12cea75 100644 --- a/fb/fbpixmap.c +++ b/fb/fbpixmap.c @@ -30,7 +30,7 @@ PixmapPtr fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, - unsigned class) + unsigned usage_hint) { PixmapPtr pPixmap; size_t datasize; @@ -54,7 +54,7 @@ fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, if (!pPixmap) return NullPixmap; pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = class; + pPixmap->drawable.class = 0; pPixmap->drawable.pScreen = pScreen; pPixmap->drawable.depth = depth; pPixmap->drawable.bitsPerPixel = bpp; @@ -78,12 +78,14 @@ fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, pPixmap->screen_y = 0; #endif + pPixmap->usage_hint = usage_hint; + return pPixmap; } PixmapPtr fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, - unsigned class) + unsigned usage_hint) { int bpp; bpp = BitsPerPixel (depth); @@ -91,7 +93,7 @@ fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, if (bpp == 32 && depth <= 24) bpp = fbGetScreenPrivate(pScreen)->pix32bpp; #endif - return fbCreatePixmapBpp (pScreen, width, height, depth, bpp, class); + return fbCreatePixmapBpp (pScreen, width, height, depth, bpp, usage_hint); } Bool diff --git a/hw/dmx/dmxpixmap.c b/hw/dmx/dmxpixmap.c index a167364195..81b71151a4 100644 --- a/hw/dmx/dmxpixmap.c +++ b/hw/dmx/dmxpixmap.c @@ -82,7 +82,7 @@ void dmxBECreatePixmap(PixmapPtr pPixmap) /** Create a pixmap for \a pScreen with the specified \a width, \a * height, and \a depth. */ PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, - unsigned class) + unsigned usage_hint) { DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum]; PixmapPtr pPixmap; @@ -104,7 +104,7 @@ PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, return NullPixmap; pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = class; + pPixmap->drawable.class = 0; pPixmap->drawable.pScreen = pScreen; pPixmap->drawable.depth = depth; pPixmap->drawable.bitsPerPixel = bpp; @@ -116,6 +116,7 @@ PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, pPixmap->drawable.height = height; pPixmap->devKind = PixmapBytePad(width, bpp); pPixmap->refcnt = 1; + pPixmap->usage_hint = usage_hint; pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap); pPixPriv->pixmap = (Pixmap)0; diff --git a/hw/dmx/dmxpixmap.h b/hw/dmx/dmxpixmap.h index 4b4a8b275e..59da788b30 100644 --- a/hw/dmx/dmxpixmap.h +++ b/hw/dmx/dmxpixmap.h @@ -50,7 +50,7 @@ extern Bool dmxInitPixmap(ScreenPtr pScreen); extern PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, - unsigned class); + unsigned usage_hint); extern Bool dmxDestroyPixmap(PixmapPtr pPixmap); extern RegionPtr dmxBitmapToRegion(PixmapPtr pPixmap); diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c index c5ebb27808..215e8454ad 100644 --- a/hw/xfree86/common/xf86VGAarbiter.c +++ b/hw/xfree86/common/xf86VGAarbiter.c @@ -369,13 +369,13 @@ VGAarbiterClearToBackground ( } static PixmapPtr -VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned class) +VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) { PixmapPtr pPix; SCREEN_PROLOG ( CreatePixmap); VGAGet(pScreen); - pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, class); + pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint); VGAPut(); SCREEN_EPILOG (CreatePixmap, VGAarbiterCreatePixmap); diff --git a/hw/xfree86/common/xf86VGAarbiterPriv.h b/hw/xfree86/common/xf86VGAarbiterPriv.h index e1ac20f1fa..848e45da7a 100644 --- a/hw/xfree86/common/xf86VGAarbiterPriv.h +++ b/hw/xfree86/common/xf86VGAarbiterPriv.h @@ -155,7 +155,7 @@ static void VGAarbiterCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, static void VGAarbiterClearToBackground (WindowPtr pWin, int x, int y, int w, int h, Bool generateExposures); static PixmapPtr VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, - int depth, unsigned int class); + int depth, unsigned int usage_hint); static Bool VGAarbiterCreateGC(GCPtr pGC); static Bool VGAarbiterSaveScreen(ScreenPtr pScreen, Bool unblank); static void VGAarbiterStoreColors (ColormapPtr pmap, int ndef, xColorItem diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c index dcbd5aba01..11443a60e3 100644 --- a/hw/xfree86/xaa/xaaInit.c +++ b/hw/xfree86/xaa/xaaInit.c @@ -34,7 +34,7 @@ static void XAAGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h, static void XAAGetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart); static PixmapPtr XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, - unsigned class); + unsigned usage_hint); static Bool XAADestroyPixmap(PixmapPtr pPixmap); static Bool XAAEnterVT (int index, int flags); static void XAALeaveVT (int index, int flags); @@ -331,7 +331,7 @@ XAAInitializeOffscreenDepths (ScreenPtr pScreen) } static PixmapPtr -XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned class) +XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) { XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen); ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; @@ -346,7 +346,7 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned class) XAAInitializeOffscreenDepths (pScreen); if(pScrn->vtSema && - (class != CREATE_PIXMAP_USAGE_GLYPH_PICTURE) && + (usage_hint != CREATE_PIXMAP_USAGE_GLYPH_PICTURE) && (infoRec->offscreenDepths & (1 << (depth - 1))) && (size >= MIN_OFFPIX_SIZE) && !SwitchedOut && (!infoRec->maxOffPixWidth || (w <= infoRec->maxOffPixWidth)) && @@ -379,7 +379,7 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned class) } XAA_SCREEN_PROLOGUE (pScreen, CreatePixmap); - pPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, depth, class); + pPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, depth, usage_hint); XAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, XAACreatePixmap); if (!pPix) { @@ -411,7 +411,7 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned class) } BAILOUT: XAA_SCREEN_PROLOGUE (pScreen, CreatePixmap); - pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, class); + pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint); XAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, XAACreatePixmap); if(pPix) { diff --git a/hw/xnest/Pixmap.c b/hw/xnest/Pixmap.c index c901db19fa..3a92ffde89 100644 --- a/hw/xnest/Pixmap.c +++ b/hw/xnest/Pixmap.c @@ -37,7 +37,7 @@ DevPrivateKeyRec xnestPixmapPrivateKeyRec; PixmapPtr xnestCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, - unsigned class) + unsigned usage_hint) { PixmapPtr pPixmap; @@ -45,7 +45,7 @@ xnestCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, if (!pPixmap) return NullPixmap; pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = class; + pPixmap->drawable.class = 0; pPixmap->drawable.depth = depth; pPixmap->drawable.bitsPerPixel = depth; pPixmap->drawable.id = 0; @@ -57,6 +57,7 @@ xnestCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; pPixmap->refcnt = 1; pPixmap->devKind = PixmapBytePad(width, depth); + pPixmap->usage_hint = usage_hint; if (width && height) xnestPixmapPriv(pPixmap)->pixmap = XCreatePixmap(xnestDisplay, diff --git a/hw/xnest/XNPixmap.h b/hw/xnest/XNPixmap.h index 638a43a1a2..aa671ed1f4 100644 --- a/hw/xnest/XNPixmap.h +++ b/hw/xnest/XNPixmap.h @@ -30,7 +30,7 @@ typedef struct { #define xnestSharePixmap(pPixmap) ((pPixmap)->refcnt++) PixmapPtr xnestCreatePixmap(ScreenPtr pScreen, int width, int height, - int depth, unsigned class); + int depth, unsigned usage_hint); Bool xnestDestroyPixmap(PixmapPtr pPixmap); RegionPtr xnestPixmapToRegion(PixmapPtr pPixmap); diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 606645f9fb..3f40fdbe04 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -1069,7 +1069,7 @@ winSetEngineFunctionsPrimaryDD (ScreenPtr pScreen); PixmapPtr winCreatePixmapNativeGDI (ScreenPtr pScreen, int width, int height, int depth, - unsigned class); + unsigned usage_hint); Bool winDestroyPixmapNativeGDI (PixmapPtr pPixmap); diff --git a/hw/xwin/winpixmap.c b/hw/xwin/winpixmap.c index 62717f31b8..8bd8e3478e 100644 --- a/hw/xwin/winpixmap.c +++ b/hw/xwin/winpixmap.c @@ -57,7 +57,7 @@ winCopyRotatePixmapNativeGDI (PixmapPtr psrcPix, PixmapPtr *ppdstPix, PixmapPtr winCreatePixmapNativeGDI (ScreenPtr pScreen, int iWidth, int iHeight, - int iDepth, unsigned class) + int iDepth, unsigned usage_hint) { winPrivPixmapPtr pPixmapPriv = NULL; PixmapPtr pPixmap = NULL; @@ -72,13 +72,13 @@ winCreatePixmapNativeGDI (ScreenPtr pScreen, #if CYGDEBUG winDebug ("winCreatePixmap () - w %d h %d d %d uh %d bw %d\n", - iWidth, iHeight, iDepth, class, + iWidth, iHeight, iDepth, usage_hint, PixmapBytePad (iWidth, iDepth)); #endif /* Setup pixmap values */ pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = class; + pPixmap->drawable.class = 0; pPixmap->drawable.pScreen = pScreen; pPixmap->drawable.depth = iDepth; pPixmap->drawable.bitsPerPixel = BitsPerPixel (iDepth); @@ -91,6 +91,7 @@ winCreatePixmapNativeGDI (ScreenPtr pScreen, pPixmap->devKind = 0; pPixmap->refcnt = 1; pPixmap->devPrivate.ptr = NULL; + pPixmap->usage_hint = usage_hint; /* Pixmap privates are allocated by AllocatePixmap */ pPixmapPriv = winGetPixmapPriv (pPixmap); diff --git a/include/pixmapstr.h b/include/pixmapstr.h index 542c381bcb..702faf0ac7 100644 --- a/include/pixmapstr.h +++ b/include/pixmapstr.h @@ -80,6 +80,7 @@ typedef struct _Pixmap { short screen_x; short screen_y; #endif + unsigned usage_hint; /* see CREATE_PIXMAP_USAGE_* */ } PixmapRec; #endif /* PIXMAPSTRUCT_H */ diff --git a/include/scrnintstr.h b/include/scrnintstr.h index 302a561bda..a9357e8a5d 100644 --- a/include/scrnintstr.h +++ b/include/scrnintstr.h @@ -208,7 +208,7 @@ typedef PixmapPtr (* CreatePixmapProcPtr)( int /*width*/, int /*height*/, int /*depth*/, - unsigned /*class*/); + unsigned /*usage_hint*/); typedef Bool (* DestroyPixmapProcPtr)( PixmapPtr /*pPixmap*/);