This replaces AllocatePixmap, which was previously called by the screen hooks.
Commit by Jamey Sharp and Josh Triplett. Signed-off-by: Jamey Sharp <[email protected]> Signed-off-by: Josh Triplett <[email protected]> --- v2: The patch I posted originally was built on top of an experimental patch I don't want to push right now. This one should apply to master. Xext/shm.c | 5 +-- composite/compalloc.c | 4 +- dbe/midbe.c | 18 ++++----- dix/dispatch.c | 6 +--- dix/gc.c | 7 +--- dix/glyphcurs.c | 4 +-- dix/pixmap.c | 47 ++++++++++++++---------- dix/window.c | 3 +- doc/xml/Xserver-spec.xml | 31 +++++----------- exa/exa_classic.c | 24 +++++++------ exa/exa_driver.c | 26 +++++++------ exa/exa_glyphs.c | 12 ++----- exa/exa_mixed.c | 22 ++++++----- exa/exa_offscreen.c | 2 +- exa/exa_priv.h | 15 +++----- exa/exa_render.c | 3 +- fb/fb.h | 10 ++--- fb/fb24_32.c | 2 +- fb/fboverlay.c | 2 +- fb/fbpixmap.c | 62 ++++++++----------------------- glx/glxcmds.c | 3 +- hw/dmx/dmxpixmap.c | 31 +++------------- hw/dmx/dmxpixmap.h | 4 +-- hw/xfree86/common/xf86DGA.c | 2 +- hw/xfree86/common/xf86VGAarbiter.c | 11 +++--- hw/xfree86/common/xf86VGAarbiterPriv.h | 3 +- hw/xfree86/xaa/xaaInit.c | 35 +++++++++--------- hw/xnest/Pixmap.c | 34 ++++------------- hw/xnest/XNPixmap.h | 3 +- hw/xwin/win.h | 5 +-- hw/xwin/winpixmap.c | 51 +++++++------------------- include/pixmap.h | 7 +++- include/scrnintstr.h | 8 +--- mi/miarc.c | 5 +-- mi/mibitblt.c | 8 ++--- mi/midispcur.c | 12 +++--- mi/miglblt.c | 4 +-- mi/miscrinit.c | 2 +- miext/rootless/rootlessScreen.c | 2 +- miext/shadow/shadow.c | 2 +- render/glyph.c | 4 +-- render/mirect.c | 3 +- render/mitrap.c | 3 +- render/render.c | 7 +--- 44 files changed, 210 insertions(+), 344 deletions(-) diff --git a/Xext/shm.c b/Xext/shm.c index 6de98e8..302e4e8 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -556,8 +556,7 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC, if (!putGC) return; - pPixmap = (*dst->pScreen->CreatePixmap)(dst->pScreen, sw, sh, depth, - CREATE_PIXMAP_USAGE_SCRATCH); + pPixmap = CreatePixmap(dst->pScreen, sw, sh, depth, CREATE_PIXMAP_USAGE_SCRATCH); if (!pPixmap) { FreeScratchGC(putGC); return; @@ -1067,7 +1066,7 @@ fbShmCreatePixmap (ScreenPtr pScreen, { PixmapPtr pPixmap; - pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, pScreen->rootDepth, 0); + pPixmap = CreatePixmap(pScreen, 0, 0, pScreen->rootDepth, 0); if (!pPixmap) return NullPixmap; diff --git a/composite/compalloc.c b/composite/compalloc.c index 78f43e3..4ce9173 100644 --- a/composite/compalloc.c +++ b/composite/compalloc.c @@ -479,8 +479,8 @@ compNewPixmap (WindowPtr pWin, int x, int y, int w, int h) WindowPtr pParent = pWin->parent; PixmapPtr pPixmap; - pPixmap = (*pScreen->CreatePixmap) (pScreen, w, h, pWin->drawable.depth, - CREATE_PIXMAP_USAGE_BACKING_PIXMAP); + pPixmap = CreatePixmap(pScreen, w, h, pWin->drawable.depth, + CREATE_PIXMAP_USAGE_BACKING_PIXMAP); if (!pPixmap) return 0; diff --git a/dbe/midbe.c b/dbe/midbe.c index 5cbf376..8bd555e 100644 --- a/dbe/midbe.c +++ b/dbe/midbe.c @@ -171,18 +171,18 @@ miDbeAllocBackBufferName(WindowPtr pWin, XID bufId, int swapAction) /* Get a front pixmap. */ if (!(pDbeWindowPrivPriv->pFrontBuffer = - (*pScreen->CreatePixmap)(pScreen, pDbeWindowPriv->width, - pDbeWindowPriv->height, - pWin->drawable.depth, 0))) + CreatePixmap(pScreen, pDbeWindowPriv->width, + pDbeWindowPriv->height, + pWin->drawable.depth, 0))) { return BadAlloc; } /* Get a back pixmap. */ if (!(pDbeWindowPrivPriv->pBackBuffer = - (*pScreen->CreatePixmap)(pScreen, pDbeWindowPriv->width, - pDbeWindowPriv->height, - pWin->drawable.depth, 0))) + CreatePixmap(pScreen, pDbeWindowPriv->width, + pDbeWindowPriv->height, + pWin->drawable.depth, 0))) { FreePixmap(pDbeWindowPrivPriv->pFrontBuffer); return BadAlloc; @@ -635,11 +635,9 @@ miDbePositionWindow(WindowPtr pWin, int x, int y) } /* Create DBE buffer pixmaps equal to size of resized window. */ - pFrontBuffer = (*pScreen->CreatePixmap)(pScreen, width, height, - pWin->drawable.depth, 0); + pFrontBuffer = CreatePixmap(pScreen, width, height, pWin->drawable.depth, 0); - pBackBuffer = (*pScreen->CreatePixmap)(pScreen, width, height, - pWin->drawable.depth, 0); + pBackBuffer = CreatePixmap(pScreen, width, height, pWin->drawable.depth, 0); if (!pFrontBuffer || !pBackBuffer) { diff --git a/dix/dispatch.c b/dix/dispatch.c index 079ce83..fadd91e 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -1412,12 +1412,9 @@ ProcCreatePixmap(ClientPtr client) return BadValue; } CreatePmap: - pMap = (PixmapPtr)(*pDraw->pScreen->CreatePixmap) - (pDraw->pScreen, stuff->width, - stuff->height, stuff->depth, 0); + pMap = CreatePixmap(pDraw->pScreen, stuff->width, stuff->height, stuff->depth, 0); if (pMap) { - pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER; pMap->drawable.id = stuff->pid; /* security creation/labeling check */ rc = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->pid, RT_PIXMAP, @@ -3867,7 +3864,6 @@ AddScreen( return -1; } pScreen->myNum = i; - pScreen->totalPixmapSize = 0; /* computed in CreateScratchPixmapForScreen */ pScreen->ClipNotify = 0; /* for R4 ddx compatibility */ pScreen->CreateScreenResources = 0; diff --git a/dix/gc.c b/dix/gc.c index 9a39f57..75a4aa4 100644 --- a/dix/gc.c +++ b/dix/gc.c @@ -575,9 +575,7 @@ CreateDefaultTile (GCPtr pGC) w = 1; h = 1; (*pGC->pScreen->QueryBestSize)(TileShape, &w, &h, pGC->pScreen); - pTile = (PixmapPtr) - (*pGC->pScreen->CreatePixmap)(pGC->pScreen, - w, h, pGC->depth, 0); + pTile = CreatePixmap(pGC->pScreen, w, h, pGC->depth, 0); pgcScratch = GetScratchGC(pGC->depth, pGC->pScreen); if (!pTile || !pgcScratch) { @@ -915,8 +913,7 @@ CreateDefaultStipple(int screenNum) w = 16; h = 16; (* pScreen->QueryBestSize)(StippleShape, &w, &h, pScreen); - if (!(pScreen->PixmapPerDepth[0] = - (*pScreen->CreatePixmap)(pScreen, w, h, 1, 0))) + if (!(pScreen->PixmapPerDepth[0] = CreatePixmap(pScreen, w, h, 1, 0))) return FALSE; /* fill stipple with 1 */ tmpval[0].val = GXcopy; diff --git a/dix/glyphcurs.c b/dix/glyphcurs.c index 1d7de27..27c4986 100644 --- a/dix/glyphcurs.c +++ b/dix/glyphcurs.c @@ -95,9 +95,7 @@ ServerBitsFromGlyph(FontPtr pfont, unsigned ch, CursorMetricPtr cm, unsigned cha if (!pbits) return BadAlloc; - ppix = (PixmapPtr)(*pScreen->CreatePixmap)(pScreen, cm->width, - cm->height, 1, - CREATE_PIXMAP_USAGE_SCRATCH); + ppix = CreatePixmap(pScreen, cm->width, cm->height, 1, CREATE_PIXMAP_USAGE_SCRATCH); pGC = GetScratchGC(1, pScreen); if (!ppix || !pGC) { diff --git a/dix/pixmap.c b/dix/pixmap.c index a0f7a39..232188c 100644 --- a/dix/pixmap.c +++ b/dix/pixmap.c @@ -59,7 +59,7 @@ GetScratchPixmapHeader(ScreenPtr pScreen, int width, int height, int depth, pScreen->pScratchPixmap = NULL; else /* width and height of 0 means don't allocate any pixmap data */ - pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, depth, 0); + pPixmap = CreatePixmap(pScreen, 0, 0, depth, 0); if (pPixmap) { if ((*pScreen->ModifyPixmapHeader)(pPixmap, width, height, depth, @@ -91,11 +91,6 @@ FreeScratchPixmapHeader(PixmapPtr pPixmap) Bool CreateScratchPixmapsForScreen(int scrnum) { - unsigned int pixmap_size; - - pixmap_size = sizeof(PixmapRec) + dixPrivatesSize(PRIVATE_PIXMAP); - screenInfo.screens[scrnum]->totalPixmapSize = BitmapBytePad(pixmap_size * 8); - /* let it be created on first use */ screenInfo.screens[scrnum]->pScratchPixmap = NULL; return TRUE; @@ -111,21 +106,34 @@ FreeScratchPixmapsForScreen(int scrnum) /* callable by ddx */ PixmapPtr -AllocatePixmap(ScreenPtr pScreen, int pixDataSize) +CreatePixmap(ScreenPtr pScreen, int width, int height, int depth, unsigned usage_hint) { - PixmapPtr pPixmap; - - assert(pScreen->totalPixmapSize > 0); - - if (pScreen->totalPixmapSize > ((size_t)-1) - pixDataSize) - return NullPixmap; - - pPixmap = malloc(pScreen->totalPixmapSize + pixDataSize); + PixmapPtr pPixmap = dixAllocateObjectWithPrivates(PixmapRec, PRIVATE_PIXMAP); if (!pPixmap) - return NullPixmap; + return NullPixmap; + pPixmap->drawable.type = DRAWABLE_PIXMAP; + pPixmap->drawable.class = 0; + pPixmap->drawable.pScreen = pScreen; + pPixmap->drawable.depth = depth; + pPixmap->drawable.id = 0; + pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; + pPixmap->drawable.x = 0; + pPixmap->drawable.y = 0; + pPixmap->drawable.width = width; + pPixmap->drawable.height = height; + pPixmap->refcnt = 1; + pPixmap->usage_hint = usage_hint; + +#ifdef COMPOSITE + pPixmap->screen_x = 0; + pPixmap->screen_y = 0; +#endif + + if ((*pScreen->CreatePixmap) (pPixmap)) + return pPixmap; - dixInitPrivates(pPixmap, pPixmap + 1, PRIVATE_PIXMAP); - return pPixmap; + dixFreeObjectWithPrivates(pPixmap, PRIVATE_PIXMAP); + return NullPixmap; } /* callable by ddx */ @@ -135,6 +143,5 @@ FreePixmap(PixmapPtr pPixmap) if(--pPixmap->refcnt) return; (*pPixmap->drawable.pScreen->DestroyPixmap) (pPixmap); - dixFiniPrivates(pPixmap, PRIVATE_PIXMAP); - free(pPixmap); + dixFreeObjectWithPrivates(pPixmap, PRIVATE_PIXMAP); } diff --git a/dix/window.c b/dix/window.c index c8607f1..3687c88 100644 --- a/dix/window.c +++ b/dix/window.c @@ -308,8 +308,7 @@ MakeRootTile(WindowPtr pWin) unsigned char *from, *to; int i, j; - pWin->background.pixmap = (*pScreen->CreatePixmap)(pScreen, 4, 4, - pScreen->rootDepth, 0); + pWin->background.pixmap = CreatePixmap(pScreen, 4, 4, pScreen->rootDepth, 0); pWin->backgroundState = BackgroundPixmap; pGC = GetScratchGC(pScreen->rootDepth, pScreen); diff --git a/doc/xml/Xserver-spec.xml b/doc/xml/Xserver-spec.xml index b3940f4..38dffb9 100644 --- a/doc/xml/Xserver-spec.xml +++ b/doc/xml/Xserver-spec.xml @@ -326,13 +326,6 @@ These procedures are set either directly or indirectly by DDX procedures. Most of the procedures described in the remainder of this document are accessed through one of these structs. -For example, the procedure to create a pixmap -is attached to a ScreenRec and might be called by using the expression -</para> -<para> -<blockquote> -<programlisting>(* pScreen->CreatePixmap)(pScreen, width, height, depth).</programlisting> -</blockquote> </para> <para> All procedure pointers must be set to some routine unless noted otherwise; @@ -3169,20 +3162,16 @@ A bitmap is a pixmap that is one bit deep.</para> <para> <blockquote><programlisting> - PixmapPtr pScreen->CreatePixmap(pScreen, width, height, depth) - ScreenPtr pScreen; - int width, height, depth; - -</programlisting></blockquote> -This ScreenRec procedure must create a pixmap of the size -requested. -It must allocate a PixmapRec and fill in all of the fields. -The reference count field must be set to 1. -If width or height are zero, no space should be allocated -for the pixmap data, and if the implementation is using the -devPrivate field as a pointer to the pixmap data, it should be -set to NULL. -If successful, it returns a pointer to the new pixmap; if not, it returns NULL. + Bool pScreen->CreatePixmap(pPixmap) + PixmapPtr pPixmap; + +</programlisting></blockquote> +This ScreenRec procedure must initialize a pixmap. +It must initialize the bitsPerPixel field based on the depth field. +If either width or height is zero, no space should be allocated for the pixmap +data; in this case, if the implementation is using the devPrivate field as a +pointer to the pixmap data, it should leave that pointer NULL. +If successful, it returns TRUE; if not, it returns FALSE. See Xserver/fb/fbpixmap.c for the sample server implementation.</para> <para> <blockquote><programlisting> diff --git a/exa/exa_classic.c b/exa/exa_classic.c index 028b617..9a09d18 100644 --- a/exa/exa_classic.c +++ b/exa/exa_classic.c @@ -52,25 +52,27 @@ ExaGetPixmapAddress(PixmapPtr p) * ModifyPixmapHeader() would break migration. These types of pixmaps are used * for scratch pixmaps, or to represent the visible screen. */ -PixmapPtr -exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, - unsigned usage_hint) +Bool +exaCreatePixmap_classic(PixmapPtr pPixmap) { - PixmapPtr pPixmap; ExaPixmapPrivPtr pExaPixmap; BoxRec box; int bpp; + int w = pPixmap->drawable.width; + int h = pPixmap->drawable.height; + ScreenPtr pScreen = pPixmap->drawable.pScreen; + Bool ret; ExaScreenPriv(pScreen); if (w > 32767 || h > 32767) - return NullPixmap; + return FALSE; swap(pExaScr, pScreen, CreatePixmap); - pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, usage_hint); + ret = pScreen->CreatePixmap (pPixmap); swap(pExaScr, pScreen, CreatePixmap); - if (!pPixmap) - return NULL; + if (!ret) + return FALSE; pExaPixmap = ExaGetPixmapPriv(pPixmap); pExaPixmap->driverPriv = NULL; @@ -100,7 +102,7 @@ exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, swap(pExaScr, pScreen, DestroyPixmap); FreePixmap(pPixmap); swap(pExaScr, pScreen, DestroyPixmap); - return NULL; + return FALSE; } /* Set up damage tracking */ @@ -112,7 +114,7 @@ exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, swap(pExaScr, pScreen, DestroyPixmap); FreePixmap(pPixmap); swap(pExaScr, pScreen, DestroyPixmap); - return NULL; + return FALSE; } DamageRegister (&pPixmap->drawable, pExaPixmap->pDamage); @@ -141,7 +143,7 @@ exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, if (pExaScr->fallback_counter) exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST); - return pPixmap; + return TRUE; } Bool diff --git a/exa/exa_driver.c b/exa/exa_driver.c index 92b9a53..2983a87 100644 --- a/exa/exa_driver.c +++ b/exa/exa_driver.c @@ -46,25 +46,27 @@ ExaGetPixmapAddress(PixmapPtr p) * * Pixmaps are always marked as pinned, because exa has no control over them. */ -PixmapPtr -exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, - unsigned usage_hint) +Bool +exaCreatePixmap_driver(PixmapPtr pPixmap) { - PixmapPtr pPixmap; ExaPixmapPrivPtr pExaPixmap; int bpp; + int w = pPixmap->drawable.width; + int h = pPixmap->drawable.height; + ScreenPtr pScreen = pPixmap->drawable.pScreen; + Bool ret; size_t paddedWidth, datasize; ExaScreenPriv(pScreen); if (w > 32767 || h > 32767) - return NullPixmap; + return FALSE; swap(pExaScr, pScreen, CreatePixmap); - pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, usage_hint); + ret = pScreen->CreatePixmap(pPixmap); swap(pExaScr, pScreen, CreatePixmap); - if (!pPixmap) - return NULL; + if (!ret) + return FALSE; pExaPixmap = ExaGetPixmapPriv(pPixmap); pExaPixmap->driverPriv = NULL; @@ -78,13 +80,13 @@ 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, usage_hint, bpp, &new_pitch); + pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, pPixmap->drawable.depth, pPixmap->usage_hint, bpp, &new_pitch); paddedWidth = pExaPixmap->fb_pitch = new_pitch; } else { paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits); if (paddedWidth / 4 > 32767 || h > 32767) - return NullPixmap; + return FALSE; exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp); @@ -98,7 +100,7 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, swap(pExaScr, pScreen, DestroyPixmap); FreePixmap(pPixmap); swap(pExaScr, pScreen, DestroyPixmap); - return NULL; + return FALSE; } /* Allow ModifyPixmapHeader to set sys_ptr appropriately. */ @@ -119,7 +121,7 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, if (pExaScr->fallback_counter) exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST); - return pPixmap; + return TRUE; } Bool diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index a4d3dcc..c0917ea 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -183,9 +183,7 @@ exaRealizeGlyphCaches(ScreenPtr pScreen, } /* Now allocate the pixmap and picture */ - pPixmap = (*pScreen->CreatePixmap) (pScreen, - CACHE_PICTURE_WIDTH, - height, depth, 0); + pPixmap = CreatePixmap(pScreen, CACHE_PICTURE_WIDTH, height, depth, 0); if (!pPixmap) return FALSE; @@ -734,9 +732,7 @@ exaGlyphs (CARD8 op, maskFormat = a8Format; } - pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, - maskFormat->depth, - CREATE_PIXMAP_USAGE_SCRATCH); + pMaskPixmap = CreatePixmap(pScreen, width, height, maskFormat->depth, CREATE_PIXMAP_USAGE_SCRATCH); if (!pMaskPixmap) return; component_alpha = NeedsComponent(maskFormat->format); @@ -763,9 +759,7 @@ exaGlyphs (CARD8 op, if (argbFormat) maskFormat = argbFormat; - pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, - maskFormat->depth, - CREATE_PIXMAP_USAGE_SCRATCH); + pMaskPixmap = CreatePixmap(pScreen, width, height, maskFormat->depth, CREATE_PIXMAP_USAGE_SCRATCH); if (!pMaskPixmap) return; diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c index 874fe3f..0f122cc 100644 --- a/exa/exa_mixed.c +++ b/exa/exa_mixed.c @@ -45,25 +45,27 @@ ExaGetPixmapAddress(PixmapPtr p) /** * exaCreatePixmap() creates a new pixmap. */ -PixmapPtr -exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, - unsigned usage_hint) +Bool +exaCreatePixmap_mixed(PixmapPtr pPixmap) { - PixmapPtr pPixmap; ExaPixmapPrivPtr pExaPixmap; int bpp; + int w = pPixmap->drawable.width; + int h = pPixmap->drawable.height; + ScreenPtr pScreen = pPixmap->drawable.pScreen; + Bool ret; size_t paddedWidth; ExaScreenPriv(pScreen); if (w > 32767 || h > 32767) - return NullPixmap; + return FALSE; swap(pExaScr, pScreen, CreatePixmap); - pPixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, usage_hint); + ret = pScreen->CreatePixmap(pPixmap); swap(pExaScr, pScreen, CreatePixmap); - if (!pPixmap) - return NULL; + if (!ret) + return FALSE; pExaPixmap = ExaGetPixmapPriv(pPixmap); pExaPixmap->driverPriv = NULL; @@ -72,7 +74,7 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits); if (paddedWidth / 4 > 32767 || h > 32767) - return NullPixmap; + return FALSE; /* We will allocate the system pixmap later if needed. */ pPixmap->devPrivate.ptr = NULL; @@ -117,7 +119,7 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, if (pExaScr->fallback_counter) exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST); - return pPixmap; + return TRUE; } Bool diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index a65eca1..52763bb 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -493,7 +493,7 @@ ExaOffscreenDefragment (ScreenPtr pScreen) PixmapPtr pDstPix; ExaPixmapPrivPtr pExaDstPix; - pDstPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, 0, 0); + pDstPix = CreatePixmap(pScreen, 0, 0, 0, 0); if (!pDstPix) return NULL; diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 1f372b9..e6b73e2 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -586,9 +586,8 @@ exaPixmapIsPinned (PixmapPtr pPix); extern const GCFuncs exaGCFuncs; /* exa_classic.c */ -PixmapPtr -exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth, - unsigned usage_hint); +Bool +exaCreatePixmap_classic(PixmapPtr pPixmap); Bool exaModifyPixmapHeader_classic(PixmapPtr pPixmap, int width, int height, int depth, @@ -601,9 +600,8 @@ Bool exaPixmapHasGpuCopy_classic(PixmapPtr pPixmap); /* exa_driver.c */ -PixmapPtr -exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth, - unsigned usage_hint); +Bool +exaCreatePixmap_driver(PixmapPtr pPixmap); Bool exaModifyPixmapHeader_driver(PixmapPtr pPixmap, int width, int height, int depth, @@ -616,9 +614,8 @@ Bool exaPixmapHasGpuCopy_driver(PixmapPtr pPixmap); /* exa_mixed.c */ -PixmapPtr -exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, - unsigned usage_hint); +Bool +exaCreatePixmap_mixed(PixmapPtr pPixmap); Bool exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth, diff --git a/exa/exa_render.c b/exa/exa_render.c index 6251362..4964901 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -1105,8 +1105,7 @@ exaCreateAlphaPicture (ScreenPtr pScreen, return 0; } - pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, - pPictFormat->depth, 0); + pPixmap = CreatePixmap(pScreen, width, height, pPictFormat->depth, 0); if (!pPixmap) return 0; pGC = GetScratchGC (pPixmap->drawable.depth, pScreen); diff --git a/fb/fb.h b/fb/fb.h index bba998b..fa46ffb 100644 --- a/fb/fb.h +++ b/fb/fb.h @@ -1623,13 +1623,11 @@ fbPictureInit (ScreenPtr pScreen, * fbpixmap.c */ -extern _X_EXPORT PixmapPtr -fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, - unsigned usage_hint); +extern _X_EXPORT Bool +fbCreatePixmapBpp (PixmapPtr pPixmap, int bpp); -extern _X_EXPORT PixmapPtr -fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, - unsigned usage_hint); +extern _X_EXPORT Bool +fbCreatePixmap (PixmapPtr pPixmap); extern _X_EXPORT void fbDestroyPixmap (PixmapPtr pPixmap); diff --git a/fb/fb24_32.c b/fb/fb24_32.c index 2e600ed..4b5ad5b 100644 --- a/fb/fb24_32.c +++ b/fb/fb24_32.c @@ -543,7 +543,7 @@ fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel) int oldXoff, oldYoff; int newXoff, newYoff; - pNewTile = pScreen->CreatePixmap(pScreen, pOldTile->drawable.width, + pNewTile = CreatePixmap(pScreen, pOldTile->drawable.width, pOldTile->drawable.height, pOldTile->drawable.depth, pOldTile->usage_hint); diff --git a/fb/fboverlay.c b/fb/fboverlay.c index 309a2d2..83a9bb8 100644 --- a/fb/fboverlay.c +++ b/fb/fboverlay.c @@ -136,7 +136,7 @@ fbOverlayCreateScreenResources(ScreenPtr pScreen) pbits = pScrPriv->layer[i].u.init.pbits; width = pScrPriv->layer[i].u.init.width; depth = pScrPriv->layer[i].u.init.depth; - pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, depth, 0); + pPixmap = CreatePixmap(pScreen, 0, 0, depth, 0); if (!pPixmap) return FALSE; if (!(*pScreen->ModifyPixmapHeader)(pPixmap, pScreen->width, diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c index 0a3b76a..7f9d028 100644 --- a/fb/fbpixmap.c +++ b/fb/fbpixmap.c @@ -28,72 +28,42 @@ #include "fb.h" -PixmapPtr -fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, - unsigned usage_hint) +Bool +fbCreatePixmapBpp (PixmapPtr pPixmap, int bpp) { - PixmapPtr pPixmap; size_t datasize; size_t paddedWidth; - int adjust; - int base; - paddedWidth = ((width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (FbBits); - if (paddedWidth / 4 > 32767 || height > 32767) - return NullPixmap; - datasize = height * paddedWidth; - base = pScreen->totalPixmapSize; - adjust = 0; - if (base & 7) - adjust = 8 - (base & 7); - datasize += adjust; + paddedWidth = ((pPixmap->drawable.width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (FbBits); + if (paddedWidth / 4 > 32767 || pPixmap->drawable.height > 32767) + return FALSE; + datasize = pPixmap->drawable.height * paddedWidth; #ifdef FB_DEBUG datasize += 2 * paddedWidth; #endif - pPixmap = AllocatePixmap(pScreen, datasize); - if (!pPixmap) - return NullPixmap; - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.depth = depth; pPixmap->drawable.bitsPerPixel = bpp; - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; pPixmap->devKind = paddedWidth; - pPixmap->refcnt = 1; - pPixmap->devPrivate.ptr = (pointer) ((char *)pPixmap + base + adjust); + pPixmap->devPrivate.ptr = malloc(datasize); + if (!pPixmap->devPrivate.ptr) + return FALSE; #ifdef FB_DEBUG pPixmap->devPrivate.ptr = (void *) ((char *) pPixmap->devPrivate.ptr + paddedWidth); fbInitializeDrawable (&pPixmap->drawable); #endif -#ifdef COMPOSITE - pPixmap->screen_x = 0; - pPixmap->screen_y = 0; -#endif - - pPixmap->usage_hint = usage_hint; - - return pPixmap; + return TRUE; } -PixmapPtr -fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, - unsigned usage_hint) +Bool +fbCreatePixmap (PixmapPtr pPixmap) { - int bpp; - bpp = BitsPerPixel (depth); + int bpp = BitsPerPixel (pPixmap->drawable.depth); #ifdef FB_SCREEN_PRIVATE - if (bpp == 32 && depth <= 24) - bpp = fbGetScreenPrivate(pScreen)->pix32bpp; + if (bpp == 32 && pPixmap->drawable.depth <= 24) + bpp = fbGetScreenPrivate(pPixmap->drawable.pScreen)->pix32bpp; #endif - return fbCreatePixmapBpp (pScreen, width, height, depth, bpp, usage_hint); + return fbCreatePixmapBpp (pPixmap, bpp); } void diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 8d13c15..a844e57 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -1314,8 +1314,7 @@ DoCreatePbuffer(ClientPtr client, int screenNum, XID fbconfigId, return err; __glXenterServer(GL_FALSE); - pPixmap = (*pGlxScreen->pScreen->CreatePixmap) (pGlxScreen->pScreen, - width, height, config->rgbBits, 0); + pPixmap = CreatePixmap(pGlxScreen->pScreen, width, height, config->rgbBits, 0); __glXleaveServer(GL_FALSE); /* Assign the pixmap the same id as the pbuffer and add it as a diff --git a/hw/dmx/dmxpixmap.c b/hw/dmx/dmxpixmap.c index 19f3ac7..b585365 100644 --- a/hw/dmx/dmxpixmap.c +++ b/hw/dmx/dmxpixmap.c @@ -79,13 +79,10 @@ 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 usage_hint) +Bool dmxCreatePixmap(PixmapPtr pPixmap) { + ScreenPtr pScreen = pPixmap->drawable.pScreen; DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum]; - PixmapPtr pPixmap; int bpp; dmxPixPrivPtr pPixPriv; @@ -96,27 +93,11 @@ PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, #endif /* Create pixmap on back-end server */ - if (depth == 24) bpp = 32; - else bpp = depth; - - pPixmap = AllocatePixmap(pScreen, 0); - if (!pPixmap) - return NullPixmap; + bpp = pPixmap->drawable.depth; + if (bpp == 24) bpp = 32; - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.depth = depth; pPixmap->drawable.bitsPerPixel = bpp; - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; - pPixmap->devKind = PixmapBytePad(width, bpp); - pPixmap->refcnt = 1; - pPixmap->usage_hint = usage_hint; + pPixmap->devKind = PixmapBytePad(pPixmap->drawable.width, bpp); pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap); pPixPriv->pixmap = (Pixmap)0; @@ -131,7 +112,7 @@ PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, DMX_WRAP(CreatePixmap, dmxCreatePixmap, dmxScreen, pScreen); #endif - return pPixmap; + return TRUE; } /** Destroy the pixmap on the back-end server. */ diff --git a/hw/dmx/dmxpixmap.h b/hw/dmx/dmxpixmap.h index 0bb19c3..b1e883f 100644 --- a/hw/dmx/dmxpixmap.h +++ b/hw/dmx/dmxpixmap.h @@ -48,9 +48,7 @@ typedef struct _dmxPixPriv { extern Bool dmxInitPixmap(ScreenPtr pScreen); -extern PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, - int width, int height, int depth, - unsigned usage_hint); +extern Bool dmxCreatePixmap(PixmapPtr pPixmap); extern void dmxDestroyPixmap(PixmapPtr pPixmap); extern RegionPtr dmxBitmapToRegion(PixmapPtr pPixmap); diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c index bc80366..306cd5e 100644 --- a/hw/xfree86/common/xf86DGA.c +++ b/hw/xfree86/common/xf86DGA.c @@ -430,7 +430,7 @@ xf86SetDGAMode( } if(pMode->flags & DGA_PIXMAP_AVAILABLE) { - if((pPix = (*pScreen->CreatePixmap)(pScreen, 0, 0, pMode->depth, 0))) { + if((pPix = CreatePixmap(pScreen, 0, 0, pMode->depth, 0))) { (*pScreen->ModifyPixmapHeader)(pPix, pMode->pixmapWidth, pMode->pixmapHeight, pMode->depth, pMode->bitsPerPixel, diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c index 5e1d5ab..dfaab95 100644 --- a/hw/xfree86/common/xf86VGAarbiter.c +++ b/hw/xfree86/common/xf86VGAarbiter.c @@ -366,18 +366,19 @@ VGAarbiterClearToBackground ( SCREEN_EPILOG (ClearToBackground, VGAarbiterClearToBackground); } -static PixmapPtr -VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) +static Bool +VGAarbiterCreatePixmap(PixmapPtr pPixmap) { - PixmapPtr pPix; + ScreenPtr pScreen = pPixmap->drawable.pScreen; + Bool ret; SCREEN_PROLOG ( CreatePixmap); VGAGet(pScreen); - pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint); + ret = (*pScreen->CreatePixmap) (pPixmap); VGAPut(); SCREEN_EPILOG (CreatePixmap, VGAarbiterCreatePixmap); - return pPix; + return ret; } static Bool diff --git a/hw/xfree86/common/xf86VGAarbiterPriv.h b/hw/xfree86/common/xf86VGAarbiterPriv.h index bba5d03..2657226 100644 --- a/hw/xfree86/common/xf86VGAarbiterPriv.h +++ b/hw/xfree86/common/xf86VGAarbiterPriv.h @@ -154,8 +154,7 @@ static void VGAarbiterCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); 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 usage_hint); +static Bool VGAarbiterCreatePixmap(PixmapPtr pPixmap); 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 e889468..5770a81 100644 --- a/hw/xfree86/xaa/xaaInit.c +++ b/hw/xfree86/xaa/xaaInit.c @@ -33,8 +33,7 @@ static void XAAGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h, char *pdstLine); 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 usage_hint); +static Bool XAACreatePixmap(PixmapPtr pPixmap); static void XAADestroyPixmap(PixmapPtr pPixmap); static Bool XAAEnterVT (int index, int flags); static void XAALeaveVT (int index, int flags); @@ -299,8 +298,7 @@ XAAPixmapBPP (ScreenPtr pScreen, int depth) DestroyPixmapProcPtr destroyPixmap; XAA_SCREEN_PROLOGUE (pScreen, CreatePixmap); - pPix = (*pScreen->CreatePixmap) (pScreen, 1, 1, depth, - CREATE_PIXMAP_USAGE_SCRATCH); + pPix = CreatePixmap(pScreen, 1, 1, depth, CREATE_PIXMAP_USAGE_SCRATCH); XAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, XAACreatePixmap); if (!pPix) return 0; @@ -330,24 +328,27 @@ XAAInitializeOffscreenDepths (ScreenPtr pScreen) } } -static PixmapPtr -XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) +static Bool +XAACreatePixmap(PixmapPtr pPix) { + ScreenPtr pScreen = pPix->drawable.pScreen; XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen); ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; XAAPixmapPtr pPriv; - PixmapPtr pPix = NULL; + Bool ret; + int w = pPix->drawable.width; + int h = pPix->drawable.height; int size = w * h; if (w > 32767 || h > 32767) - return NullPixmap; + return FALSE; if (!infoRec->offscreenDepthsInitialized) XAAInitializeOffscreenDepths (pScreen); if(pScrn->vtSema && - (usage_hint != CREATE_PIXMAP_USAGE_GLYPH_PICTURE) && - (infoRec->offscreenDepths & (1 << (depth - 1))) && + (pPix->usage_hint != CREATE_PIXMAP_USAGE_GLYPH_PICTURE) && + (infoRec->offscreenDepths & (1 << (pPix->drawable.depth - 1))) && (size >= MIN_OFFPIX_SIZE) && !SwitchedOut && (!infoRec->maxOffPixWidth || (w <= infoRec->maxOffPixWidth)) && (!infoRec->maxOffPixHeight || (h <= infoRec->maxOffPixHeight)) ) @@ -379,10 +380,10 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) } XAA_SCREEN_PROLOGUE (pScreen, CreatePixmap); - pPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, depth, usage_hint); + ret = (*pScreen->CreatePixmap) (pPix); XAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, XAACreatePixmap); - if (!pPix) { + if (!ret) { free(pLink); xf86FreeOffscreenArea(area); goto BAILOUT; @@ -393,8 +394,6 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) pPriv = XAA_GET_PIXMAP_PRIVATE(pPix); pPix->drawable.x = area->box.x1; pPix->drawable.y = area->box.y1; - pPix->drawable.width = w; - pPix->drawable.height = h; pPix->drawable.bitsPerPixel = pScrn->bitsPerPixel; pPix->devKind = pScreenPix->devKind; pPix->devPrivate.ptr = pScreenPix->devPrivate.ptr; @@ -407,14 +406,14 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) pLink->next = infoRec->OffscreenPixmaps; pLink->pPix = pPix; infoRec->OffscreenPixmaps = pLink; - return pPix; + return TRUE; } BAILOUT: XAA_SCREEN_PROLOGUE (pScreen, CreatePixmap); - pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint); + ret = (*pScreen->CreatePixmap) (pPix); XAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, XAACreatePixmap); - if(pPix) { + if(ret) { pPriv = XAA_GET_PIXMAP_PRIVATE(pPix); pPriv->flags = 0; pPriv->offscreenArea = NULL; @@ -423,7 +422,7 @@ BAILOUT: pPriv->flags |= SHARED_PIXMAP; } - return pPix; + return ret; } static void diff --git a/hw/xnest/Pixmap.c b/hw/xnest/Pixmap.c index b99e97d..7c02400 100644 --- a/hw/xnest/Pixmap.c +++ b/hw/xnest/Pixmap.c @@ -35,38 +35,20 @@ is" without express or implied warranty. DevPrivateKeyRec xnestPixmapPrivateKeyRec; -PixmapPtr -xnestCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, - unsigned usage_hint) +Bool +xnestCreatePixmap(PixmapPtr pPixmap) { - PixmapPtr pPixmap; - - pPixmap = AllocatePixmap(pScreen, 0); - if (!pPixmap) - return NullPixmap; - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.depth = depth; - pPixmap->drawable.bitsPerPixel = depth; - pPixmap->drawable.id = 0; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->refcnt = 1; - pPixmap->devKind = PixmapBytePad(width, depth); - pPixmap->usage_hint = usage_hint; - if (width && height) + pPixmap->drawable.bitsPerPixel = pPixmap->drawable.depth; + pPixmap->devKind = PixmapBytePad(pPixmap->drawable.width, pPixmap->drawable.depth); + if (pPixmap->drawable.width && pPixmap->drawable.height) xnestPixmapPriv(pPixmap)->pixmap = XCreatePixmap(xnestDisplay, - xnestDefaultWindows[pScreen->myNum], - width, height, depth); + xnestDefaultWindows[pPixmap->drawable.pScreen->myNum], + pPixmap->drawable.width, pPixmap->drawable.height, pPixmap->drawable.depth); else xnestPixmapPriv(pPixmap)->pixmap = 0; - return pPixmap; + return TRUE; } void diff --git a/hw/xnest/XNPixmap.h b/hw/xnest/XNPixmap.h index 5816cef..189ce28 100644 --- a/hw/xnest/XNPixmap.h +++ b/hw/xnest/XNPixmap.h @@ -29,8 +29,7 @@ typedef struct { #define xnestSharePixmap(pPixmap) ((pPixmap)->refcnt++) -PixmapPtr xnestCreatePixmap(ScreenPtr pScreen, int width, int height, - int depth, unsigned usage_hint); +Bool xnestCreatePixmap(PixmapPtr pPixmap); void xnestDestroyPixmap(PixmapPtr pPixmap); RegionPtr xnestPixmapToRegion(PixmapPtr pPixmap); diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 1b1358c..e95a186 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -1048,9 +1048,8 @@ winSetEngineFunctionsPrimaryDD (ScreenPtr pScreen); * winpixmap.c */ -PixmapPtr -winCreatePixmapNativeGDI (ScreenPtr pScreen, int width, int height, int depth, - unsigned usage_hint); +Bool +winCreatePixmapNativeGDI (PixmapPtr pPixmap); Bool winDestroyPixmapNativeGDI (PixmapPtr pPixmap); diff --git a/hw/xwin/winpixmap.c b/hw/xwin/winpixmap.c index 050c71a..c3ee309 100644 --- a/hw/xwin/winpixmap.c +++ b/hw/xwin/winpixmap.c @@ -54,73 +54,48 @@ winCopyRotatePixmapNativeGDI (PixmapPtr psrcPix, PixmapPtr *ppdstPix, /* See Porting Layer Definition - p. 34 */ /* See mfb/mfbpixmap.c - mfbCreatePixmap() */ -PixmapPtr -winCreatePixmapNativeGDI (ScreenPtr pScreen, - int iWidth, int iHeight, - int iDepth, unsigned usage_hint) +Bool +winCreatePixmapNativeGDI (PixmapPtr pPixmap) { winPrivPixmapPtr pPixmapPriv = NULL; - PixmapPtr pPixmap = NULL; - - /* Allocate pixmap memory */ - pPixmap = AllocatePixmap (pScreen, 0); - if (!pPixmap) - { - ErrorF ("winCreatePixmapNativeGDI () - Couldn't allocate a pixmap\n"); - return NullPixmap; - } #if CYGDEBUG winDebug ("winCreatePixmap () - w %d h %d d %d uh %d bw %d\n", - iWidth, iHeight, iDepth, usage_hint, - PixmapBytePad (iWidth, iDepth)); + pPixmap->drawable.width, pPixmap->drawable.height, pPixmap->drawable.depth, pPixmap->drawable.usage_hint, + PixmapBytePad (pPixmap->drawable.width, pPixmap->drawable.depth)); #endif /* Setup pixmap values */ - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.depth = iDepth; - pPixmap->drawable.bitsPerPixel = BitsPerPixel (iDepth); - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = iWidth; - pPixmap->drawable.height = iHeight; - pPixmap->devKind = 0; - pPixmap->refcnt = 1; - pPixmap->devPrivate.ptr = NULL; - pPixmap->usage_hint = usage_hint; - - /* Pixmap privates are allocated by AllocatePixmap */ + pPixmap->drawable.bitsPerPixel = BitsPerPixel (pPixmap->drawable.depth); + + /* Pixmap privates are already allocated */ pPixmapPriv = winGetPixmapPriv (pPixmap); /* Initialize pixmap privates */ pPixmapPriv->hBitmap = NULL; pPixmapPriv->hdcSelected = NULL; pPixmapPriv->pbBits = NULL; - pPixmapPriv->dwScanlineBytes = PixmapBytePad (iWidth, iDepth); + pPixmapPriv->dwScanlineBytes = PixmapBytePad (pPixmap->drawable.width, pPixmap->drawable.depth); /* Check for zero width or height pixmaps */ - if (iWidth == 0 || iHeight == 0) + if (pPixmap->drawable.width == 0 || pPixmap->drawable.height == 0) { /* Don't allocate a real pixmap, just set fields and return */ - return pPixmap; + return TRUE; } /* Create a DIB for the pixmap */ - pPixmapPriv->hBitmap = winCreateDIBNativeGDI (iWidth, iHeight, iDepth, + pPixmapPriv->hBitmap = winCreateDIBNativeGDI (pPixmap->drawable.width, pPixmap->drawable.height, pPixmap->drawable.depth, &pPixmapPriv->pbBits, (BITMAPINFO **) &pPixmapPriv->pbmih); #if CYGDEBUG winDebug ("winCreatePixmap () - Created a pixmap %08x, %dx%dx%d, for " \ "screen: %08x\n", - pPixmapPriv->hBitmap, iWidth, iHeight, iDepth, pScreen); + pPixmapPriv->hBitmap, pPixmap->drawable.width, pPixmap->drawable.height, pPixmap->drawable.depth, pPixmap->drawable.pScreen); #endif - return pPixmap; + return TRUE; } diff --git a/include/pixmap.h b/include/pixmap.h index 5cf42d1..baa0c28 100644 --- a/include/pixmap.h +++ b/include/pixmap.h @@ -111,9 +111,12 @@ extern _X_EXPORT Bool CreateScratchPixmapsForScreen( extern _X_EXPORT void FreeScratchPixmapsForScreen( int /*scrnum*/); -extern _X_EXPORT PixmapPtr AllocatePixmap( +extern _X_EXPORT PixmapPtr CreatePixmap( ScreenPtr /*pScreen*/, - int /*pixDataSize*/); + int /*width*/, + int /*height*/, + int /*depth*/, + unsigned /*usage_hint*/); extern _X_EXPORT void FreePixmap( PixmapPtr /*pPixmap*/); diff --git a/include/scrnintstr.h b/include/scrnintstr.h index 313ea0e..ef01d10 100644 --- a/include/scrnintstr.h +++ b/include/scrnintstr.h @@ -203,12 +203,8 @@ typedef void (* ClipNotifyProcPtr)( /* pixmap will contain a glyph */ #define CREATE_PIXMAP_USAGE_GLYPH_PICTURE 3 -typedef PixmapPtr (* CreatePixmapProcPtr)( - ScreenPtr /*pScreen*/, - int /*width*/, - int /*height*/, - int /*depth*/, - unsigned /*usage_hint*/); +typedef Bool (* CreatePixmapProcPtr)( + PixmapPtr /*pPixmap*/); typedef void (* DestroyPixmapProcPtr)( PixmapPtr /*pPixmap*/); diff --git a/mi/miarc.c b/mi/miarc.c index c53d429..9bf92bd 100644 --- a/mi/miarc.c +++ b/mi/miarc.c @@ -1050,9 +1050,8 @@ miPolyArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc *parcs) /* allocate a 1 bit deep pixmap of the appropriate size, and * validate it */ - pDrawTo = (DrawablePtr)(*pDraw->pScreen->CreatePixmap) - (pDraw->pScreen, pixmapWidth, pixmapHeight, 1, - CREATE_PIXMAP_USAGE_SCRATCH); + pDrawTo = &CreatePixmap(pDraw->pScreen, pixmapWidth, pixmapHeight, 1, + CREATE_PIXMAP_USAGE_SCRATCH)->drawable; if (!pDrawTo) { FreeScratchGC(pGCTo); diff --git a/mi/mibitblt.c b/mi/mibitblt.c index 0944da1..459aaea 100644 --- a/mi/mibitblt.c +++ b/mi/mibitblt.c @@ -408,8 +408,7 @@ miOpqStipDrawable(DrawablePtr pDraw, GCPtr pGC, RegionPtr prgnSrc, xRectangle rect; RegionPtr prgnSrcClip; - pPixmap = (*pDraw->pScreen->CreatePixmap) - (pDraw->pScreen, w + srcx, h, 1, + pPixmap = CreatePixmap (pDraw->pScreen, w + srcx, h, 1, CREATE_PIXMAP_USAGE_SCRATCH); if (!pPixmap) return; @@ -654,9 +653,8 @@ miGetImage( DrawablePtr pDraw, int sx, int sy, int w, int h, pGC = GetScratchGC(depth, pDraw->pScreen); if (!pGC) return; - pPixmap = (*pDraw->pScreen->CreatePixmap) - (pDraw->pScreen, w, 1, depth, - CREATE_PIXMAP_USAGE_SCRATCH); + pPixmap = CreatePixmap(pDraw->pScreen, w, 1, depth, + CREATE_PIXMAP_USAGE_SCRATCH); if (!pPixmap) { FreeScratchGC(pGC); diff --git a/mi/midispcur.c b/mi/midispcur.c index 012f4cd..2c6dcc7 100644 --- a/mi/midispcur.c +++ b/mi/midispcur.c @@ -214,9 +214,9 @@ miDCRealize (ScreenPtr pScreen, CursorPtr pCursor) pPriv->sourceBits = 0; pPriv->maskBits = 0; - pPixmap = (*pScreen->CreatePixmap) (pScreen, pCursor->bits->width, - pCursor->bits->height, 32, - CREATE_PIXMAP_USAGE_SCRATCH); + pPixmap = CreatePixmap(pScreen, pCursor->bits->width, + pCursor->bits->height, 32, + CREATE_PIXMAP_USAGE_SCRATCH); if (!pPixmap) { free((pointer) pPriv); @@ -248,13 +248,13 @@ miDCRealize (ScreenPtr pScreen, CursorPtr pCursor) } pPriv->pPicture = 0; #endif - pPriv->sourceBits = (*pScreen->CreatePixmap) (pScreen, pCursor->bits->width, pCursor->bits->height, 1, 0); + pPriv->sourceBits = CreatePixmap(pScreen, pCursor->bits->width, pCursor->bits->height, 1, 0); if (!pPriv->sourceBits) { free((pointer) pPriv); return NULL; } - pPriv->maskBits = (*pScreen->CreatePixmap) (pScreen, pCursor->bits->width, pCursor->bits->height, 1, 0); + pPriv->maskBits = CreatePixmap(pScreen, pCursor->bits->width, pCursor->bits->height, 1, 0); if (!pPriv->maskBits) { FreePixmap(pPriv->sourceBits); @@ -465,7 +465,7 @@ miDCSaveUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen, if (pSave) FreePixmap(pSave); pBuffer->pSave = pSave = - (*pScreen->CreatePixmap) (pScreen, w, h, pScreen->rootDepth, 0); + CreatePixmap(pScreen, w, h, pScreen->rootDepth, 0); if (!pSave) return FALSE; } diff --git a/mi/miglblt.c b/mi/miglblt.c index dcf08da..41c5355 100644 --- a/mi/miglblt.c +++ b/mi/miglblt.c @@ -121,9 +121,7 @@ miPolyGlyphBlt( height = FONTMAXBOUNDS(pfont,ascent) + FONTMAXBOUNDS(pfont,descent); - pPixmap = (*pDrawable->pScreen->CreatePixmap)(pDrawable->pScreen, - width, height, 1, - CREATE_PIXMAP_USAGE_SCRATCH); + pPixmap = CreatePixmap(pDrawable->pScreen, width, height, 1, CREATE_PIXMAP_USAGE_SCRATCH); if (!pPixmap) return; diff --git a/mi/miscrinit.c b/mi/miscrinit.c index a2392b7..847c221 100644 --- a/mi/miscrinit.c +++ b/mi/miscrinit.c @@ -151,7 +151,7 @@ miCreateScreenResources(ScreenPtr pScreen) /* create a pixmap with no data, then redirect it to point to * the screen */ - pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, pScreen->rootDepth, 0); + pPixmap = CreatePixmap(pScreen, 0, 0, pScreen->rootDepth, 0); if (!pPixmap) return FALSE; diff --git a/miext/rootless/rootlessScreen.c b/miext/rootless/rootlessScreen.c index 43b9cbb..ec808c3 100644 --- a/miext/rootless/rootlessScreen.c +++ b/miext/rootless/rootlessScreen.c @@ -85,7 +85,7 @@ RootlessUpdateScreenPixmap(ScreenPtr pScreen) pPix = (*pScreen->GetScreenPixmap)(pScreen); if (pPix == NULL) { - pPix = (*pScreen->CreatePixmap)(pScreen, 0, 0, pScreen->rootDepth, 0); + pPix = CreatePixmap(pScreen, 0, 0, pScreen->rootDepth, 0); (*pScreen->SetScreenPixmap)(pPix); } diff --git a/miext/shadow/shadow.c b/miext/shadow/shadow.c index 9303f97..d93bc0d 100644 --- a/miext/shadow/shadow.c +++ b/miext/shadow/shadow.c @@ -236,7 +236,7 @@ shadowInit(ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window) { PixmapPtr pPixmap; - pPixmap = pScreen->CreatePixmap(pScreen, pScreen->width, pScreen->height, + pPixmap = CreatePixmap(pScreen, pScreen->width, pScreen->height, pScreen->rootDepth, 0); if (!pPixmap) return FALSE; diff --git a/render/glyph.c b/render/glyph.c index aae93d4..e9a85d1 100644 --- a/render/glyph.c +++ b/render/glyph.c @@ -652,9 +652,7 @@ miGlyphs (CARD8 op, return; width = extents.x2 - extents.x1; height = extents.y2 - extents.y1; - pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, - maskFormat->depth, - CREATE_PIXMAP_USAGE_SCRATCH); + pMaskPixmap = CreatePixmap(pScreen, width, height, maskFormat->depth, CREATE_PIXMAP_USAGE_SCRATCH); if (!pMaskPixmap) return; component_alpha = NeedsComponent(maskFormat->format); diff --git a/render/mirect.c b/render/mirect.c index 0ccc8e4..d2fa21a 100644 --- a/render/mirect.c +++ b/render/mirect.c @@ -135,8 +135,7 @@ miCompositeRects (CARD8 op, if (!rgbaFormat) goto bail1; - pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1, rgbaFormat->depth, - CREATE_PIXMAP_USAGE_SCRATCH); + pPixmap = CreatePixmap(pScreen, 1, 1, rgbaFormat->depth, CREATE_PIXMAP_USAGE_SCRATCH); if (!pPixmap) goto bail2; diff --git a/render/mitrap.c b/render/mitrap.c index fc501cd..e37f544 100644 --- a/render/mitrap.c +++ b/render/mitrap.c @@ -60,8 +60,7 @@ miCreateAlphaPicture (ScreenPtr pScreen, return 0; } - pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, - pPictFormat->depth, 0); + pPixmap = CreatePixmap(pScreen, width, height, pPictFormat->depth, 0); if (!pPixmap) return 0; pGC = GetScratchGC (pPixmap->drawable.depth, pScreen); diff --git a/render/render.c b/render/render.c index 67854b0..1ab3f1c 100644 --- a/render/render.c +++ b/render/render.c @@ -1155,9 +1155,7 @@ ProcRenderAddGlyphs (ClientPtr client) goto bail; } - pDstPix = (pScreen->CreatePixmap) (pScreen, - width, height, depth, - CREATE_PIXMAP_USAGE_GLYPH_PICTURE); + pDstPix = CreatePixmap(pScreen, width, height, depth, CREATE_PIXMAP_USAGE_GLYPH_PICTURE); if (!pDstPix) { @@ -1580,8 +1578,7 @@ ProcRenderCreateCursor (ClientPtr client) free(mskbits); return BadImplementation; } - pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, 32, - CREATE_PIXMAP_USAGE_SCRATCH); + pPixmap = CreatePixmap(pScreen, width, height, 32, CREATE_PIXMAP_USAGE_SCRATCH); if (!pPixmap) { free(argbbits); -- 1.7.0 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
