This makes things look much cleaner too... Reviewed-by: Jeremy Huddleston <[email protected]>
On Oct 1, 2011, at 11:08 PM, Jamey Sharp wrote: > 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]> > --- > 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/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 | 63 +++++++++----------------------- > 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/render.c | 7 +--- > 43 files changed, 210 insertions(+), 342 deletions(-) > > diff --git a/Xext/shm.c b/Xext/shm.c > index 5acc4e3..ee67f1b 100644 > --- a/Xext/shm.c > +++ b/Xext/shm.c > @@ -491,8 +491,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; > @@ -1010,7 +1009,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 58f31c0..c6892af 100644 > --- a/composite/compalloc.c > +++ b/composite/compalloc.c > @@ -565,8 +565,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 9cca8d9..202650f 100644 > --- a/dix/dispatch.c > +++ b/dix/dispatch.c > @@ -1403,12 +1403,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, > @@ -3842,7 +3839,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 42cfef7..4d12834 100644 > --- a/dix/window.c > +++ b/dix/window.c > @@ -410,8 +410,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/Xserver-spec.xml b/doc/Xserver-spec.xml > index 4bcca7a..a609ec8 100644 > --- a/doc/Xserver-spec.xml > +++ b/doc/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; > @@ -3071,20 +3064,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 ce37c98..a40f3aa 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 e79875d..5b74d73 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. */ > @@ -121,7 +123,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 e853ac9..2e6eea2 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 38ac4aa..216748e 100644 > --- a/exa/exa_priv.h > +++ b/exa/exa_priv.h > @@ -585,9 +585,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, > @@ -600,9 +599,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, > @@ -615,9 +613,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 35fdb65..32da5ff 100644 > --- a/fb/fb.h > +++ b/fb/fb.h > @@ -1595,13 +1595,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 033fa46..979a3df 100644 > --- a/fb/fb24_32.c > +++ b/fb/fb24_32.c > @@ -543,7 +543,7 @@ fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel) > _X_UNUSED int oldXoff, oldYoff; > _X_UNUSED 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 38c38f8..746edf4 100644 > --- a/fb/fboverlay.c > +++ b/fb/fboverlay.c > @@ -134,7 +134,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 4045ee0..f135109 100644 > --- a/fb/fbpixmap.c > +++ b/fb/fbpixmap.c > @@ -28,75 +28,46 @@ > > #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); > - if (bpp == 32 && depth <= 24) > - bpp = fbGetScreenPrivate(pScreen)->pix32bpp; > - return fbCreatePixmapBpp (pScreen, width, height, depth, bpp, > usage_hint); > + int bpp = BitsPerPixel (pPixmap->drawable.depth); > + if (bpp == 32 && pPixmap->drawable.depth <= 24) > + bpp = fbGetScreenPrivate(pPixmap->drawable.pScreen)->pix32bpp; > + return fbCreatePixmapBpp (pPixmap, bpp); > } > > void > fbDestroyPixmap (PixmapPtr pPixmap) > { > + free(pPixmap->devPrivate.ptr); > } > > #define ADDRECT(reg,r,fr,rx1,ry1,rx2,ry2) \ > diff --git a/glx/glxcmds.c b/glx/glxcmds.c > index d5b764f..483d571 100644 > --- a/glx/glxcmds.c > +++ b/glx/glxcmds.c > @@ -1334,8 +1334,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 067902b..189ef65 100644 > --- a/hw/xfree86/common/xf86DGA.c > +++ b/hw/xfree86/common/xf86DGA.c > @@ -431,7 +431,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 658cf4e..b12192c 100644 > --- a/hw/xfree86/common/xf86VGAarbiter.c > +++ b/hw/xfree86/common/xf86VGAarbiter.c > @@ -367,18 +367,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 2db2045..86ca210 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 735f754..164a475 100644 > --- a/hw/xnest/Pixmap.c > +++ b/hw/xnest/Pixmap.c > @@ -34,38 +34,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 9bee9b6..453cf7b 100644 > --- a/hw/xwin/win.h > +++ b/hw/xwin/win.h > @@ -1066,9 +1066,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 8bd8e34..c323182 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 014a111..41ebc46 100644 > --- a/include/pixmap.h > +++ b/include/pixmap.h > @@ -109,9 +109,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 927ed04..8542bdc 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 fdbf2f4..82771d5 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..4680d70 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 a2c5162..19b15fe 100644 > --- a/mi/midispcur.c > +++ b/mi/midispcur.c > @@ -210,9 +210,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); > @@ -244,13 +244,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); > @@ -456,7 +456,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 7562cd2..7421e1b 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 0801e72..974e752 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 3230fa4..5dbdd86 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/render.c b/render/render.c > index a46c774..376c17c 100644 > --- a/render/render.c > +++ b/render/render.c > @@ -1160,9 +1160,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) > { > @@ -1584,8 +1582,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.5.4 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > --- Jeremy Huddleston Rebuild Sudan - Board of Directors - http://www.rebuildsudan.org Berkeley Foundation for Opportunities in Information Technology - Advisory Board - http://www.bfoit.org _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
