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