03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Copyright © 1998 Keith Packard
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * documentation for any purpose is hereby granted without fee, provided that
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * the above copyright notice appear in all copies and that both that
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * copyright notice and this permission notice appear in supporting
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * documentation, and that the name of Keith Packard not be used in
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * advertising or publicity pertaining to distribution of the software without
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * specific, written prior permission. Keith Packard makes no
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * representations about the suitability of this software for any purpose. It
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * is provided "as is" without express or implied warranty.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * PERFORMANCE OF THIS SOFTWARE.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr))))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr))))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * This single define controls the basic size of data manipulated
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * by this software; it must be log2(sizeof (FbBits) * 8)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* for driver compat - intel UXA needs the second one at least */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FB_STIP_ODDSTRIDE(s) (((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FB_STIP_ODDPTR(p) ((((long) (p)) & (FB_MASK >> 3)) != 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbFullMask(n) ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync defined(__s390x__) || \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef unsigned long FbBits;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef unsigned long long FbBits;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT void fbValidateDrawable(DrawablePtr d);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT void fbInitializeDrawable(DrawablePtr d);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* #define FbLeftBits(x,n) ((x) & ((((FbBits) 1) << (n)) - 1)) */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbStipMoveLsb(x,s,n) (FbStipRight (x,(s)-(n)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* #define FbLeftBits(x,n) ((x) >> (FB_UNIT - (n))) */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRotLeft(x,n) FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRotRight(x,n) FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRotStipLeft(x,n) FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRotStipRight(x,n) FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRightMask(x) ( ((FB_UNIT - (x)) & FB_MASK) ? \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbLeftStipMask(x) ( ((x) & FB_STIP_MASK) ? \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRightStipMask(x) ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbBitsMask(x,w) (FbScrRight(FB_ALLONES,(x) & FB_MASK) & \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbStipMask(x,w) (FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync r = FbRightMask((x)+n); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (n < 0) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbPatternOffset(o,t) ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbPtrOffset(p,o,t) ((t *) ((CARD8 *) (p) + (o)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbSelectPatternPart(xor,o,t) ((xor) >> (FbPatternOffset (o,t) << 3))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbStorePart(dst,off,t,xor) (WRITE(FbPtrOffset(dst,off,t), \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync r = FbRightMask((x)+n); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* compute right byte length */ \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* compute left byte length */ \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /* subtract out the portion painted by leftMask */ \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (n < 0) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } else if (rb) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync switch (lb) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync switch (rb) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (n < 0) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * These macros are used to transparently stipple
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * in copy mode; the expected usage is with 'n' constant
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * so all of the conditional parts collapse into a minimal
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * sequence of partial word writes
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * 'n' is the bytemask of which bytes to store, 'a' is the address
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * of the FbBits base unit, 'o' is the offset within that unit
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * The term "lane" comes from the hardware term "byte-lane" which
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if ((n) == 0x01) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if ((n) == 0x03) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if ((n) == 0x0f) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if ((n) == 0x0ff) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbLaneCase(n,a) FbLaneCase8(n,(CARD8 *) (a),0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbLaneCase(n,a) FbLaneCase4(n,(CARD8 *) (a),0)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* Rotate a filled pixel value to the specified alignement */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRot24(p,b) (FbScrRight(p,b) | FbScrLeft(p,24-(b)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbRot24Stip(p,b) (FbStipRight(p,b) | FbStipLeft(p,24-(b)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* step a filled pixel value to the next/previous FB_UNIT alignment */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbNext24Stip(p) (FbRot24(p,(24-FB_STIP_UNIT%24)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbPrev24Stip(p) (FbRot24(p,FB_STIP_UNIT%24))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* step a rotation value to the next/previous rotation value */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbNext24RotStip(r) ((r) == 0 ? 16 : (r) - 8)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbPrev24RotStip(r) ((r) == 16 ? 0 : (r) + 8)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* Whether 24-bit specific code is needed for this filled pixel value */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* Macros for dealing with dashing */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* as numInDashList is always even, this case can skip a test */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (!--(dashlen)) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* Framebuffer access wrapper */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef FbBits(*ReadMemoryProcPtr) (const void *src, int size);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef void (*WriteMemoryProcPtr) (void *dst, FbBits value, int size);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef void (*SetupWrapProcPtr) (ReadMemoryProcPtr * pRead,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef void (*FinishWrapProcPtr) (DrawablePtr pDraw);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* private field of a screen */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync unsigned char win32bpp; /* window bpp for 32-bpp images */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync unsigned char pix32bpp; /* pixmap bpp for 32-bpp images */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey()))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* private field of GC */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync unsigned int dashLength; /* total of all dash elements */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetGCPrivateKey(pGC) (&fbGetScreenPrivate((pGC)->pScreen)->gcPrivateKeyRec)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey(pGC)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetFreeCompClip(pGC) ((pGC)->freeCompClip)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetRotatedPixmap(pGC) ((pGC)->pRotatedPixmap)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetWinPrivateKey(pWin) (&fbGetScreenPrivate(((DrawablePtr) (pWin))->pScreen)->winPrivateKeyRec)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey(pWin)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix) - (pPix)->screen_x)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix) - (pPix)->screen_y)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbGetPixmapBitsData(_pPix, pointer, stride, bpp); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbGetPixmapStipData(_pPix, pointer, stride, bpp); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * XFree86 empties the root BorderClip when the VT is inactive,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * here's a macro which uses that to disable GetImage and GetSpans
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Accelerated tiles are power of 2 width <= FB_UNIT
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbEvenTile(w) ((w) <= FB_UNIT && FbPowerOfTwo(w))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * with dstBpp a power of 2 as well
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define FbEvenStip(w,bpp) ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int y, int width, int height, CARD8 *src, FbStride srcStride);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int h, unsigned int format, unsigned long planeMask, char *d);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncfbPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int signdy, int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbPolySegment8(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbPolySegment16(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbPolySegment24(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbPolySegment32(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int height, int alu, FbBits pm, int bpp, Bool reverse, Bool upsidedown);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int height, int alu, FbBits pm, Bool reverse, Bool upsidedown);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbBltStip(FbStip * src, FbStride srcStride, /* in FbStip units, not FbBits units */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int srcX, FbStip * dst, FbStride dstStride, /* in FbStip units, not FbBits units */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstX, int width, int height, int alu, FbBits pm, int bpp);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int height, FbBits fgand, FbBits fbxor, FbBits bgand, FbBits bgxor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbBltOne24(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbBits * dst, FbStride dstStride, /* FbBits units per scanline */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbStip fgxor, FbStip bgand, FbStip bgxor, Pixel planeMask);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbListInstalledColormaps(ScreenPtr pScreen, Colormap * pmaps);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync unsigned short *pgreen,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int ndef, xColorItem * indefs, xColorItem * outdefs);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbSetVisualTypes(int depth, int visuals, int bitsPerRGB);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncfbSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync VisualID * defaultVisp, unsigned long sizes, int bitsPerRGB);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* Compatibility definition, to be removed at next ABI change. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef void (*fbCopyProc) (DrawablePtr pSrcDrawable,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* Compatibility wrapper, to be removed at next ABI change. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dy, fbCopyProc copyProc, Pixel bitPlane, void *closure);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* Compatibility wrapper, to be removed at next ABI change. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int yOut, fbCopyProc copyProc, Pixel bitplane, void *closure);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int heightSrc, int xOut, int yOut, unsigned long bitplane);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbFill(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int width, int height);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xa, int ya, int xb, int yb, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbGlyphIn(RegionPtr pRegion, int x, int y, int width, int height);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int x, int y, int w, int h, int leftPad, int format, char *pImage);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int y, int width, int height, FbStip * src, FbStride srcStride);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int width, int height, FbStip * src, FbStride srcStride, int srcX);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int w, int h, unsigned int format, unsigned long planeMask, char *d);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbZeroSegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSegs);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncfbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncfbCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xorg, int yorg, int xoff, int yoff, FbBits andOrig, FbBits xorOrig);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbStride srcStride, int srcX, int x, int y, int width, int height);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbStride srcStride, int srcX, int x, int y, int width, int height);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync _fbSetWindowPixmap(WindowPtr pWindow, PixmapPtr pPixmap);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbSetupScreen(ScreenPtr pScreen, pointer pbits, /* pointer to screen bitmap */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dpiy, int width, /* pixel width of frame buffer */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int ysize, int dpix, int dpiy, int width, int bpp);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xsize, int ysize, int dpix, int dpiy, int width, int bpp);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync char *src, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT FbBres *fbSelectBres(DrawablePtr pDrawable, GCPtr pGC);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int signdy, int axis, int x, int y, int e, int e1, int e3, int len);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xa, int ya, int xb, int yb, Bool drawLast, int *dashOffset);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstX, int bpp, int width, int height, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int dstX, int width, int height, FbBits and, FbBits xor);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbTransparentSpan(FbBits * dst, FbBits stip, FbBits fgxor, int n);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int tileHeight, int alu, FbBits pm, int xRot, int yRot);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT FbBits fbReplicatePixel(Pixel p, int bpp);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbReduceRasterOp(int rop, FbBits fg, FbBits pm, FbBits * andp, FbBits * xorp);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT pixman_image_t *image_from_pict(PicturePtr pict,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT void free_pixman_pict(PicturePtr, pixman_image_t *);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#endif /* _FB_H_ */