diff options
Diffstat (limited to 'xorg-server/fb/fbgc.c')
-rw-r--r-- | xorg-server/fb/fbgc.c | 303 |
1 files changed, 146 insertions, 157 deletions
diff --git a/xorg-server/fb/fbgc.c b/xorg-server/fb/fbgc.c index 8108c3acb..e6f8279b3 100644 --- a/xorg-server/fb/fbgc.c +++ b/xorg-server/fb/fbgc.c @@ -38,7 +38,7 @@ const GCFuncs fbGCFuncs = { miCopyClip, }; -const GCOps fbGCOps = { +const GCOps fbGCOps = { fbFillSpans, fbSetSpans, fbPutImage, @@ -64,14 +64,14 @@ const GCOps fbGCOps = { Bool fbCreateGC(GCPtr pGC) { - pGC->ops = (GCOps *) &fbGCOps; - pGC->funcs = (GCFuncs *) &fbGCFuncs; + pGC->ops = (GCOps *) & fbGCOps; + pGC->funcs = (GCFuncs *) & fbGCFuncs; /* fb wants to translate before scan conversion */ pGC->miTranslate = 1; pGC->fExpose = 1; - fbGetGCPrivate(pGC)->bpp = BitsPerPixel (pGC->depth); + fbGetGCPrivate(pGC)->bpp = BitsPerPixel(pGC->depth); return TRUE; } @@ -79,56 +79,53 @@ fbCreateGC(GCPtr pGC) * Pad pixmap to FB_UNIT bits wide */ void -fbPadPixmap (PixmapPtr pPixmap) +fbPadPixmap(PixmapPtr pPixmap) { - int width; - FbBits *bits; - FbBits b; - FbBits mask; - int height; - int w; - int stride; - int bpp; + int width; + FbBits *bits; + FbBits b; + FbBits mask; + int height; + int w; + int stride; + int bpp; _X_UNUSED int xOff, yOff; - fbGetDrawable (&pPixmap->drawable, bits, stride, bpp, xOff, yOff); + fbGetDrawable(&pPixmap->drawable, bits, stride, bpp, xOff, yOff); width = pPixmap->drawable.width * pPixmap->drawable.bitsPerPixel; height = pPixmap->drawable.height; - mask = FbBitsMask (0, width); - while (height--) - { - b = READ(bits) & mask; - w = width; - while (w < FB_UNIT) - { - b = b | FbScrRight(b, w); - w <<= 1; - } - WRITE(bits, b); - bits += stride; + mask = FbBitsMask(0, width); + while (height--) { + b = READ(bits) & mask; + w = width; + while (w < FB_UNIT) { + b = b | FbScrRight(b, w); + w <<= 1; + } + WRITE(bits, b); + bits += stride; } - fbFinishAccess (&pPixmap->drawable); + fbFinishAccess(&pPixmap->drawable); } /* * Verify that 'bits' repeats every 'len' bits */ static Bool -fbBitsRepeat (FbBits bits, int len, int width) +fbBitsRepeat(FbBits bits, int len, int width) { - FbBits mask = FbBitsMask(0, len); - FbBits orig = bits & mask; - int i; - + FbBits mask = FbBitsMask(0, len); + FbBits orig = bits & mask; + int i; + if (width > FB_UNIT) - width = FB_UNIT; - for (i = 0; i < width / len; i++) - { - if ((bits & mask) != orig) - return FALSE; - bits = FbScrLeft(bits,len); + width = FB_UNIT; + for (i = 0; i < width / len; i++) { + if ((bits & mask) != orig) + return FALSE; + bits = FbScrLeft(bits, len); } return TRUE; } @@ -138,17 +135,17 @@ fbBitsRepeat (FbBits bits, int len, int width) * the first 'len' bits */ static Bool -fbLineRepeat (FbBits *bits, int len, int width) +fbLineRepeat(FbBits * bits, int len, int width) { - FbBits first = bits[0]; - - if (!fbBitsRepeat (first, len, width)) - return FALSE; - width = (width + FB_UNIT-1) >> FB_SHIFT; + FbBits first = bits[0]; + + if (!fbBitsRepeat(first, len, width)) + return FALSE; + width = (width + FB_UNIT - 1) >> FB_SHIFT; bits++; while (--width) - if (READ(bits) != first) - return FALSE; + if (READ(bits) != first) + return FALSE; return TRUE; } @@ -157,41 +154,41 @@ fbLineRepeat (FbBits *bits, int len, int width) * each scanline to represent the entire stipple */ static Bool -fbCanEvenStipple (PixmapPtr pStipple, int bpp) +fbCanEvenStipple(PixmapPtr pStipple, int bpp) { - int len = FB_UNIT / bpp; - FbBits *bits; - int stride; - int stip_bpp; + int len = FB_UNIT / bpp; + FbBits *bits; + int stride; + int stip_bpp; _X_UNUSED int stipXoff, stipYoff; - int h; + int h; /* can't even stipple 24bpp drawables */ - if ((bpp & (bpp-1)) != 0) - return FALSE; + if ((bpp & (bpp - 1)) != 0) + return FALSE; /* make sure the stipple width is a multiple of the even stipple width */ if (pStipple->drawable.width % len != 0) - return FALSE; - fbGetDrawable (&pStipple->drawable, bits, stride, stip_bpp, stipXoff, stipYoff); + return FALSE; + fbGetDrawable(&pStipple->drawable, bits, stride, stip_bpp, stipXoff, + stipYoff); h = pStipple->drawable.height; /* check to see that the stipple repeats horizontally */ - while (h--) - { - if (!fbLineRepeat (bits, len, pStipple->drawable.width)) { - fbFinishAccess (&pStipple->drawable); - return FALSE; - } - bits += stride; + while (h--) { + if (!fbLineRepeat(bits, len, pStipple->drawable.width)) { + fbFinishAccess(&pStipple->drawable); + return FALSE; + } + bits += stride; } - fbFinishAccess (&pStipple->drawable); + fbFinishAccess(&pStipple->drawable); return TRUE; } void fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) { - FbGCPrivPtr pPriv = fbGetGCPrivate(pGC); - FbBits mask; + FbGCPrivPtr pPriv = fbGetGCPrivate(pGC); + FbBits mask; /* * if the client clip is different or moved OR the subwindowMode has @@ -199,109 +196,101 @@ fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) * we need to recompute the composite clip */ - if ((changes & (GCClipXOrigin|GCClipYOrigin|GCClipMask|GCSubwindowMode)) || - (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS)) - ) - { - miComputeCompositeClip (pGC, pDrawable); + if ((changes & + (GCClipXOrigin | GCClipYOrigin | GCClipMask | GCSubwindowMode)) || + (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS)) + ) { + miComputeCompositeClip(pGC, pDrawable); } - - if (pPriv->bpp != pDrawable->bitsPerPixel) - { - changes |= GCStipple|GCForeground|GCBackground|GCPlaneMask; - pPriv->bpp = pDrawable->bitsPerPixel; + + if (pPriv->bpp != pDrawable->bitsPerPixel) { + changes |= GCStipple | GCForeground | GCBackground | GCPlaneMask; + pPriv->bpp = pDrawable->bitsPerPixel; } - if ((changes & GCTile) && fbGetRotatedPixmap(pGC)) - { - (*pGC->pScreen->DestroyPixmap) (fbGetRotatedPixmap(pGC)); - fbGetRotatedPixmap(pGC) = 0; + if ((changes & GCTile) && fbGetRotatedPixmap(pGC)) { + (*pGC->pScreen->DestroyPixmap) (fbGetRotatedPixmap(pGC)); + fbGetRotatedPixmap(pGC) = 0; } - - if (pGC->fillStyle == FillTiled) - { - PixmapPtr pOldTile, pNewTile; - - pOldTile = pGC->tile.pixmap; - if (pOldTile->drawable.bitsPerPixel != pDrawable->bitsPerPixel) - { - pNewTile = fbGetRotatedPixmap(pGC); - if (!pNewTile || pNewTile ->drawable.bitsPerPixel != pDrawable->bitsPerPixel) - { - if (pNewTile) - (*pGC->pScreen->DestroyPixmap) (pNewTile); - pNewTile = fb24_32ReformatTile (pOldTile, pDrawable->bitsPerPixel); - } - if (pNewTile) - { - fbGetRotatedPixmap(pGC) = pOldTile; - pGC->tile.pixmap = pNewTile; - changes |= GCTile; - } - } + + if (pGC->fillStyle == FillTiled) { + PixmapPtr pOldTile, pNewTile; + + pOldTile = pGC->tile.pixmap; + if (pOldTile->drawable.bitsPerPixel != pDrawable->bitsPerPixel) { + pNewTile = fbGetRotatedPixmap(pGC); + if (!pNewTile || + pNewTile->drawable.bitsPerPixel != pDrawable->bitsPerPixel) { + if (pNewTile) + (*pGC->pScreen->DestroyPixmap) (pNewTile); + pNewTile = + fb24_32ReformatTile(pOldTile, pDrawable->bitsPerPixel); + } + if (pNewTile) { + fbGetRotatedPixmap(pGC) = pOldTile; + pGC->tile.pixmap = pNewTile; + changes |= GCTile; + } + } } - if (changes & GCTile) - { - if (!pGC->tileIsPixel && - FbEvenTile (pGC->tile.pixmap->drawable.width * - pDrawable->bitsPerPixel)) - fbPadPixmap (pGC->tile.pixmap); + if (changes & GCTile) { + if (!pGC->tileIsPixel && + FbEvenTile(pGC->tile.pixmap->drawable.width * + pDrawable->bitsPerPixel)) + fbPadPixmap(pGC->tile.pixmap); } - if (changes & GCStipple) - { - pPriv->evenStipple = FALSE; + if (changes & GCStipple) { + pPriv->evenStipple = FALSE; - if (pGC->stipple) { + if (pGC->stipple) { - /* can we do an even stipple ?? */ - if (FbEvenStip (pGC->stipple->drawable.width, - pDrawable->bitsPerPixel) && - (fbCanEvenStipple (pGC->stipple, pDrawable->bitsPerPixel))) - pPriv->evenStipple = TRUE; + /* can we do an even stipple ?? */ + if (FbEvenStip(pGC->stipple->drawable.width, + pDrawable->bitsPerPixel) && + (fbCanEvenStipple(pGC->stipple, pDrawable->bitsPerPixel))) + pPriv->evenStipple = TRUE; - if (pGC->stipple->drawable.width * pDrawable->bitsPerPixel < FB_UNIT) - fbPadPixmap (pGC->stipple); - } + if (pGC->stipple->drawable.width * pDrawable->bitsPerPixel < + FB_UNIT) + fbPadPixmap(pGC->stipple); + } } /* * Recompute reduced rop values */ - if (changes & (GCForeground|GCBackground|GCPlaneMask|GCFunction)) - { - int s; - FbBits depthMask; - - mask = FbFullMask(pDrawable->bitsPerPixel); - depthMask = FbFullMask(pDrawable->depth); - - pPriv->fg = pGC->fgPixel & mask; - pPriv->bg = pGC->bgPixel & mask; - - if ((pGC->planemask & depthMask) == depthMask) - pPriv->pm = mask; - else - pPriv->pm = pGC->planemask & mask; - - s = pDrawable->bitsPerPixel; - while (s < FB_UNIT) - { - pPriv->fg |= pPriv->fg << s; - pPriv->bg |= pPriv->bg << s; - pPriv->pm |= pPriv->pm << s; - s <<= 1; - } - pPriv->and = fbAnd(pGC->alu, pPriv->fg, pPriv->pm); - pPriv->xor = fbXor(pGC->alu, pPriv->fg, pPriv->pm); - pPriv->bgand = fbAnd(pGC->alu, pPriv->bg, pPriv->pm); - pPriv->bgxor = fbXor(pGC->alu, pPriv->bg, pPriv->pm); + if (changes & (GCForeground | GCBackground | GCPlaneMask | GCFunction)) { + int s; + FbBits depthMask; + + mask = FbFullMask(pDrawable->bitsPerPixel); + depthMask = FbFullMask(pDrawable->depth); + + pPriv->fg = pGC->fgPixel & mask; + pPriv->bg = pGC->bgPixel & mask; + + if ((pGC->planemask & depthMask) == depthMask) + pPriv->pm = mask; + else + pPriv->pm = pGC->planemask & mask; + + s = pDrawable->bitsPerPixel; + while (s < FB_UNIT) { + pPriv->fg |= pPriv->fg << s; + pPriv->bg |= pPriv->bg << s; + pPriv->pm |= pPriv->pm << s; + s <<= 1; + } + pPriv->and = fbAnd(pGC->alu, pPriv->fg, pPriv->pm); + pPriv->xor = fbXor(pGC->alu, pPriv->fg, pPriv->pm); + pPriv->bgand = fbAnd(pGC->alu, pPriv->bg, pPriv->pm); + pPriv->bgxor = fbXor(pGC->alu, pPriv->bg, pPriv->pm); } - if (changes & GCDashList) - { - unsigned short n = pGC->numInDashList; - unsigned char *dash = pGC->dash; - unsigned int dashLength = 0; - - while (n--) - dashLength += (unsigned int ) *dash++; - pPriv->dashLength = dashLength; + if (changes & GCDashList) { + unsigned short n = pGC->numInDashList; + unsigned char *dash = pGC->dash; + unsigned int dashLength = 0; + + while (n--) + dashLength += (unsigned int) *dash++; + pPriv->dashLength = dashLength; } } |