fb.h revision 6747b715
105b261ecSmrg/*
205b261ecSmrg *
305b261ecSmrg * Copyright © 1998 Keith Packard
405b261ecSmrg *
505b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
605b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
705b261ecSmrg * the above copyright notice appear in all copies and that both that
805b261ecSmrg * copyright notice and this permission notice appear in supporting
905b261ecSmrg * documentation, and that the name of Keith Packard not be used in
1005b261ecSmrg * advertising or publicity pertaining to distribution of the software without
1105b261ecSmrg * specific, written prior permission.  Keith Packard makes no
1205b261ecSmrg * representations about the suitability of this software for any purpose.  It
1305b261ecSmrg * is provided "as is" without express or implied warranty.
1405b261ecSmrg *
1505b261ecSmrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1605b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1705b261ecSmrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1805b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1905b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
2005b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2105b261ecSmrg * PERFORMANCE OF THIS SOFTWARE.
2205b261ecSmrg */
2305b261ecSmrg
2405b261ecSmrg
2505b261ecSmrg#ifndef _FB_H_
2605b261ecSmrg#define _FB_H_
2705b261ecSmrg
2805b261ecSmrg#include <X11/X.h>
2905b261ecSmrg#include <pixman.h>
3005b261ecSmrg
3105b261ecSmrg#include "scrnintstr.h"
3205b261ecSmrg#include "pixmap.h"
3305b261ecSmrg#include "pixmapstr.h"
3405b261ecSmrg#include "region.h"
3505b261ecSmrg#include "gcstruct.h"
3605b261ecSmrg#include "colormap.h"
3705b261ecSmrg#include "miscstruct.h"
3805b261ecSmrg#include "servermd.h"
3905b261ecSmrg#include "windowstr.h"
404642e01fSmrg#include "privates.h"
4105b261ecSmrg#include "mi.h"
4205b261ecSmrg#include "migc.h"
4305b261ecSmrg#include "mibstore.h"
4405b261ecSmrg#include "picturestr.h"
4505b261ecSmrg
4605b261ecSmrg#ifdef FB_ACCESS_WRAPPER
4705b261ecSmrg
4805b261ecSmrg#include "wfbrename.h"
4905b261ecSmrg#define FBPREFIX(x) wfb##x
5005b261ecSmrg#define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr))))
5105b261ecSmrg#define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr))))
5205b261ecSmrg
5305b261ecSmrg#define MEMCPY_WRAPPED(dst, src, size) do {                       \
5405b261ecSmrg    size_t _i;                                                    \
5505b261ecSmrg    CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src);           \
5605b261ecSmrg    for(_i = 0; _i < size; _i++) {                                \
5705b261ecSmrg        WRITE(_dst +_i, READ(_src + _i));                         \
5805b261ecSmrg    }                                                             \
5905b261ecSmrg} while(0)
6005b261ecSmrg
6105b261ecSmrg#define MEMSET_WRAPPED(dst, val, size) do {                       \
6205b261ecSmrg    size_t _i;                                                    \
6305b261ecSmrg    CARD8 *_dst = (CARD8*)(dst);                                  \
6405b261ecSmrg    for(_i = 0; _i < size; _i++) {                                \
6505b261ecSmrg        WRITE(_dst +_i, (val));                                   \
6605b261ecSmrg    }                                                             \
6705b261ecSmrg} while(0)
6805b261ecSmrg
6905b261ecSmrg#else
7005b261ecSmrg
7105b261ecSmrg#define FBPREFIX(x) fb##x
7205b261ecSmrg#define WRITE(ptr, val) (*(ptr) = (val))
7305b261ecSmrg#define READ(ptr) (*(ptr))
7405b261ecSmrg#define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size))
7505b261ecSmrg#define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size))
7605b261ecSmrg
7705b261ecSmrg#endif
7805b261ecSmrg
7905b261ecSmrg/*
8005b261ecSmrg * This single define controls the basic size of data manipulated
8105b261ecSmrg * by this software; it must be log2(sizeof (FbBits) * 8)
8205b261ecSmrg */
8305b261ecSmrg
8405b261ecSmrg#ifndef FB_SHIFT
8505b261ecSmrg#define FB_SHIFT    LOG2_BITMAP_PAD
8605b261ecSmrg#endif
8705b261ecSmrg
8805b261ecSmrg#if FB_SHIFT < LOG2_BITMAP_PAD
8905b261ecSmrg    error FB_SHIFT must be >= LOG2_BITMAP_PAD
9005b261ecSmrg#endif
9105b261ecSmrg
9205b261ecSmrg#define FB_UNIT	    (1 << FB_SHIFT)
9305b261ecSmrg#define FB_HALFUNIT (1 << (FB_SHIFT-1))
9405b261ecSmrg#define FB_MASK	    (FB_UNIT - 1)
9505b261ecSmrg#define FB_ALLONES  ((FbBits) -1)
9605b261ecSmrg
9705b261ecSmrg#if GLYPHPADBYTES != 4
9805b261ecSmrg#error "GLYPHPADBYTES must be 4"
9905b261ecSmrg#endif
10005b261ecSmrg/* whether to bother to include 24bpp support */
10105b261ecSmrg#ifndef FBNO24BIT
10205b261ecSmrg#define FB_24BIT
10305b261ecSmrg#endif
10405b261ecSmrg
10505b261ecSmrg/*
10605b261ecSmrg * Unless otherwise instructed, fb includes code to advertise 24bpp
10705b261ecSmrg * windows with 32bpp image format for application compatibility
10805b261ecSmrg */
10905b261ecSmrg
11005b261ecSmrg#ifdef FB_24BIT
11105b261ecSmrg#ifndef FBNO24_32
11205b261ecSmrg#define FB_24_32BIT
11305b261ecSmrg#endif
11405b261ecSmrg#endif
11505b261ecSmrg
11605b261ecSmrg#define FB_STIP_SHIFT	LOG2_BITMAP_PAD
11705b261ecSmrg#define FB_STIP_UNIT	(1 << FB_STIP_SHIFT)
11805b261ecSmrg#define FB_STIP_MASK	(FB_STIP_UNIT - 1)
11905b261ecSmrg#define FB_STIP_ALLONES	((FbStip) -1)
12005b261ecSmrg
12105b261ecSmrg#define FB_STIP_ODDSTRIDE(s)	(((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0)
12205b261ecSmrg#define FB_STIP_ODDPTR(p)	((((long) (p)) & (FB_MASK >> 3)) != 0)
12305b261ecSmrg
12405b261ecSmrg#define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
12505b261ecSmrg#define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
12605b261ecSmrg
12705b261ecSmrg#define FbFullMask(n)   ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
12805b261ecSmrg
12905b261ecSmrg#if FB_SHIFT == 6
13005b261ecSmrg# ifdef WIN32
13105b261ecSmrgtypedef unsigned __int64    FbBits;
13205b261ecSmrg# else
13305b261ecSmrg#  if defined(__alpha__) || defined(__alpha) || \
13405b261ecSmrg      defined(ia64) || defined(__ia64__) || \
13505b261ecSmrg      defined(__sparc64__) || defined(_LP64) || \
13605b261ecSmrg      defined(__s390x__) || \
13705b261ecSmrg      defined(amd64) || defined (__amd64__) || \
1384642e01fSmrg      defined (__powerpc64__)
13905b261ecSmrgtypedef unsigned long	    FbBits;
14005b261ecSmrg#  else
14105b261ecSmrgtypedef unsigned long long  FbBits;
14205b261ecSmrg#  endif
14305b261ecSmrg# endif
14405b261ecSmrg#endif
14505b261ecSmrg
14605b261ecSmrg#if FB_SHIFT == 5
14705b261ecSmrgtypedef CARD32		    FbBits;
14805b261ecSmrg#endif
14905b261ecSmrg
15005b261ecSmrg#if FB_SHIFT == 4
15105b261ecSmrgtypedef CARD16		    FbBits;
15205b261ecSmrg#endif
15305b261ecSmrg
15405b261ecSmrg#if LOG2_BITMAP_PAD == FB_SHIFT
15505b261ecSmrgtypedef FbBits		    FbStip;
15605b261ecSmrg#else
15705b261ecSmrg# if LOG2_BITMAP_PAD == 5
15805b261ecSmrgtypedef CARD32		    FbStip;
15905b261ecSmrg# endif
16005b261ecSmrg#endif
16105b261ecSmrg
16205b261ecSmrgtypedef int		    FbStride;
16305b261ecSmrg
16405b261ecSmrg
16505b261ecSmrg#ifdef FB_DEBUG
1666747b715Smrgextern _X_EXPORT void fbValidateDrawable(DrawablePtr d);
1676747b715Smrgextern _X_EXPORT void fbInitializeDrawable(DrawablePtr d);
1686747b715Smrgextern _X_EXPORT void fbSetBits (FbStip *bits, int stride, FbStip data);
16905b261ecSmrg#define FB_HEAD_BITS   (FbStip) (0xbaadf00d)
17005b261ecSmrg#define FB_TAIL_BITS   (FbStip) (0xbaddf0ad)
17105b261ecSmrg#else
17205b261ecSmrg#define fbValidateDrawable(d)
17305b261ecSmrg#define fdInitializeDrawable(d)
17405b261ecSmrg#endif
17505b261ecSmrg
17605b261ecSmrg#include "fbrop.h"
17705b261ecSmrg
17805b261ecSmrg#if BITMAP_BIT_ORDER == LSBFirst
17905b261ecSmrg#define FbScrLeft(x,n)	((x) >> (n))
18005b261ecSmrg#define FbScrRight(x,n)	((x) << (n))
18105b261ecSmrg/* #define FbLeftBits(x,n)	((x) & ((((FbBits) 1) << (n)) - 1)) */
18205b261ecSmrg#define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1))
18305b261ecSmrg#define FbStipMoveLsb(x,s,n)	(FbStipRight (x,(s)-(n)))
18405b261ecSmrg#define FbPatternOffsetBits	0
18505b261ecSmrg#else
18605b261ecSmrg#define FbScrLeft(x,n)	((x) << (n))
18705b261ecSmrg#define FbScrRight(x,n)	((x) >> (n))
18805b261ecSmrg/* #define FbLeftBits(x,n)	((x) >> (FB_UNIT - (n))) */
18905b261ecSmrg#define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n)))
19005b261ecSmrg#define FbStipMoveLsb(x,s,n)	(x)
19105b261ecSmrg#define FbPatternOffsetBits	(sizeof (FbBits) - 1)
19205b261ecSmrg#endif
19305b261ecSmrg
19405b261ecSmrg#include "micoord.h"
19505b261ecSmrg
19605b261ecSmrg#define FbStipLeft(x,n)	FbScrLeft(x,n)
19705b261ecSmrg#define FbStipRight(x,n) FbScrRight(x,n)
19805b261ecSmrg
19905b261ecSmrg#define FbRotLeft(x,n)	FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0)
20005b261ecSmrg#define FbRotRight(x,n)	FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0)
20105b261ecSmrg
20205b261ecSmrg#define FbRotStipLeft(x,n)  FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0)
20305b261ecSmrg#define FbRotStipRight(x,n)  FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0)
20405b261ecSmrg
20505b261ecSmrg#define FbLeftMask(x)	    ( ((x) & FB_MASK) ? \
20605b261ecSmrg			     FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0)
20705b261ecSmrg#define FbRightMask(x)	    ( ((FB_UNIT - (x)) & FB_MASK) ? \
20805b261ecSmrg			     FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0)
20905b261ecSmrg
21005b261ecSmrg#define FbLeftStipMask(x)   ( ((x) & FB_STIP_MASK) ? \
21105b261ecSmrg			     FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0)
21205b261ecSmrg#define FbRightStipMask(x)  ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
21305b261ecSmrg			     FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)
21405b261ecSmrg
21505b261ecSmrg#define FbBitsMask(x,w)	(FbScrRight(FB_ALLONES,(x) & FB_MASK) & \
21605b261ecSmrg			 FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK))
21705b261ecSmrg
21805b261ecSmrg#define FbStipMask(x,w)	(FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
21905b261ecSmrg			 FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
22005b261ecSmrg
22105b261ecSmrg
22205b261ecSmrg#define FbMaskBits(x,w,l,n,r) { \
22305b261ecSmrg    n = (w); \
22405b261ecSmrg    r = FbRightMask((x)+n); \
22505b261ecSmrg    l = FbLeftMask(x); \
22605b261ecSmrg    if (l) { \
22705b261ecSmrg	n -= FB_UNIT - ((x) & FB_MASK); \
22805b261ecSmrg	if (n < 0) { \
22905b261ecSmrg	    n = 0; \
23005b261ecSmrg	    l &= r; \
23105b261ecSmrg	    r = 0; \
23205b261ecSmrg	} \
23305b261ecSmrg    } \
23405b261ecSmrg    n >>= FB_SHIFT; \
23505b261ecSmrg}
23605b261ecSmrg
23705b261ecSmrg#ifdef FBNOPIXADDR
23805b261ecSmrg#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) FbMaskBits(x,w,l,n,r)
23905b261ecSmrg#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
24005b261ecSmrg    *dst = FbDoMaskRRop(*dst,and,xor,l); \
24105b261ecSmrg}
24205b261ecSmrg#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
24305b261ecSmrg    *dst = FbDoMaskRRop(*dst,and,xor,r); \
24405b261ecSmrg}
24505b261ecSmrg#else
24605b261ecSmrg
24705b261ecSmrg#define FbByteMaskInvalid   0x10
24805b261ecSmrg
24905b261ecSmrg#define FbPatternOffset(o,t)  ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
25005b261ecSmrg
25105b261ecSmrg#define FbPtrOffset(p,o,t)		((t *) ((CARD8 *) (p) + (o)))
25205b261ecSmrg#define FbSelectPatternPart(xor,o,t)	((xor) >> (FbPatternOffset (o,t) << 3))
25305b261ecSmrg#define FbStorePart(dst,off,t,xor)	(WRITE(FbPtrOffset(dst,off,t), \
25405b261ecSmrg					 FbSelectPart(xor,off,t)))
25505b261ecSmrg#ifndef FbSelectPart
25605b261ecSmrg#define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t)
25705b261ecSmrg#endif
25805b261ecSmrg
25905b261ecSmrg#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \
26005b261ecSmrg    n = (w); \
26105b261ecSmrg    lb = 0; \
26205b261ecSmrg    rb = 0; \
26305b261ecSmrg    r = FbRightMask((x)+n); \
26405b261ecSmrg    if (r) { \
26505b261ecSmrg	/* compute right byte length */ \
26605b261ecSmrg	if ((copy) && (((x) + n) & 7) == 0) { \
26705b261ecSmrg	    rb = (((x) + n) & FB_MASK) >> 3; \
26805b261ecSmrg	} else { \
26905b261ecSmrg	    rb = FbByteMaskInvalid; \
27005b261ecSmrg	} \
27105b261ecSmrg    } \
27205b261ecSmrg    l = FbLeftMask(x); \
27305b261ecSmrg    if (l) { \
27405b261ecSmrg	/* compute left byte length */ \
27505b261ecSmrg	if ((copy) && ((x) & 7) == 0) { \
27605b261ecSmrg	    lb = ((x) & FB_MASK) >> 3; \
27705b261ecSmrg	} else { \
27805b261ecSmrg	    lb = FbByteMaskInvalid; \
27905b261ecSmrg	} \
28005b261ecSmrg	/* subtract out the portion painted by leftMask */ \
28105b261ecSmrg	n -= FB_UNIT - ((x) & FB_MASK); \
28205b261ecSmrg	if (n < 0) { \
28305b261ecSmrg	    if (lb != FbByteMaskInvalid) { \
28405b261ecSmrg		if (rb == FbByteMaskInvalid) { \
28505b261ecSmrg		    lb = FbByteMaskInvalid; \
28605b261ecSmrg		} else if (rb) { \
28705b261ecSmrg		    lb |= (rb - lb) << (FB_SHIFT - 3); \
28805b261ecSmrg		    rb = 0; \
28905b261ecSmrg		} \
29005b261ecSmrg	    } \
29105b261ecSmrg	    n = 0; \
29205b261ecSmrg	    l &= r; \
29305b261ecSmrg	    r = 0; \
29405b261ecSmrg	}\
29505b261ecSmrg    } \
29605b261ecSmrg    n >>= FB_SHIFT; \
29705b261ecSmrg}
29805b261ecSmrg
29905b261ecSmrg#if FB_SHIFT == 6
30005b261ecSmrg#define FbDoLeftMaskByteRRop6Cases(dst,xor) \
30105b261ecSmrg    case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \
30205b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
30305b261ecSmrg	break; \
30405b261ecSmrg    case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \
30505b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
30605b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
30705b261ecSmrg	break; \
30805b261ecSmrg    case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \
30905b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
31005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
31105b261ecSmrg	break; \
31205b261ecSmrg    case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \
31305b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
31405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
31505b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
31605b261ecSmrg	break; \
31705b261ecSmrg    case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \
31805b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
31905b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
32005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
32105b261ecSmrg	break; \
32205b261ecSmrg    case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \
32305b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
32405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
32505b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
32605b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
32705b261ecSmrg	break; \
32805b261ecSmrg    case (sizeof (FbBits) - 7): \
32905b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
33005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
33105b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
33205b261ecSmrg	break; \
33305b261ecSmrg    case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \
33405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
33505b261ecSmrg	break; \
33605b261ecSmrg    case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \
33705b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
33805b261ecSmrg	break; \
33905b261ecSmrg    case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \
34005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
34105b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
34205b261ecSmrg	break; \
34305b261ecSmrg    case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \
34405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
34505b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
34605b261ecSmrg	break; \
34705b261ecSmrg    case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \
34805b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
34905b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
35005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
35105b261ecSmrg	break; \
35205b261ecSmrg    case (sizeof (FbBits) - 6): \
35305b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
35405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
35505b261ecSmrg	break; \
35605b261ecSmrg    case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \
35705b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
35805b261ecSmrg	break; \
35905b261ecSmrg    case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \
36005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
36105b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
36205b261ecSmrg	break; \
36305b261ecSmrg    case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \
36405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
36505b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
36605b261ecSmrg	break; \
36705b261ecSmrg    case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \
36805b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
36905b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
37005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
37105b261ecSmrg	break; \
37205b261ecSmrg    case (sizeof (FbBits) - 5): \
37305b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
37405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
37505b261ecSmrg	break; \
37605b261ecSmrg    case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \
37705b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
37805b261ecSmrg	break; \
37905b261ecSmrg    case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \
38005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
38105b261ecSmrg	break; \
38205b261ecSmrg    case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \
38305b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
38405b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
38505b261ecSmrg	break; \
38605b261ecSmrg    case (sizeof (FbBits) - 4): \
38705b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
38805b261ecSmrg	break;
38905b261ecSmrg
39005b261ecSmrg#define FbDoRightMaskByteRRop6Cases(dst,xor) \
39105b261ecSmrg    case 4: \
39205b261ecSmrg	FbStorePart(dst,0,CARD32,xor); \
39305b261ecSmrg	break; \
39405b261ecSmrg    case 5: \
39505b261ecSmrg	FbStorePart(dst,0,CARD32,xor); \
39605b261ecSmrg	FbStorePart(dst,4,CARD8,xor); \
39705b261ecSmrg	break; \
39805b261ecSmrg    case 6: \
39905b261ecSmrg	FbStorePart(dst,0,CARD32,xor); \
40005b261ecSmrg	FbStorePart(dst,4,CARD16,xor); \
40105b261ecSmrg	break; \
40205b261ecSmrg    case 7: \
40305b261ecSmrg	FbStorePart(dst,0,CARD32,xor); \
40405b261ecSmrg	FbStorePart(dst,4,CARD16,xor); \
40505b261ecSmrg	FbStorePart(dst,6,CARD8,xor); \
40605b261ecSmrg	break;
40705b261ecSmrg#else
40805b261ecSmrg#define FbDoLeftMaskByteRRop6Cases(dst,xor)
40905b261ecSmrg#define FbDoRightMaskByteRRop6Cases(dst,xor)
41005b261ecSmrg#endif
41105b261ecSmrg
41205b261ecSmrg#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
41305b261ecSmrg    switch (lb) { \
41405b261ecSmrg    FbDoLeftMaskByteRRop6Cases(dst,xor) \
41505b261ecSmrg    case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
41605b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
41705b261ecSmrg	break; \
41805b261ecSmrg    case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \
41905b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
42005b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
42105b261ecSmrg	break; \
42205b261ecSmrg    case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \
42305b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
42405b261ecSmrg	break; \
42505b261ecSmrg    case sizeof (FbBits) - 3: \
42605b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
42705b261ecSmrg    case sizeof (FbBits) - 2: \
42805b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \
42905b261ecSmrg	break; \
43005b261ecSmrg    case sizeof (FbBits) - 1: \
43105b261ecSmrg	FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \
43205b261ecSmrg	break; \
43305b261ecSmrg    default: \
43405b261ecSmrg	WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \
43505b261ecSmrg	break; \
43605b261ecSmrg    } \
43705b261ecSmrg}
43805b261ecSmrg
43905b261ecSmrg
44005b261ecSmrg#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
44105b261ecSmrg    switch (rb) { \
44205b261ecSmrg    case 1: \
44305b261ecSmrg	FbStorePart(dst,0,CARD8,xor); \
44405b261ecSmrg	break; \
44505b261ecSmrg    case 2: \
44605b261ecSmrg	FbStorePart(dst,0,CARD16,xor); \
44705b261ecSmrg	break; \
44805b261ecSmrg    case 3: \
44905b261ecSmrg	FbStorePart(dst,0,CARD16,xor); \
45005b261ecSmrg	FbStorePart(dst,2,CARD8,xor); \
45105b261ecSmrg	break; \
45205b261ecSmrg    FbDoRightMaskByteRRop6Cases(dst,xor) \
45305b261ecSmrg    default: \
45405b261ecSmrg	WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
45505b261ecSmrg    } \
45605b261ecSmrg}
45705b261ecSmrg#endif
45805b261ecSmrg
45905b261ecSmrg#define FbMaskStip(x,w,l,n,r) { \
46005b261ecSmrg    n = (w); \
46105b261ecSmrg    r = FbRightStipMask((x)+n); \
46205b261ecSmrg    l = FbLeftStipMask(x); \
46305b261ecSmrg    if (l) { \
46405b261ecSmrg	n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \
46505b261ecSmrg	if (n < 0) { \
46605b261ecSmrg	    n = 0; \
46705b261ecSmrg	    l &= r; \
46805b261ecSmrg	    r = 0; \
46905b261ecSmrg	} \
47005b261ecSmrg    } \
47105b261ecSmrg    n >>= FB_STIP_SHIFT; \
47205b261ecSmrg}
47305b261ecSmrg
47405b261ecSmrg/*
47505b261ecSmrg * These macros are used to transparently stipple
47605b261ecSmrg * in copy mode; the expected usage is with 'n' constant
47705b261ecSmrg * so all of the conditional parts collapse into a minimal
47805b261ecSmrg * sequence of partial word writes
47905b261ecSmrg *
48005b261ecSmrg * 'n' is the bytemask of which bytes to store, 'a' is the address
48105b261ecSmrg * of the FbBits base unit, 'o' is the offset within that unit
48205b261ecSmrg *
48305b261ecSmrg * The term "lane" comes from the hardware term "byte-lane" which
48405b261ecSmrg */
48505b261ecSmrg
4866747b715Smrg#define FbLaneCase1(n,a,o)						\
4876747b715Smrg    if ((n) == 0x01) {							\
4886747b715Smrg	WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor);		\
4896747b715Smrg    }
4906747b715Smrg
4916747b715Smrg#define FbLaneCase2(n,a,o)						\
4926747b715Smrg    if ((n) == 0x03) {							\
4936747b715Smrg	WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor);	\
4946747b715Smrg    } else {								\
4956747b715Smrg	FbLaneCase1((n)&1,a,o)						\
4966747b715Smrg	FbLaneCase1((n)>>1,a,(o)+1)					\
4976747b715Smrg    }
4986747b715Smrg
4996747b715Smrg#define FbLaneCase4(n,a,o)						\
5006747b715Smrg    if ((n) == 0x0f) {							\
5016747b715Smrg	WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor);	\
5026747b715Smrg    } else {								\
5036747b715Smrg	FbLaneCase2((n)&3,a,o)						\
5046747b715Smrg	FbLaneCase2((n)>>2,a,(o)+2)					\
5056747b715Smrg    }
5066747b715Smrg
5076747b715Smrg#define FbLaneCase8(n,a,o)						\
5086747b715Smrg    if ((n) == 0x0ff) {							\
5096747b715Smrg	*(FbBits *) ((a)+(o)) = fgxor;					\
5106747b715Smrg    } else {								\
5116747b715Smrg	FbLaneCase4((n)&15,a,o)						\
5126747b715Smrg	FbLaneCase4((n)>>4,a,(o)+4)					\
5136747b715Smrg    }
51405b261ecSmrg
51505b261ecSmrg#if FB_SHIFT == 6
51605b261ecSmrg#define FbLaneCase(n,a)   FbLaneCase8(n,(CARD8 *) (a),0)
51705b261ecSmrg#endif
51805b261ecSmrg
51905b261ecSmrg#if FB_SHIFT == 5
52005b261ecSmrg#define FbLaneCase(n,a)   FbLaneCase4(n,(CARD8 *) (a),0)
52105b261ecSmrg#endif
52205b261ecSmrg
52305b261ecSmrg/* Rotate a filled pixel value to the specified alignement */
52405b261ecSmrg#define FbRot24(p,b)	    (FbScrRight(p,b) | FbScrLeft(p,24-(b)))
52505b261ecSmrg#define FbRot24Stip(p,b)    (FbStipRight(p,b) | FbStipLeft(p,24-(b)))
52605b261ecSmrg
52705b261ecSmrg/* step a filled pixel value to the next/previous FB_UNIT alignment */
52805b261ecSmrg#define FbNext24Pix(p)	(FbRot24(p,(24-FB_UNIT%24)))
52905b261ecSmrg#define FbPrev24Pix(p)	(FbRot24(p,FB_UNIT%24))
53005b261ecSmrg#define FbNext24Stip(p)	(FbRot24(p,(24-FB_STIP_UNIT%24)))
53105b261ecSmrg#define FbPrev24Stip(p)	(FbRot24(p,FB_STIP_UNIT%24))
53205b261ecSmrg
53305b261ecSmrg/* step a rotation value to the next/previous rotation value */
53405b261ecSmrg#if FB_UNIT == 64
53505b261ecSmrg#define FbNext24Rot(r)        ((r) == 16 ? 0 : (r) + 8)
53605b261ecSmrg#define FbPrev24Rot(r)        ((r) == 0 ? 16 : (r) - 8)
53705b261ecSmrg
53805b261ecSmrg#if IMAGE_BYTE_ORDER == MSBFirst
53905b261ecSmrg#define FbFirst24Rot(x)		(((x) + 8) % 24)
54005b261ecSmrg#else
54105b261ecSmrg#define FbFirst24Rot(x)		((x) % 24)
54205b261ecSmrg#endif
54305b261ecSmrg
54405b261ecSmrg#endif
54505b261ecSmrg
54605b261ecSmrg#if FB_UNIT == 32
54705b261ecSmrg#define FbNext24Rot(r)        ((r) == 0 ? 16 : (r) - 8)
54805b261ecSmrg#define FbPrev24Rot(r)        ((r) == 16 ? 0 : (r) + 8)
54905b261ecSmrg
55005b261ecSmrg#if IMAGE_BYTE_ORDER == MSBFirst
55105b261ecSmrg#define FbFirst24Rot(x)		(((x) + 16) % 24)
55205b261ecSmrg#else
55305b261ecSmrg#define FbFirst24Rot(x)		((x) % 24)
55405b261ecSmrg#endif
55505b261ecSmrg#endif
55605b261ecSmrg
55705b261ecSmrg#define FbNext24RotStip(r)        ((r) == 0 ? 16 : (r) - 8)
55805b261ecSmrg#define FbPrev24RotStip(r)        ((r) == 16 ? 0 : (r) + 8)
55905b261ecSmrg
56005b261ecSmrg/* Whether 24-bit specific code is needed for this filled pixel value */
56105b261ecSmrg#define FbCheck24Pix(p)	((p) == FbNext24Pix(p))
56205b261ecSmrg
56305b261ecSmrg/* Macros for dealing with dashing */
56405b261ecSmrg
56505b261ecSmrg#define FbDashDeclare	\
56605b261ecSmrg    unsigned char	*__dash, *__firstDash, *__lastDash
56705b261ecSmrg
56805b261ecSmrg#define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) {	    \
56905b261ecSmrg    (even) = TRUE;					    \
57005b261ecSmrg    __firstDash = (pGC)->dash;				    \
57105b261ecSmrg    __lastDash = __firstDash + (pGC)->numInDashList;	    \
57205b261ecSmrg    (dashOffset) %= (pPriv)->dashLength;		    \
57305b261ecSmrg							    \
57405b261ecSmrg    __dash = __firstDash;				    \
57505b261ecSmrg    while ((dashOffset) >= ((dashlen) = *__dash))	    \
57605b261ecSmrg    {							    \
57705b261ecSmrg	(dashOffset) -= (dashlen);			    \
57805b261ecSmrg	(even) = 1-(even);				    \
57905b261ecSmrg	if (++__dash == __lastDash)			    \
58005b261ecSmrg	    __dash = __firstDash;			    \
58105b261ecSmrg    }							    \
58205b261ecSmrg    (dashlen) -= (dashOffset);				    \
58305b261ecSmrg}
58405b261ecSmrg
58505b261ecSmrg#define FbDashNext(dashlen) {				    \
58605b261ecSmrg    if (++__dash == __lastDash)				    \
58705b261ecSmrg	__dash = __firstDash;				    \
58805b261ecSmrg    (dashlen) = *__dash;				    \
58905b261ecSmrg}
59005b261ecSmrg
59105b261ecSmrg/* as numInDashList is always even, this case can skip a test */
59205b261ecSmrg
59305b261ecSmrg#define FbDashNextEven(dashlen) {			    \
59405b261ecSmrg    (dashlen) = *++__dash;				    \
59505b261ecSmrg}
59605b261ecSmrg
59705b261ecSmrg#define FbDashNextOdd(dashlen)	FbDashNext(dashlen)
59805b261ecSmrg
59905b261ecSmrg#define FbDashStep(dashlen,even) {			    \
60005b261ecSmrg    if (!--(dashlen)) {					    \
60105b261ecSmrg	FbDashNext(dashlen);				    \
60205b261ecSmrg	(even) = 1-(even);				    \
60305b261ecSmrg    }							    \
60405b261ecSmrg}
60505b261ecSmrg
6066747b715Smrgextern _X_EXPORT DevPrivateKey
6076747b715SmrgfbGetGCPrivateKey (void);
6086747b715Smrg
6096747b715Smrgextern _X_EXPORT DevPrivateKey
6106747b715SmrgfbGetWinPrivateKey (void);
6116747b715Smrg
6126747b715Smrgextern _X_EXPORT const GCOps	fbGCOps;
6136747b715Smrgextern _X_EXPORT const GCFuncs	fbGCFuncs;
61405b261ecSmrg
61505b261ecSmrg#ifdef FB_24_32BIT
61605b261ecSmrg#define FB_SCREEN_PRIVATE
61705b261ecSmrg#endif
61805b261ecSmrg
61905b261ecSmrg/* Framebuffer access wrapper */
62005b261ecSmrgtypedef FbBits (*ReadMemoryProcPtr)(const void *src, int size);
62105b261ecSmrgtypedef void (*WriteMemoryProcPtr)(void *dst, FbBits value, int size);
62205b261ecSmrgtypedef void (*SetupWrapProcPtr)(ReadMemoryProcPtr  *pRead,
62305b261ecSmrg                                 WriteMemoryProcPtr *pWrite,
62405b261ecSmrg                                 DrawablePtr         pDraw);
62505b261ecSmrgtypedef void (*FinishWrapProcPtr)(DrawablePtr pDraw);
62605b261ecSmrg
62705b261ecSmrg#ifdef FB_ACCESS_WRAPPER
62805b261ecSmrg
62905b261ecSmrg#define fbPrepareAccess(pDraw) \
63005b261ecSmrg	fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \
63105b261ecSmrg		&wfbReadMemory, \
63205b261ecSmrg		&wfbWriteMemory, \
63305b261ecSmrg		(pDraw))
63405b261ecSmrg#define fbFinishAccess(pDraw) \
63505b261ecSmrg	fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw)
63605b261ecSmrg
63705b261ecSmrg#else
63805b261ecSmrg
63905b261ecSmrg#define fbPrepareAccess(pPix)
64005b261ecSmrg#define fbFinishAccess(pDraw)
64105b261ecSmrg
64205b261ecSmrg#endif
64305b261ecSmrg
64405b261ecSmrg
64505b261ecSmrg#ifdef FB_SCREEN_PRIVATE
6466747b715Smrgextern _X_EXPORT DevPrivateKey
6476747b715SmrgfbGetScreenPrivateKey(void);
64805b261ecSmrg
64905b261ecSmrg/* private field of a screen */
65005b261ecSmrgtypedef struct {
65105b261ecSmrg    unsigned char	win32bpp;	/* window bpp for 32-bpp images */
65205b261ecSmrg    unsigned char	pix32bpp;	/* pixmap bpp for 32-bpp images */
65305b261ecSmrg#ifdef FB_ACCESS_WRAPPER
65405b261ecSmrg    SetupWrapProcPtr	setupWrap;	/* driver hook to set pixmap access wrapping */
65505b261ecSmrg    FinishWrapProcPtr	finishWrap;	/* driver hook to clean up pixmap access wrapping */
65605b261ecSmrg#endif
65705b261ecSmrg} FbScreenPrivRec, *FbScreenPrivPtr;
65805b261ecSmrg
65905b261ecSmrg#define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \
6606747b715Smrg				     dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey()))
66105b261ecSmrg#endif
66205b261ecSmrg
66305b261ecSmrg/* private field of GC */
66405b261ecSmrgtypedef struct {
66505b261ecSmrg    FbBits		and, xor;	/* reduced rop values */
66605b261ecSmrg    FbBits		bgand, bgxor;	/* for stipples */
66705b261ecSmrg    FbBits		fg, bg, pm;	/* expanded and filled */
66805b261ecSmrg    unsigned int	dashLength;	/* total of all dash elements */
66905b261ecSmrg    unsigned char    	oneRect;	/* clip list is single rectangle */
67005b261ecSmrg    unsigned char    	evenStipple;	/* stipple is even */
67105b261ecSmrg    unsigned char    	bpp;		/* current drawable bpp */
67205b261ecSmrg} FbGCPrivRec, *FbGCPrivPtr;
67305b261ecSmrg
67405b261ecSmrg#define fbGetGCPrivate(pGC)	((FbGCPrivPtr)\
6756747b715Smrg				 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey()))
67605b261ecSmrg
67705b261ecSmrg#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
67805b261ecSmrg#define fbGetExpose(pGC)	((pGC)->fExpose)
67905b261ecSmrg#define fbGetFreeCompClip(pGC)	((pGC)->freeCompClip)
68005b261ecSmrg#define fbGetRotatedPixmap(pGC)	((pGC)->pRotatedPixmap)
68105b261ecSmrg
68205b261ecSmrg#define fbGetScreenPixmap(s)	((PixmapPtr) (s)->devPrivate)
68305b261ecSmrg#define fbGetWindowPixmap(pWin)	((PixmapPtr)\
6846747b715Smrg				 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey()))
68505b261ecSmrg
68605b261ecSmrg#ifdef ROOTLESS
68705b261ecSmrg#define __fbPixDrawableX(pPix)	((pPix)->drawable.x)
68805b261ecSmrg#define __fbPixDrawableY(pPix)	((pPix)->drawable.y)
68905b261ecSmrg#else
69005b261ecSmrg#define __fbPixDrawableX(pPix)	0
69105b261ecSmrg#define __fbPixDrawableY(pPix)	0
69205b261ecSmrg#endif
69305b261ecSmrg
69405b261ecSmrg#ifdef COMPOSITE
69505b261ecSmrg#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix) - (pPix)->screen_x)
69605b261ecSmrg#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix) - (pPix)->screen_y)
69705b261ecSmrg#else
69805b261ecSmrg#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix))
69905b261ecSmrg#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix))
70005b261ecSmrg#endif
70105b261ecSmrg#define __fbPixOffXPix(pPix)	(__fbPixDrawableX(pPix))
70205b261ecSmrg#define __fbPixOffYPix(pPix)	(__fbPixDrawableY(pPix))
70305b261ecSmrg
7046747b715Smrg#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) {			\
7056747b715Smrg    if ((pDrawable)->type != DRAWABLE_PIXMAP) { 				\
7066747b715Smrg	(pixmap) = fbGetWindowPixmap(pDrawable);				\
7076747b715Smrg	(xoff) = __fbPixOffXWin(pixmap); 					\
7086747b715Smrg	(yoff) = __fbPixOffYWin(pixmap); 					\
7096747b715Smrg    } else { 									\
7106747b715Smrg	(pixmap) = (PixmapPtr) (pDrawable);					\
7116747b715Smrg	(xoff) = __fbPixOffXPix(pixmap); 					\
7126747b715Smrg	(yoff) = __fbPixOffYPix(pixmap); 					\
7136747b715Smrg    } 										\
7146747b715Smrg    fbPrepareAccess(pDrawable); 						\
71505b261ecSmrg}
71605b261ecSmrg
7176747b715Smrg#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) {			\
7186747b715Smrg    (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; 			       	\
7196747b715Smrg    (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride);	\
7206747b715Smrg    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
7216747b715Smrg}
7226747b715Smrg
7236747b715Smrg#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) {			\
7246747b715Smrg    (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; 			       	\
7256747b715Smrg    (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride);	\
7266747b715Smrg    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
7276747b715Smrg}
7286747b715Smrg
7296747b715Smrg#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 		\
7306747b715Smrg    PixmapPtr   _pPix; 								\
7316747b715Smrg    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); 				\
7326747b715Smrg    fbGetPixmapBitsData(_pPix, pointer, stride, bpp);				\
7336747b715Smrg}
7346747b715Smrg
7356747b715Smrg#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 	\
7366747b715Smrg    PixmapPtr   _pPix; 								\
7376747b715Smrg    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff);				\
7386747b715Smrg    fbGetPixmapStipData(_pPix, pointer, stride, bpp);				\
73905b261ecSmrg}
74005b261ecSmrg
74105b261ecSmrg/*
74205b261ecSmrg * XFree86 empties the root BorderClip when the VT is inactive,
74305b261ecSmrg * here's a macro which uses that to disable GetImage and GetSpans
74405b261ecSmrg */
74505b261ecSmrg
74605b261ecSmrg#define fbWindowEnabled(pWin) \
7476747b715Smrg    RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip)
74805b261ecSmrg
74905b261ecSmrg#define fbDrawableEnabled(pDrawable) \
75005b261ecSmrg    ((pDrawable)->type == DRAWABLE_PIXMAP ? \
75105b261ecSmrg     TRUE : fbWindowEnabled((WindowPtr) pDrawable))
75205b261ecSmrg
75305b261ecSmrg#define FbPowerOfTwo(w)	    (((w) & ((w) - 1)) == 0)
75405b261ecSmrg/*
75505b261ecSmrg * Accelerated tiles are power of 2 width <= FB_UNIT
75605b261ecSmrg */
75705b261ecSmrg#define FbEvenTile(w)	    ((w) <= FB_UNIT && FbPowerOfTwo(w))
75805b261ecSmrg/*
75905b261ecSmrg * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp
76005b261ecSmrg * with dstBpp a power of 2 as well
76105b261ecSmrg */
76205b261ecSmrg#define FbEvenStip(w,bpp)   ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp))
76305b261ecSmrg
76405b261ecSmrg/*
76505b261ecSmrg * fb24_32.c
76605b261ecSmrg */
7676747b715Smrgextern _X_EXPORT void
76805b261ecSmrgfb24_32GetSpans(DrawablePtr	pDrawable,
76905b261ecSmrg		int		wMax,
77005b261ecSmrg		DDXPointPtr	ppt,
77105b261ecSmrg		int		*pwidth,
77205b261ecSmrg		int		nspans,
77305b261ecSmrg		char		*pchardstStart);
77405b261ecSmrg
7756747b715Smrgextern _X_EXPORT void
77605b261ecSmrgfb24_32SetSpans (DrawablePtr	    pDrawable,
77705b261ecSmrg		 GCPtr		    pGC,
77805b261ecSmrg		 char		    *src,
77905b261ecSmrg		 DDXPointPtr	    ppt,
78005b261ecSmrg		 int		    *pwidth,
78105b261ecSmrg		 int		    nspans,
78205b261ecSmrg		 int		    fSorted);
78305b261ecSmrg
7846747b715Smrgextern _X_EXPORT void
78505b261ecSmrgfb24_32PutZImage (DrawablePtr	pDrawable,
78605b261ecSmrg		  RegionPtr	pClip,
78705b261ecSmrg		  int		alu,
78805b261ecSmrg		  FbBits	pm,
78905b261ecSmrg		  int		x,
79005b261ecSmrg		  int		y,
79105b261ecSmrg		  int		width,
79205b261ecSmrg		  int		height,
79305b261ecSmrg		  CARD8		*src,
79405b261ecSmrg		  FbStride	srcStride);
79505b261ecSmrg
7966747b715Smrgextern _X_EXPORT void
79705b261ecSmrgfb24_32GetImage (DrawablePtr     pDrawable,
79805b261ecSmrg		 int             x,
79905b261ecSmrg		 int             y,
80005b261ecSmrg		 int             w,
80105b261ecSmrg		 int             h,
80205b261ecSmrg		 unsigned int    format,
80305b261ecSmrg		 unsigned long   planeMask,
80405b261ecSmrg		 char            *d);
80505b261ecSmrg
8066747b715Smrgextern _X_EXPORT void
80705b261ecSmrgfb24_32CopyMtoN (DrawablePtr pSrcDrawable,
80805b261ecSmrg		 DrawablePtr pDstDrawable,
80905b261ecSmrg		 GCPtr       pGC,
81005b261ecSmrg		 BoxPtr      pbox,
81105b261ecSmrg		 int         nbox,
81205b261ecSmrg		 int         dx,
81305b261ecSmrg		 int         dy,
81405b261ecSmrg		 Bool        reverse,
81505b261ecSmrg		 Bool        upsidedown,
81605b261ecSmrg		 Pixel       bitplane,
81705b261ecSmrg		 void        *closure);
81805b261ecSmrg
8196747b715Smrgextern _X_EXPORT PixmapPtr
82005b261ecSmrgfb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel);
82105b261ecSmrg
8226747b715Smrgextern _X_EXPORT Bool
82305b261ecSmrgfb24_32CreateScreenResources(ScreenPtr pScreen);
82405b261ecSmrg
8256747b715Smrgextern _X_EXPORT Bool
82605b261ecSmrgfb24_32ModifyPixmapHeader (PixmapPtr   pPixmap,
82705b261ecSmrg			   int         width,
82805b261ecSmrg			   int         height,
82905b261ecSmrg			   int         depth,
83005b261ecSmrg			   int         bitsPerPixel,
83105b261ecSmrg			   int         devKind,
83205b261ecSmrg			   pointer     pPixData);
83305b261ecSmrg
83405b261ecSmrg/*
83505b261ecSmrg * fballpriv.c
83605b261ecSmrg */
8376747b715Smrgextern _X_EXPORT Bool
8384642e01fSmrgfbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCIndex);
83905b261ecSmrg
84005b261ecSmrg/*
84105b261ecSmrg * fbarc.c
84205b261ecSmrg */
84305b261ecSmrg
8446747b715Smrgextern _X_EXPORT void
84505b261ecSmrgfbPolyArc (DrawablePtr	pDrawable,
84605b261ecSmrg	   GCPtr	pGC,
84705b261ecSmrg	   int		narcs,
84805b261ecSmrg	   xArc		*parcs);
84905b261ecSmrg
85005b261ecSmrg/*
85105b261ecSmrg * fbbits.c
85205b261ecSmrg */
85305b261ecSmrg
8546747b715Smrgextern _X_EXPORT void
85505b261ecSmrgfbBresSolid8(DrawablePtr    pDrawable,
85605b261ecSmrg	     GCPtr	    pGC,
85705b261ecSmrg	     int	    dashOffset,
85805b261ecSmrg	     int	    signdx,
85905b261ecSmrg	     int	    signdy,
86005b261ecSmrg	     int	    axis,
86105b261ecSmrg	     int	    x,
86205b261ecSmrg	     int	    y,
86305b261ecSmrg	     int	    e,
86405b261ecSmrg	     int	    e1,
86505b261ecSmrg	     int	    e3,
86605b261ecSmrg	     int	    len);
86705b261ecSmrg
8686747b715Smrgextern _X_EXPORT void
86905b261ecSmrgfbBresDash8 (DrawablePtr    pDrawable,
87005b261ecSmrg	     GCPtr	    pGC,
87105b261ecSmrg	     int	    dashOffset,
87205b261ecSmrg	     int	    signdx,
87305b261ecSmrg	     int	    signdy,
87405b261ecSmrg	     int	    axis,
87505b261ecSmrg	     int	    x,
87605b261ecSmrg	     int	    y,
87705b261ecSmrg	     int	    e,
87805b261ecSmrg	     int	    e1,
87905b261ecSmrg	     int	    e3,
88005b261ecSmrg	     int	    len);
88105b261ecSmrg
8826747b715Smrgextern _X_EXPORT void
88305b261ecSmrgfbDots8 (FbBits	    *dst,
88405b261ecSmrg	 FbStride   dstStride,
88505b261ecSmrg	 int	    dstBpp,
88605b261ecSmrg	 BoxPtr	    pBox,
88705b261ecSmrg	 xPoint	    *pts,
88805b261ecSmrg	 int	    npt,
88905b261ecSmrg	 int	    xorg,
89005b261ecSmrg	 int	    yorg,
89105b261ecSmrg	 int	    xoff,
89205b261ecSmrg	 int	    yoff,
89305b261ecSmrg	 FbBits	    and,
89405b261ecSmrg	 FbBits	    xor);
89505b261ecSmrg
8966747b715Smrgextern _X_EXPORT void
89705b261ecSmrgfbArc8 (FbBits	    *dst,
89805b261ecSmrg	FbStride    dstStride,
89905b261ecSmrg	int	    dstBpp,
90005b261ecSmrg	xArc	    *arc,
90105b261ecSmrg	int	    dx,
90205b261ecSmrg	int	    dy,
90305b261ecSmrg	FbBits	    and,
90405b261ecSmrg	FbBits	    xor);
90505b261ecSmrg
9066747b715Smrgextern _X_EXPORT void
90705b261ecSmrgfbGlyph8 (FbBits    *dstLine,
90805b261ecSmrg	  FbStride  dstStride,
90905b261ecSmrg	  int	    dstBpp,
91005b261ecSmrg	  FbStip    *stipple,
91105b261ecSmrg	  FbBits    fg,
91205b261ecSmrg	  int	    height,
91305b261ecSmrg	  int	    shift);
91405b261ecSmrg
9156747b715Smrgextern _X_EXPORT void
91605b261ecSmrgfbPolyline8 (DrawablePtr    pDrawable,
91705b261ecSmrg	     GCPtr	    pGC,
91805b261ecSmrg	     int	    mode,
91905b261ecSmrg	     int	    npt,
92005b261ecSmrg	     DDXPointPtr    ptsOrig);
92105b261ecSmrg
9226747b715Smrgextern _X_EXPORT void
92305b261ecSmrgfbPolySegment8 (DrawablePtr pDrawable,
92405b261ecSmrg		GCPtr	    pGC,
92505b261ecSmrg		int	    nseg,
92605b261ecSmrg		xSegment    *pseg);
92705b261ecSmrg
9286747b715Smrgextern _X_EXPORT void
92905b261ecSmrgfbBresSolid16(DrawablePtr   pDrawable,
93005b261ecSmrg	      GCPtr	    pGC,
93105b261ecSmrg	      int	    dashOffset,
93205b261ecSmrg	      int	    signdx,
93305b261ecSmrg	      int	    signdy,
93405b261ecSmrg	      int	    axis,
93505b261ecSmrg	      int	    x,
93605b261ecSmrg	      int	    y,
93705b261ecSmrg	      int	    e,
93805b261ecSmrg	      int	    e1,
93905b261ecSmrg	      int	    e3,
94005b261ecSmrg	      int	    len);
94105b261ecSmrg
9426747b715Smrgextern _X_EXPORT void
94305b261ecSmrgfbBresDash16(DrawablePtr    pDrawable,
94405b261ecSmrg	     GCPtr	    pGC,
94505b261ecSmrg	     int	    dashOffset,
94605b261ecSmrg	     int	    signdx,
94705b261ecSmrg	     int	    signdy,
94805b261ecSmrg	     int	    axis,
94905b261ecSmrg	     int	    x,
95005b261ecSmrg	     int	    y,
95105b261ecSmrg	     int	    e,
95205b261ecSmrg	     int	    e1,
95305b261ecSmrg	     int	    e3,
95405b261ecSmrg	     int	    len);
95505b261ecSmrg
9566747b715Smrgextern _X_EXPORT void
95705b261ecSmrgfbDots16(FbBits	    *dst,
95805b261ecSmrg	 FbStride   dstStride,
95905b261ecSmrg	 int	    dstBpp,
96005b261ecSmrg	 BoxPtr	    pBox,
96105b261ecSmrg	 xPoint	    *pts,
96205b261ecSmrg	 int	    npt,
96305b261ecSmrg	 int	    xorg,
96405b261ecSmrg	 int	    yorg,
96505b261ecSmrg	 int	    xoff,
96605b261ecSmrg	 int	    yoff,
96705b261ecSmrg	 FbBits	    and,
96805b261ecSmrg	 FbBits	    xor);
96905b261ecSmrg
9706747b715Smrgextern _X_EXPORT void
97105b261ecSmrgfbArc16(FbBits	    *dst,
97205b261ecSmrg	FbStride    dstStride,
97305b261ecSmrg	int	    dstBpp,
97405b261ecSmrg	xArc	    *arc,
97505b261ecSmrg	int	    dx,
97605b261ecSmrg	int	    dy,
97705b261ecSmrg	FbBits	    and,
97805b261ecSmrg	FbBits	    xor);
97905b261ecSmrg
9806747b715Smrgextern _X_EXPORT void
98105b261ecSmrgfbGlyph16(FbBits    *dstLine,
98205b261ecSmrg	  FbStride  dstStride,
98305b261ecSmrg	  int	    dstBpp,
98405b261ecSmrg	  FbStip    *stipple,
98505b261ecSmrg	  FbBits    fg,
98605b261ecSmrg	  int	    height,
98705b261ecSmrg	  int	    shift);
98805b261ecSmrg
9896747b715Smrgextern _X_EXPORT void
99005b261ecSmrgfbPolyline16 (DrawablePtr   pDrawable,
99105b261ecSmrg	      GCPtr	    pGC,
99205b261ecSmrg	      int	    mode,
99305b261ecSmrg	      int	    npt,
99405b261ecSmrg	      DDXPointPtr   ptsOrig);
99505b261ecSmrg
9966747b715Smrgextern _X_EXPORT void
99705b261ecSmrgfbPolySegment16 (DrawablePtr	pDrawable,
99805b261ecSmrg		 GCPtr		pGC,
99905b261ecSmrg		 int		nseg,
100005b261ecSmrg		 xSegment	*pseg);
100105b261ecSmrg
100205b261ecSmrg
10036747b715Smrgextern _X_EXPORT void
100405b261ecSmrgfbBresSolid24(DrawablePtr   pDrawable,
100505b261ecSmrg	      GCPtr	    pGC,
100605b261ecSmrg	      int	    dashOffset,
100705b261ecSmrg	      int	    signdx,
100805b261ecSmrg	      int	    signdy,
100905b261ecSmrg	      int	    axis,
101005b261ecSmrg	      int	    x,
101105b261ecSmrg	      int	    y,
101205b261ecSmrg	      int	    e,
101305b261ecSmrg	      int	    e1,
101405b261ecSmrg	      int	    e3,
101505b261ecSmrg	      int	    len);
101605b261ecSmrg
10176747b715Smrgextern _X_EXPORT void
101805b261ecSmrgfbBresDash24(DrawablePtr    pDrawable,
101905b261ecSmrg	     GCPtr	    pGC,
102005b261ecSmrg	     int	    dashOffset,
102105b261ecSmrg	     int	    signdx,
102205b261ecSmrg	     int	    signdy,
102305b261ecSmrg	     int	    axis,
102405b261ecSmrg	     int	    x,
102505b261ecSmrg	     int	    y,
102605b261ecSmrg	     int	    e,
102705b261ecSmrg	     int	    e1,
102805b261ecSmrg	     int	    e3,
102905b261ecSmrg	     int	    len);
103005b261ecSmrg
10316747b715Smrgextern _X_EXPORT void
103205b261ecSmrgfbDots24(FbBits	    *dst,
103305b261ecSmrg	 FbStride   dstStride,
103405b261ecSmrg	 int	    dstBpp,
103505b261ecSmrg	 BoxPtr	    pBox,
103605b261ecSmrg	 xPoint	    *pts,
103705b261ecSmrg	 int	    npt,
103805b261ecSmrg	 int	    xorg,
103905b261ecSmrg	 int	    yorg,
104005b261ecSmrg	 int	    xoff,
104105b261ecSmrg	 int	    yoff,
104205b261ecSmrg	 FbBits	    and,
104305b261ecSmrg	 FbBits	    xor);
104405b261ecSmrg
10456747b715Smrgextern _X_EXPORT void
104605b261ecSmrgfbArc24(FbBits	    *dst,
104705b261ecSmrg	FbStride    dstStride,
104805b261ecSmrg	int	    dstBpp,
104905b261ecSmrg	xArc	    *arc,
105005b261ecSmrg	int	    dx,
105105b261ecSmrg	int	    dy,
105205b261ecSmrg	FbBits	    and,
105305b261ecSmrg	FbBits	    xor);
105405b261ecSmrg
10556747b715Smrgextern _X_EXPORT void
105605b261ecSmrgfbGlyph24(FbBits    *dstLine,
105705b261ecSmrg	  FbStride  dstStride,
105805b261ecSmrg	  int	    dstBpp,
105905b261ecSmrg	  FbStip    *stipple,
106005b261ecSmrg	  FbBits    fg,
106105b261ecSmrg	  int	    height,
106205b261ecSmrg	  int	    shift);
106305b261ecSmrg
10646747b715Smrgextern _X_EXPORT void
106505b261ecSmrgfbPolyline24 (DrawablePtr   pDrawable,
106605b261ecSmrg	      GCPtr	    pGC,
106705b261ecSmrg	      int	    mode,
106805b261ecSmrg	      int	    npt,
106905b261ecSmrg	      DDXPointPtr   ptsOrig);
107005b261ecSmrg
10716747b715Smrgextern _X_EXPORT void
107205b261ecSmrgfbPolySegment24 (DrawablePtr	pDrawable,
107305b261ecSmrg		 GCPtr		pGC,
107405b261ecSmrg		 int		nseg,
107505b261ecSmrg		 xSegment	*pseg);
107605b261ecSmrg
107705b261ecSmrg
10786747b715Smrgextern _X_EXPORT void
107905b261ecSmrgfbBresSolid32(DrawablePtr   pDrawable,
108005b261ecSmrg	      GCPtr	    pGC,
108105b261ecSmrg	      int	    dashOffset,
108205b261ecSmrg	      int	    signdx,
108305b261ecSmrg	      int	    signdy,
108405b261ecSmrg	      int	    axis,
108505b261ecSmrg	      int	    x,
108605b261ecSmrg	      int	    y,
108705b261ecSmrg	      int	    e,
108805b261ecSmrg	      int	    e1,
108905b261ecSmrg	      int	    e3,
109005b261ecSmrg	      int	    len);
109105b261ecSmrg
10926747b715Smrgextern _X_EXPORT void
109305b261ecSmrgfbBresDash32(DrawablePtr    pDrawable,
109405b261ecSmrg	     GCPtr	    pGC,
109505b261ecSmrg	     int	    dashOffset,
109605b261ecSmrg	     int	    signdx,
109705b261ecSmrg	     int	    signdy,
109805b261ecSmrg	     int	    axis,
109905b261ecSmrg	     int	    x,
110005b261ecSmrg	     int	    y,
110105b261ecSmrg	     int	    e,
110205b261ecSmrg	     int	    e1,
110305b261ecSmrg	     int	    e3,
110405b261ecSmrg	     int	    len);
110505b261ecSmrg
11066747b715Smrgextern _X_EXPORT void
110705b261ecSmrgfbDots32(FbBits	    *dst,
110805b261ecSmrg	 FbStride   dstStride,
110905b261ecSmrg	 int	    dstBpp,
111005b261ecSmrg	 BoxPtr	    pBox,
111105b261ecSmrg	 xPoint	    *pts,
111205b261ecSmrg	 int	    npt,
111305b261ecSmrg	 int	    xorg,
111405b261ecSmrg	 int	    yorg,
111505b261ecSmrg	 int	    xoff,
111605b261ecSmrg	 int	    yoff,
111705b261ecSmrg	 FbBits	    and,
111805b261ecSmrg	 FbBits	    xor);
111905b261ecSmrg
11206747b715Smrgextern _X_EXPORT void
112105b261ecSmrgfbArc32(FbBits	    *dst,
112205b261ecSmrg	FbStride    dstStride,
112305b261ecSmrg	int	    dstBpp,
112405b261ecSmrg	xArc	    *arc,
112505b261ecSmrg	int	    dx,
112605b261ecSmrg	int	    dy,
112705b261ecSmrg	FbBits	    and,
112805b261ecSmrg	FbBits	    xor);
112905b261ecSmrg
11306747b715Smrgextern _X_EXPORT void
113105b261ecSmrgfbGlyph32(FbBits    *dstLine,
113205b261ecSmrg	  FbStride  dstStride,
113305b261ecSmrg	  int	    dstBpp,
113405b261ecSmrg	  FbStip    *stipple,
113505b261ecSmrg	  FbBits    fg,
113605b261ecSmrg	  int	    height,
113705b261ecSmrg	  int	    shift);
11386747b715Smrgextern _X_EXPORT void
113905b261ecSmrgfbPolyline32 (DrawablePtr   pDrawable,
114005b261ecSmrg	      GCPtr	    pGC,
114105b261ecSmrg	      int	    mode,
114205b261ecSmrg	      int	    npt,
114305b261ecSmrg	      DDXPointPtr   ptsOrig);
114405b261ecSmrg
11456747b715Smrgextern _X_EXPORT void
114605b261ecSmrgfbPolySegment32 (DrawablePtr	pDrawable,
114705b261ecSmrg		 GCPtr		pGC,
114805b261ecSmrg		 int		nseg,
114905b261ecSmrg		 xSegment	*pseg);
115005b261ecSmrg
115105b261ecSmrg/*
115205b261ecSmrg * fbblt.c
115305b261ecSmrg */
11546747b715Smrgextern _X_EXPORT void
115505b261ecSmrgfbBlt (FbBits   *src,
115605b261ecSmrg       FbStride	srcStride,
115705b261ecSmrg       int	srcX,
115805b261ecSmrg
115905b261ecSmrg       FbBits   *dst,
116005b261ecSmrg       FbStride dstStride,
116105b261ecSmrg       int	dstX,
116205b261ecSmrg
116305b261ecSmrg       int	width,
116405b261ecSmrg       int	height,
116505b261ecSmrg
116605b261ecSmrg       int	alu,
116705b261ecSmrg       FbBits	pm,
116805b261ecSmrg       int	bpp,
116905b261ecSmrg
117005b261ecSmrg       Bool	reverse,
117105b261ecSmrg       Bool	upsidedown);
117205b261ecSmrg
11736747b715Smrgextern _X_EXPORT void
117405b261ecSmrgfbBlt24 (FbBits	    *srcLine,
117505b261ecSmrg	 FbStride   srcStride,
117605b261ecSmrg	 int	    srcX,
117705b261ecSmrg
117805b261ecSmrg	 FbBits	    *dstLine,
117905b261ecSmrg	 FbStride   dstStride,
118005b261ecSmrg	 int	    dstX,
118105b261ecSmrg
118205b261ecSmrg	 int	    width,
118305b261ecSmrg	 int	    height,
118405b261ecSmrg
118505b261ecSmrg	 int	    alu,
118605b261ecSmrg	 FbBits	    pm,
118705b261ecSmrg
118805b261ecSmrg	 Bool	    reverse,
118905b261ecSmrg	 Bool	    upsidedown);
119005b261ecSmrg
11916747b715Smrgextern _X_EXPORT void
119205b261ecSmrgfbBltStip (FbStip   *src,
119305b261ecSmrg	   FbStride srcStride,	    /* in FbStip units, not FbBits units */
119405b261ecSmrg	   int	    srcX,
119505b261ecSmrg
119605b261ecSmrg	   FbStip   *dst,
119705b261ecSmrg	   FbStride dstStride,	    /* in FbStip units, not FbBits units */
119805b261ecSmrg	   int	    dstX,
119905b261ecSmrg
120005b261ecSmrg	   int	    width,
120105b261ecSmrg	   int	    height,
120205b261ecSmrg
120305b261ecSmrg	   int	    alu,
120405b261ecSmrg	   FbBits   pm,
120505b261ecSmrg	   int	    bpp);
120605b261ecSmrg
120705b261ecSmrg/*
120805b261ecSmrg * fbbltone.c
120905b261ecSmrg */
12106747b715Smrgextern _X_EXPORT void
121105b261ecSmrgfbBltOne (FbStip   *src,
121205b261ecSmrg	  FbStride srcStride,
121305b261ecSmrg	  int	   srcX,
121405b261ecSmrg	  FbBits   *dst,
121505b261ecSmrg	  FbStride dstStride,
121605b261ecSmrg	  int	   dstX,
121705b261ecSmrg	  int	   dstBpp,
121805b261ecSmrg
121905b261ecSmrg	  int	   width,
122005b261ecSmrg	  int	   height,
122105b261ecSmrg
122205b261ecSmrg	  FbBits   fgand,
122305b261ecSmrg	  FbBits   fbxor,
122405b261ecSmrg	  FbBits   bgand,
122505b261ecSmrg	  FbBits   bgxor);
122605b261ecSmrg
122705b261ecSmrg#ifdef FB_24BIT
12286747b715Smrgextern _X_EXPORT void
122905b261ecSmrgfbBltOne24 (FbStip    *src,
123005b261ecSmrg	  FbStride  srcStride,	    /* FbStip units per scanline */
123105b261ecSmrg	  int	    srcX,	    /* bit position of source */
123205b261ecSmrg	  FbBits    *dst,
123305b261ecSmrg	  FbStride  dstStride,	    /* FbBits units per scanline */
123405b261ecSmrg	  int	    dstX,	    /* bit position of dest */
123505b261ecSmrg	  int	    dstBpp,	    /* bits per destination unit */
123605b261ecSmrg
123705b261ecSmrg	  int	    width,	    /* width in bits of destination */
123805b261ecSmrg	  int	    height,	    /* height in scanlines */
123905b261ecSmrg
124005b261ecSmrg	  FbBits    fgand,	    /* rrop values */
124105b261ecSmrg	  FbBits    fgxor,
124205b261ecSmrg	  FbBits    bgand,
124305b261ecSmrg	  FbBits    bgxor);
124405b261ecSmrg#endif
124505b261ecSmrg
12466747b715Smrgextern _X_EXPORT void
124705b261ecSmrgfbBltPlane (FbBits	    *src,
124805b261ecSmrg	    FbStride	    srcStride,
124905b261ecSmrg	    int		    srcX,
125005b261ecSmrg	    int		    srcBpp,
125105b261ecSmrg
125205b261ecSmrg	    FbStip	    *dst,
125305b261ecSmrg	    FbStride	    dstStride,
125405b261ecSmrg	    int		    dstX,
125505b261ecSmrg
125605b261ecSmrg	    int		    width,
125705b261ecSmrg	    int		    height,
125805b261ecSmrg
125905b261ecSmrg	    FbStip	    fgand,
126005b261ecSmrg	    FbStip	    fgxor,
126105b261ecSmrg	    FbStip	    bgand,
126205b261ecSmrg	    FbStip	    bgxor,
126305b261ecSmrg	    Pixel	    planeMask);
126405b261ecSmrg
126505b261ecSmrg/*
126605b261ecSmrg * fbcmap.c
126705b261ecSmrg */
12686747b715Smrgextern _X_EXPORT int
126905b261ecSmrgfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps);
127005b261ecSmrg
12716747b715Smrgextern _X_EXPORT void
127205b261ecSmrgfbInstallColormap(ColormapPtr pmap);
127305b261ecSmrg
12746747b715Smrgextern _X_EXPORT void
127505b261ecSmrgfbUninstallColormap(ColormapPtr pmap);
127605b261ecSmrg
12776747b715Smrgextern _X_EXPORT void
127805b261ecSmrgfbResolveColor(unsigned short	*pred,
127905b261ecSmrg	       unsigned short	*pgreen,
128005b261ecSmrg	       unsigned short	*pblue,
128105b261ecSmrg	       VisualPtr	pVisual);
128205b261ecSmrg
12836747b715Smrgextern _X_EXPORT Bool
128405b261ecSmrgfbInitializeColormap(ColormapPtr pmap);
128505b261ecSmrg
12866747b715Smrgextern _X_EXPORT int
128705b261ecSmrgfbExpandDirectColors (ColormapPtr   pmap,
128805b261ecSmrg		      int	    ndef,
128905b261ecSmrg		      xColorItem    *indefs,
129005b261ecSmrg		      xColorItem    *outdefs);
129105b261ecSmrg
12926747b715Smrgextern _X_EXPORT Bool
129305b261ecSmrgfbCreateDefColormap(ScreenPtr pScreen);
129405b261ecSmrg
12956747b715Smrgextern _X_EXPORT void
129605b261ecSmrgfbClearVisualTypes(void);
129705b261ecSmrg
12986747b715Smrgextern _X_EXPORT Bool
129905b261ecSmrgfbHasVisualTypes (int depth);
130005b261ecSmrg
13016747b715Smrgextern _X_EXPORT Bool
130205b261ecSmrgfbSetVisualTypes (int depth, int visuals, int bitsPerRGB);
130305b261ecSmrg
13046747b715Smrgextern _X_EXPORT Bool
130505b261ecSmrgfbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
130605b261ecSmrg			  Pixel redMask, Pixel greenMask, Pixel blueMask);
130705b261ecSmrg
13086747b715Smrgextern _X_EXPORT Bool
130905b261ecSmrgfbInitVisuals (VisualPtr    *visualp,
131005b261ecSmrg	       DepthPtr	    *depthp,
131105b261ecSmrg	       int	    *nvisualp,
131205b261ecSmrg	       int	    *ndepthp,
131305b261ecSmrg	       int	    *rootDepthp,
131405b261ecSmrg	       VisualID	    *defaultVisp,
131505b261ecSmrg	       unsigned long	sizes,
131605b261ecSmrg	       int	    bitsPerRGB);
131705b261ecSmrg
131805b261ecSmrg/*
131905b261ecSmrg * fbcopy.c
132005b261ecSmrg */
132105b261ecSmrg
13226747b715Smrg/* Compatibility definition, to be removed at next ABI change. */
13236747b715Smrgtypedef void   (*fbCopyProc) (DrawablePtr  pSrcDrawable,
13246747b715Smrg                              DrawablePtr  pDstDrawable,
13256747b715Smrg                              GCPtr        pGC,
13266747b715Smrg                              BoxPtr       pDstBox,
13276747b715Smrg                              int          nbox,
13286747b715Smrg                              int          dx,
13296747b715Smrg                              int          dy,
13306747b715Smrg                              Bool         reverse,
13316747b715Smrg                              Bool         upsidedown,
13326747b715Smrg                              Pixel        bitplane,
13336747b715Smrg                              void         *closure);
13346747b715Smrg
13356747b715Smrgextern _X_EXPORT void
133605b261ecSmrgfbCopyNtoN (DrawablePtr	pSrcDrawable,
133705b261ecSmrg	    DrawablePtr	pDstDrawable,
133805b261ecSmrg	    GCPtr	pGC,
133905b261ecSmrg	    BoxPtr	pbox,
134005b261ecSmrg	    int		nbox,
134105b261ecSmrg	    int		dx,
134205b261ecSmrg	    int		dy,
134305b261ecSmrg	    Bool	reverse,
134405b261ecSmrg	    Bool	upsidedown,
134505b261ecSmrg	    Pixel	bitplane,
134605b261ecSmrg	    void	*closure);
134705b261ecSmrg
13486747b715Smrg/* Compatibility wrapper, to be removed at next ABI change. */
13496747b715Smrgextern _X_EXPORT void
13506747b715SmrgfbCopyRegion (DrawablePtr   pSrcDrawable,
13516747b715Smrg             DrawablePtr   pDstDrawable,
13526747b715Smrg             GCPtr         pGC,
13536747b715Smrg             RegionPtr     pDstRegion,
13546747b715Smrg             int           dx,
13556747b715Smrg             int           dy,
13566747b715Smrg             fbCopyProc    copyProc,
13576747b715Smrg             Pixel         bitPlane,
13586747b715Smrg             void          *closure);
13596747b715Smrg
13606747b715Smrg/* Compatibility wrapper, to be removed at next ABI change. */
13616747b715Smrgextern _X_EXPORT RegionPtr
13626747b715SmrgfbDoCopy (DrawablePtr  pSrcDrawable,
13636747b715Smrg         DrawablePtr   pDstDrawable,
13646747b715Smrg         GCPtr         pGC,
13656747b715Smrg         int           xIn,
13666747b715Smrg         int           yIn,
13676747b715Smrg         int           widthSrc,
13686747b715Smrg         int           heightSrc,
13696747b715Smrg         int           xOut,
13706747b715Smrg         int           yOut,
13716747b715Smrg         fbCopyProc    copyProc,
13726747b715Smrg         Pixel         bitplane,
13736747b715Smrg         void          *closure);
13746747b715Smrg
13756747b715Smrgextern _X_EXPORT void
137605b261ecSmrgfbCopy1toN (DrawablePtr	pSrcDrawable,
137705b261ecSmrg	    DrawablePtr	pDstDrawable,
137805b261ecSmrg	    GCPtr	pGC,
137905b261ecSmrg	    BoxPtr	pbox,
138005b261ecSmrg	    int		nbox,
138105b261ecSmrg	    int		dx,
138205b261ecSmrg	    int		dy,
138305b261ecSmrg	    Bool	reverse,
138405b261ecSmrg	    Bool	upsidedown,
138505b261ecSmrg	    Pixel	bitplane,
138605b261ecSmrg	    void	*closure);
138705b261ecSmrg
13886747b715Smrgextern _X_EXPORT void
138905b261ecSmrgfbCopyNto1 (DrawablePtr	pSrcDrawable,
139005b261ecSmrg	    DrawablePtr	pDstDrawable,
139105b261ecSmrg	    GCPtr	pGC,
139205b261ecSmrg	    BoxPtr	pbox,
139305b261ecSmrg	    int		nbox,
139405b261ecSmrg	    int		dx,
139505b261ecSmrg	    int		dy,
139605b261ecSmrg	    Bool	reverse,
139705b261ecSmrg	    Bool	upsidedown,
139805b261ecSmrg	    Pixel	bitplane,
139905b261ecSmrg	    void	*closure);
140005b261ecSmrg
14016747b715Smrgextern _X_EXPORT RegionPtr
140205b261ecSmrgfbCopyArea (DrawablePtr	pSrcDrawable,
140305b261ecSmrg	    DrawablePtr	pDstDrawable,
140405b261ecSmrg	    GCPtr	pGC,
140505b261ecSmrg	    int		xIn,
140605b261ecSmrg	    int		yIn,
140705b261ecSmrg	    int		widthSrc,
140805b261ecSmrg	    int		heightSrc,
140905b261ecSmrg	    int		xOut,
141005b261ecSmrg	    int		yOut);
141105b261ecSmrg
14126747b715Smrgextern _X_EXPORT RegionPtr
141305b261ecSmrgfbCopyPlane (DrawablePtr    pSrcDrawable,
141405b261ecSmrg	     DrawablePtr    pDstDrawable,
141505b261ecSmrg	     GCPtr	    pGC,
141605b261ecSmrg	     int	    xIn,
141705b261ecSmrg	     int	    yIn,
141805b261ecSmrg	     int	    widthSrc,
141905b261ecSmrg	     int	    heightSrc,
142005b261ecSmrg	     int	    xOut,
142105b261ecSmrg	     int	    yOut,
142205b261ecSmrg	     unsigned long  bitplane);
142305b261ecSmrg
142405b261ecSmrg/*
142505b261ecSmrg * fbfill.c
142605b261ecSmrg */
14276747b715Smrgextern _X_EXPORT void
142805b261ecSmrgfbFill (DrawablePtr pDrawable,
142905b261ecSmrg	GCPtr	    pGC,
143005b261ecSmrg	int	    x,
143105b261ecSmrg	int	    y,
143205b261ecSmrg	int	    width,
143305b261ecSmrg	int	    height);
143405b261ecSmrg
14356747b715Smrgextern _X_EXPORT void
143605b261ecSmrgfbSolidBoxClipped (DrawablePtr	pDrawable,
143705b261ecSmrg		   RegionPtr	pClip,
143805b261ecSmrg		   int		xa,
143905b261ecSmrg		   int		ya,
144005b261ecSmrg		   int		xb,
144105b261ecSmrg		   int		yb,
144205b261ecSmrg		   FbBits	and,
144305b261ecSmrg		   FbBits	xor);
144405b261ecSmrg
144505b261ecSmrg/*
144605b261ecSmrg * fbfillrect.c
144705b261ecSmrg */
14486747b715Smrgextern _X_EXPORT void
144905b261ecSmrgfbPolyFillRect(DrawablePtr  pDrawable,
145005b261ecSmrg	       GCPtr	    pGC,
145105b261ecSmrg	       int	    nrectInit,
145205b261ecSmrg	       xRectangle   *prectInit);
145305b261ecSmrg
145405b261ecSmrg#define fbPolyFillArc miPolyFillArc
145505b261ecSmrg
145605b261ecSmrg#define fbFillPolygon miFillPolygon
145705b261ecSmrg
145805b261ecSmrg/*
145905b261ecSmrg * fbfillsp.c
146005b261ecSmrg */
14616747b715Smrgextern _X_EXPORT void
146205b261ecSmrgfbFillSpans (DrawablePtr    pDrawable,
146305b261ecSmrg	     GCPtr	    pGC,
146405b261ecSmrg	     int	    nInit,
146505b261ecSmrg	     DDXPointPtr    pptInit,
146605b261ecSmrg	     int	    *pwidthInit,
146705b261ecSmrg	     int	    fSorted);
146805b261ecSmrg
146905b261ecSmrg
147005b261ecSmrg/*
147105b261ecSmrg * fbgc.c
147205b261ecSmrg */
147305b261ecSmrg
14746747b715Smrgextern _X_EXPORT Bool
147505b261ecSmrgfbCreateGC(GCPtr pGC);
147605b261ecSmrg
14776747b715Smrgextern _X_EXPORT void
147805b261ecSmrgfbPadPixmap (PixmapPtr pPixmap);
147905b261ecSmrg
14806747b715Smrgextern _X_EXPORT void
148105b261ecSmrgfbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
148205b261ecSmrg
148305b261ecSmrg/*
148405b261ecSmrg * fbgetsp.c
148505b261ecSmrg */
14866747b715Smrgextern _X_EXPORT void
148705b261ecSmrgfbGetSpans(DrawablePtr	pDrawable,
148805b261ecSmrg	   int		wMax,
148905b261ecSmrg	   DDXPointPtr	ppt,
149005b261ecSmrg	   int		*pwidth,
149105b261ecSmrg	   int		nspans,
149205b261ecSmrg	   char		*pchardstStart);
149305b261ecSmrg
149405b261ecSmrg/*
149505b261ecSmrg * fbglyph.c
149605b261ecSmrg */
149705b261ecSmrg
14986747b715Smrgextern _X_EXPORT Bool
149905b261ecSmrgfbGlyphIn (RegionPtr	pRegion,
150005b261ecSmrg	   int		x,
150105b261ecSmrg	   int		y,
150205b261ecSmrg	   int		width,
150305b261ecSmrg	   int		height);
150405b261ecSmrg
15056747b715Smrgextern _X_EXPORT void
150605b261ecSmrgfbPolyGlyphBlt (DrawablePtr	pDrawable,
150705b261ecSmrg		GCPtr		pGC,
150805b261ecSmrg		int		x,
150905b261ecSmrg		int		y,
151005b261ecSmrg		unsigned int	nglyph,
151105b261ecSmrg		CharInfoPtr	*ppci,
151205b261ecSmrg		pointer		pglyphBase);
151305b261ecSmrg
15146747b715Smrgextern _X_EXPORT void
151505b261ecSmrgfbImageGlyphBlt (DrawablePtr	pDrawable,
151605b261ecSmrg		 GCPtr		pGC,
151705b261ecSmrg		 int		x,
151805b261ecSmrg		 int		y,
151905b261ecSmrg		 unsigned int	nglyph,
152005b261ecSmrg		 CharInfoPtr	*ppci,
152105b261ecSmrg		 pointer	pglyphBase);
152205b261ecSmrg
152305b261ecSmrg/*
152405b261ecSmrg * fbimage.c
152505b261ecSmrg */
152605b261ecSmrg
15276747b715Smrgextern _X_EXPORT void
152805b261ecSmrgfbPutImage (DrawablePtr	pDrawable,
152905b261ecSmrg	    GCPtr	pGC,
153005b261ecSmrg	    int		depth,
153105b261ecSmrg	    int		x,
153205b261ecSmrg	    int		y,
153305b261ecSmrg	    int		w,
153405b261ecSmrg	    int		h,
153505b261ecSmrg	    int		leftPad,
153605b261ecSmrg	    int		format,
153705b261ecSmrg	    char	*pImage);
153805b261ecSmrg
15396747b715Smrgextern _X_EXPORT void
154005b261ecSmrgfbPutZImage (DrawablePtr	pDrawable,
154105b261ecSmrg	     RegionPtr		pClip,
154205b261ecSmrg	     int		alu,
154305b261ecSmrg	     FbBits		pm,
154405b261ecSmrg	     int		x,
154505b261ecSmrg	     int		y,
154605b261ecSmrg	     int		width,
154705b261ecSmrg	     int		height,
154805b261ecSmrg	     FbStip		*src,
154905b261ecSmrg	     FbStride		srcStride);
155005b261ecSmrg
15516747b715Smrgextern _X_EXPORT void
155205b261ecSmrgfbPutXYImage (DrawablePtr	pDrawable,
155305b261ecSmrg	      RegionPtr		pClip,
155405b261ecSmrg	      FbBits		fg,
155505b261ecSmrg	      FbBits		bg,
155605b261ecSmrg	      FbBits		pm,
155705b261ecSmrg	      int		alu,
155805b261ecSmrg	      Bool		opaque,
155905b261ecSmrg
156005b261ecSmrg	      int		x,
156105b261ecSmrg	      int		y,
156205b261ecSmrg	      int		width,
156305b261ecSmrg	      int		height,
156405b261ecSmrg
156505b261ecSmrg	      FbStip		*src,
156605b261ecSmrg	      FbStride		srcStride,
156705b261ecSmrg	      int		srcX);
156805b261ecSmrg
15696747b715Smrgextern _X_EXPORT void
157005b261ecSmrgfbGetImage (DrawablePtr	    pDrawable,
157105b261ecSmrg	    int		    x,
157205b261ecSmrg	    int		    y,
157305b261ecSmrg	    int		    w,
157405b261ecSmrg	    int		    h,
157505b261ecSmrg	    unsigned int    format,
157605b261ecSmrg	    unsigned long   planeMask,
157705b261ecSmrg	    char	    *d);
157805b261ecSmrg/*
157905b261ecSmrg * fbline.c
158005b261ecSmrg */
158105b261ecSmrg
15826747b715Smrgextern _X_EXPORT void
158305b261ecSmrgfbZeroLine (DrawablePtr	pDrawable,
158405b261ecSmrg	    GCPtr	pGC,
158505b261ecSmrg	    int		mode,
158605b261ecSmrg	    int		npt,
158705b261ecSmrg	    DDXPointPtr	ppt);
158805b261ecSmrg
15896747b715Smrgextern _X_EXPORT void
159005b261ecSmrgfbZeroSegment (DrawablePtr  pDrawable,
159105b261ecSmrg	       GCPtr	    pGC,
159205b261ecSmrg	       int	    nseg,
159305b261ecSmrg	       xSegment	    *pSegs);
159405b261ecSmrg
15956747b715Smrgextern _X_EXPORT void
159605b261ecSmrgfbPolyLine (DrawablePtr	pDrawable,
159705b261ecSmrg	    GCPtr	pGC,
159805b261ecSmrg	    int		mode,
159905b261ecSmrg	    int		npt,
160005b261ecSmrg	    DDXPointPtr	ppt);
160105b261ecSmrg
16026747b715Smrgextern _X_EXPORT void
160305b261ecSmrgfbFixCoordModePrevious (int npt,
160405b261ecSmrg			DDXPointPtr ppt);
160505b261ecSmrg
16066747b715Smrgextern _X_EXPORT void
160705b261ecSmrgfbPolySegment (DrawablePtr  pDrawable,
160805b261ecSmrg	       GCPtr	    pGC,
160905b261ecSmrg	       int	    nseg,
161005b261ecSmrg	       xSegment	    *pseg);
161105b261ecSmrg
161205b261ecSmrg#define fbPolyRectangle	miPolyRectangle
161305b261ecSmrg
161405b261ecSmrg/*
161505b261ecSmrg * fbpict.c
161605b261ecSmrg */
161705b261ecSmrg
16186747b715Smrgextern _X_EXPORT Bool
161905b261ecSmrgfbPictureInit (ScreenPtr pScreen,
162005b261ecSmrg	       PictFormatPtr formats,
162105b261ecSmrg	       int nformats);
162205b261ecSmrg
162305b261ecSmrg/*
162405b261ecSmrg * fbpixmap.c
162505b261ecSmrg */
162605b261ecSmrg
16276747b715Smrgextern _X_EXPORT PixmapPtr
16284642e01fSmrgfbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
16294642e01fSmrg		   unsigned usage_hint);
163005b261ecSmrg
16316747b715Smrgextern _X_EXPORT PixmapPtr
16324642e01fSmrgfbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
16334642e01fSmrg		unsigned usage_hint);
163405b261ecSmrg
16356747b715Smrgextern _X_EXPORT Bool
163605b261ecSmrgfbDestroyPixmap (PixmapPtr pPixmap);
163705b261ecSmrg
16386747b715Smrgextern _X_EXPORT RegionPtr
163905b261ecSmrgfbPixmapToRegion(PixmapPtr pPix);
164005b261ecSmrg
164105b261ecSmrg/*
164205b261ecSmrg * fbpoint.c
164305b261ecSmrg */
164405b261ecSmrg
16456747b715Smrgextern _X_EXPORT void
164605b261ecSmrgfbDots (FbBits	    *dstOrig,
164705b261ecSmrg	FbStride    dstStride,
164805b261ecSmrg	int	    dstBpp,
164905b261ecSmrg	BoxPtr	    pBox,
165005b261ecSmrg	xPoint	    *pts,
165105b261ecSmrg	int	    npt,
165205b261ecSmrg	int	    xorg,
165305b261ecSmrg	int	    yorg,
165405b261ecSmrg	int	    xoff,
165505b261ecSmrg	int	    yoff,
165605b261ecSmrg	FbBits	    andOrig,
165705b261ecSmrg	FbBits	    xorOrig);
165805b261ecSmrg
16596747b715Smrgextern _X_EXPORT void
166005b261ecSmrgfbPolyPoint (DrawablePtr    pDrawable,
166105b261ecSmrg	     GCPtr	    pGC,
166205b261ecSmrg	     int	    mode,
166305b261ecSmrg	     int	    npt,
166405b261ecSmrg	     xPoint	    *pptInit);
166505b261ecSmrg
166605b261ecSmrg/*
166705b261ecSmrg * fbpush.c
166805b261ecSmrg */
16696747b715Smrgextern _X_EXPORT void
167005b261ecSmrgfbPushPattern (DrawablePtr  pDrawable,
167105b261ecSmrg	       GCPtr	    pGC,
167205b261ecSmrg
167305b261ecSmrg	       FbStip	    *src,
167405b261ecSmrg	       FbStride	    srcStride,
167505b261ecSmrg	       int	    srcX,
167605b261ecSmrg
167705b261ecSmrg	       int	    x,
167805b261ecSmrg	       int	    y,
167905b261ecSmrg
168005b261ecSmrg	       int	    width,
168105b261ecSmrg	       int	    height);
168205b261ecSmrg
16836747b715Smrgextern _X_EXPORT void
168405b261ecSmrgfbPushFill (DrawablePtr	pDrawable,
168505b261ecSmrg	    GCPtr	pGC,
168605b261ecSmrg
168705b261ecSmrg	    FbStip	*src,
168805b261ecSmrg	    FbStride	srcStride,
168905b261ecSmrg	    int		srcX,
169005b261ecSmrg
169105b261ecSmrg	    int		x,
169205b261ecSmrg	    int		y,
169305b261ecSmrg	    int		width,
169405b261ecSmrg	    int		height);
169505b261ecSmrg
16966747b715Smrgextern _X_EXPORT void
169705b261ecSmrgfbPushImage (DrawablePtr    pDrawable,
169805b261ecSmrg	     GCPtr	    pGC,
169905b261ecSmrg
170005b261ecSmrg	     FbStip	    *src,
170105b261ecSmrg	     FbStride	    srcStride,
170205b261ecSmrg	     int	    srcX,
170305b261ecSmrg
170405b261ecSmrg	     int	    x,
170505b261ecSmrg	     int	    y,
170605b261ecSmrg	     int	    width,
170705b261ecSmrg	     int	    height);
170805b261ecSmrg
17096747b715Smrgextern _X_EXPORT void
171005b261ecSmrgfbPushPixels (GCPtr	    pGC,
171105b261ecSmrg	      PixmapPtr	    pBitmap,
171205b261ecSmrg	      DrawablePtr   pDrawable,
171305b261ecSmrg	      int	    dx,
171405b261ecSmrg	      int	    dy,
171505b261ecSmrg	      int	    xOrg,
171605b261ecSmrg	      int	    yOrg);
171705b261ecSmrg
171805b261ecSmrg
171905b261ecSmrg/*
172005b261ecSmrg * fbscreen.c
172105b261ecSmrg */
172205b261ecSmrg
17236747b715Smrgextern _X_EXPORT Bool
172405b261ecSmrgfbCloseScreen (int indx, ScreenPtr pScreen);
172505b261ecSmrg
17266747b715Smrgextern _X_EXPORT Bool
172705b261ecSmrgfbRealizeFont(ScreenPtr pScreen, FontPtr pFont);
172805b261ecSmrg
17296747b715Smrgextern _X_EXPORT Bool
173005b261ecSmrgfbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
173105b261ecSmrg
17326747b715Smrgextern _X_EXPORT void
173305b261ecSmrgfbQueryBestSize (int class,
173405b261ecSmrg		 unsigned short *width, unsigned short *height,
173505b261ecSmrg		 ScreenPtr pScreen);
173605b261ecSmrg
17376747b715Smrgextern _X_EXPORT PixmapPtr
173805b261ecSmrg_fbGetWindowPixmap (WindowPtr pWindow);
173905b261ecSmrg
17406747b715Smrgextern _X_EXPORT void
174105b261ecSmrg_fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap);
174205b261ecSmrg
17436747b715Smrgextern _X_EXPORT Bool
174405b261ecSmrgfbSetupScreen(ScreenPtr	pScreen,
174505b261ecSmrg	      pointer	pbits,		/* pointer to screen bitmap */
174605b261ecSmrg	      int	xsize, 		/* in pixels */
174705b261ecSmrg	      int	ysize,
174805b261ecSmrg	      int	dpix,		/* dots per inch */
174905b261ecSmrg	      int	dpiy,
175005b261ecSmrg	      int	width,		/* pixel width of frame buffer */
175105b261ecSmrg	      int	bpp);		/* bits per pixel of frame buffer */
175205b261ecSmrg
17536747b715Smrgextern _X_EXPORT Bool
175405b261ecSmrgwfbFinishScreenInit(ScreenPtr	pScreen,
175505b261ecSmrg		    pointer	pbits,
175605b261ecSmrg		    int		xsize,
175705b261ecSmrg		    int		ysize,
175805b261ecSmrg		    int		dpix,
175905b261ecSmrg		    int		dpiy,
176005b261ecSmrg		    int		width,
176105b261ecSmrg		    int		bpp,
176205b261ecSmrg		    SetupWrapProcPtr setupWrap,
176305b261ecSmrg		    FinishWrapProcPtr finishWrap);
176405b261ecSmrg
17656747b715Smrgextern _X_EXPORT Bool
176605b261ecSmrgwfbScreenInit(ScreenPtr	pScreen,
176705b261ecSmrg	      pointer	pbits,
176805b261ecSmrg	      int	xsize,
176905b261ecSmrg	      int	ysize,
177005b261ecSmrg	      int	dpix,
177105b261ecSmrg	      int	dpiy,
177205b261ecSmrg	      int	width,
177305b261ecSmrg	      int	bpp,
177405b261ecSmrg	      SetupWrapProcPtr setupWrap,
177505b261ecSmrg	      FinishWrapProcPtr finishWrap);
177605b261ecSmrg
17776747b715Smrgextern _X_EXPORT Bool
177805b261ecSmrgfbFinishScreenInit(ScreenPtr	pScreen,
177905b261ecSmrg		   pointer	pbits,
178005b261ecSmrg		   int		xsize,
178105b261ecSmrg		   int		ysize,
178205b261ecSmrg		   int		dpix,
178305b261ecSmrg		   int		dpiy,
178405b261ecSmrg		   int		width,
178505b261ecSmrg		   int		bpp);
178605b261ecSmrg
17876747b715Smrgextern _X_EXPORT Bool
178805b261ecSmrgfbScreenInit(ScreenPtr	pScreen,
178905b261ecSmrg	     pointer	pbits,
179005b261ecSmrg	     int	xsize,
179105b261ecSmrg	     int	ysize,
179205b261ecSmrg	     int	dpix,
179305b261ecSmrg	     int	dpiy,
179405b261ecSmrg	     int	width,
179505b261ecSmrg	     int	bpp);
179605b261ecSmrg
179705b261ecSmrg/*
179805b261ecSmrg * fbseg.c
179905b261ecSmrg */
180005b261ecSmrgtypedef void	FbBres (DrawablePtr	pDrawable,
180105b261ecSmrg			GCPtr		pGC,
180205b261ecSmrg			int		dashOffset,
180305b261ecSmrg			int		signdx,
180405b261ecSmrg			int		signdy,
180505b261ecSmrg			int		axis,
180605b261ecSmrg			int		x,
180705b261ecSmrg			int		y,
180805b261ecSmrg			int		e,
180905b261ecSmrg			int		e1,
181005b261ecSmrg			int		e3,
181105b261ecSmrg			int		len);
181205b261ecSmrg
18136747b715Smrgextern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash;
181405b261ecSmrg/*
181505b261ecSmrg * fbsetsp.c
181605b261ecSmrg */
181705b261ecSmrg
18186747b715Smrgextern _X_EXPORT void
181905b261ecSmrgfbSetSpans (DrawablePtr	    pDrawable,
182005b261ecSmrg	    GCPtr	    pGC,
182105b261ecSmrg	    char	    *src,
182205b261ecSmrg	    DDXPointPtr	    ppt,
182305b261ecSmrg	    int		    *pwidth,
182405b261ecSmrg	    int		    nspans,
182505b261ecSmrg	    int		    fSorted);
182605b261ecSmrg
18276747b715Smrgextern _X_EXPORT FbBres *
182805b261ecSmrgfbSelectBres (DrawablePtr   pDrawable,
182905b261ecSmrg	      GCPtr	    pGC);
183005b261ecSmrg
18316747b715Smrgextern _X_EXPORT void
183205b261ecSmrgfbBres (DrawablePtr	pDrawable,
183305b261ecSmrg	GCPtr		pGC,
183405b261ecSmrg	int		dashOffset,
183505b261ecSmrg	int		signdx,
183605b261ecSmrg	int		signdy,
183705b261ecSmrg	int		axis,
183805b261ecSmrg	int		x,
183905b261ecSmrg	int		y,
184005b261ecSmrg	int		e,
184105b261ecSmrg	int		e1,
184205b261ecSmrg	int		e3,
184305b261ecSmrg	int		len);
184405b261ecSmrg
18456747b715Smrgextern _X_EXPORT void
184605b261ecSmrgfbSegment (DrawablePtr	pDrawable,
184705b261ecSmrg	   GCPtr	pGC,
184805b261ecSmrg	   int		xa,
184905b261ecSmrg	   int		ya,
185005b261ecSmrg	   int		xb,
185105b261ecSmrg	   int		yb,
185205b261ecSmrg	   Bool		drawLast,
185305b261ecSmrg	   int		*dashOffset);
185405b261ecSmrg
185505b261ecSmrg
185605b261ecSmrg/*
185705b261ecSmrg * fbsolid.c
185805b261ecSmrg */
185905b261ecSmrg
18606747b715Smrgextern _X_EXPORT void
186105b261ecSmrgfbSolid (FbBits	    *dst,
186205b261ecSmrg	 FbStride   dstStride,
186305b261ecSmrg	 int	    dstX,
186405b261ecSmrg	 int	    bpp,
186505b261ecSmrg
186605b261ecSmrg	 int	    width,
186705b261ecSmrg	 int	    height,
186805b261ecSmrg
186905b261ecSmrg	 FbBits	    and,
187005b261ecSmrg	 FbBits	    xor);
187105b261ecSmrg
187205b261ecSmrg#ifdef FB_24BIT
18736747b715Smrgextern _X_EXPORT void
187405b261ecSmrgfbSolid24 (FbBits   *dst,
187505b261ecSmrg	   FbStride dstStride,
187605b261ecSmrg	   int	    dstX,
187705b261ecSmrg
187805b261ecSmrg	   int	    width,
187905b261ecSmrg	   int	    height,
188005b261ecSmrg
188105b261ecSmrg	   FbBits   and,
188205b261ecSmrg	   FbBits   xor);
188305b261ecSmrg#endif
188405b261ecSmrg
188505b261ecSmrg/*
188605b261ecSmrg * fbstipple.c
188705b261ecSmrg */
188805b261ecSmrg
18896747b715Smrgextern _X_EXPORT void
189005b261ecSmrgfbTransparentSpan (FbBits   *dst,
189105b261ecSmrg		   FbBits   stip,
189205b261ecSmrg		   FbBits   fgxor,
189305b261ecSmrg		   int	    n);
189405b261ecSmrg
18956747b715Smrgextern _X_EXPORT void
189605b261ecSmrgfbEvenStipple (FbBits   *dst,
189705b261ecSmrg	       FbStride dstStride,
189805b261ecSmrg	       int	dstX,
189905b261ecSmrg	       int	dstBpp,
190005b261ecSmrg
190105b261ecSmrg	       int	width,
190205b261ecSmrg	       int	height,
190305b261ecSmrg
190405b261ecSmrg	       FbStip   *stip,
190505b261ecSmrg	       FbStride	stipStride,
190605b261ecSmrg	       int	stipHeight,
190705b261ecSmrg
190805b261ecSmrg	       FbBits   fgand,
190905b261ecSmrg	       FbBits   fgxor,
191005b261ecSmrg	       FbBits   bgand,
191105b261ecSmrg	       FbBits   bgxor,
191205b261ecSmrg
191305b261ecSmrg	       int	xRot,
191405b261ecSmrg	       int	yRot);
191505b261ecSmrg
19166747b715Smrgextern _X_EXPORT void
191705b261ecSmrgfbOddStipple (FbBits	*dst,
191805b261ecSmrg	      FbStride	dstStride,
191905b261ecSmrg	      int	dstX,
192005b261ecSmrg	      int	dstBpp,
192105b261ecSmrg
192205b261ecSmrg	      int	width,
192305b261ecSmrg	      int	height,
192405b261ecSmrg
192505b261ecSmrg	      FbStip	*stip,
192605b261ecSmrg	      FbStride	stipStride,
192705b261ecSmrg	      int	stipWidth,
192805b261ecSmrg	      int	stipHeight,
192905b261ecSmrg
193005b261ecSmrg	      FbBits	fgand,
193105b261ecSmrg	      FbBits	fgxor,
193205b261ecSmrg	      FbBits	bgand,
193305b261ecSmrg	      FbBits	bgxor,
193405b261ecSmrg
193505b261ecSmrg	      int	xRot,
193605b261ecSmrg	      int	yRot);
193705b261ecSmrg
19386747b715Smrgextern _X_EXPORT void
193905b261ecSmrgfbStipple (FbBits   *dst,
194005b261ecSmrg	   FbStride dstStride,
194105b261ecSmrg	   int	    dstX,
194205b261ecSmrg	   int	    dstBpp,
194305b261ecSmrg
194405b261ecSmrg	   int	    width,
194505b261ecSmrg	   int	    height,
194605b261ecSmrg
194705b261ecSmrg	   FbStip   *stip,
194805b261ecSmrg	   FbStride stipStride,
194905b261ecSmrg	   int	    stipWidth,
195005b261ecSmrg	   int	    stipHeight,
195105b261ecSmrg	   Bool	    even,
195205b261ecSmrg
195305b261ecSmrg	   FbBits   fgand,
195405b261ecSmrg	   FbBits   fgxor,
195505b261ecSmrg	   FbBits   bgand,
195605b261ecSmrg	   FbBits   bgxor,
195705b261ecSmrg
195805b261ecSmrg	   int	    xRot,
195905b261ecSmrg	   int	    yRot);
196005b261ecSmrg
196105b261ecSmrg/*
196205b261ecSmrg * fbtile.c
196305b261ecSmrg */
196405b261ecSmrg
19656747b715Smrgextern _X_EXPORT void
196605b261ecSmrgfbEvenTile (FbBits	*dst,
196705b261ecSmrg	    FbStride	dstStride,
196805b261ecSmrg	    int		dstX,
196905b261ecSmrg
197005b261ecSmrg	    int		width,
197105b261ecSmrg	    int		height,
197205b261ecSmrg
197305b261ecSmrg	    FbBits	*tile,
197405b261ecSmrg	    FbStride	tileStride,
197505b261ecSmrg	    int		tileHeight,
197605b261ecSmrg
197705b261ecSmrg	    int		alu,
197805b261ecSmrg	    FbBits	pm,
197905b261ecSmrg	    int		xRot,
198005b261ecSmrg	    int		yRot);
198105b261ecSmrg
19826747b715Smrgextern _X_EXPORT void
198305b261ecSmrgfbOddTile (FbBits	*dst,
198405b261ecSmrg	   FbStride	dstStride,
198505b261ecSmrg	   int		dstX,
198605b261ecSmrg
198705b261ecSmrg	   int		width,
198805b261ecSmrg	   int		height,
198905b261ecSmrg
199005b261ecSmrg	   FbBits	*tile,
199105b261ecSmrg	   FbStride	tileStride,
199205b261ecSmrg	   int		tileWidth,
199305b261ecSmrg	   int		tileHeight,
199405b261ecSmrg
199505b261ecSmrg	   int		alu,
199605b261ecSmrg	   FbBits	pm,
199705b261ecSmrg	   int		bpp,
199805b261ecSmrg
199905b261ecSmrg	   int		xRot,
200005b261ecSmrg	   int		yRot);
200105b261ecSmrg
20026747b715Smrgextern _X_EXPORT void
200305b261ecSmrgfbTile (FbBits	    *dst,
200405b261ecSmrg	FbStride    dstStride,
200505b261ecSmrg	int	    dstX,
200605b261ecSmrg
200705b261ecSmrg	int	    width,
200805b261ecSmrg	int	    height,
200905b261ecSmrg
201005b261ecSmrg	FbBits	    *tile,
201105b261ecSmrg	FbStride    tileStride,
201205b261ecSmrg	int	    tileWidth,
201305b261ecSmrg	int	    tileHeight,
201405b261ecSmrg
201505b261ecSmrg	int	    alu,
201605b261ecSmrg	FbBits	    pm,
201705b261ecSmrg	int	    bpp,
201805b261ecSmrg
201905b261ecSmrg	int	    xRot,
202005b261ecSmrg	int	    yRot);
202105b261ecSmrg
202205b261ecSmrg/*
202305b261ecSmrg * fbutil.c
202405b261ecSmrg */
20256747b715Smrgextern _X_EXPORT FbBits
202605b261ecSmrgfbReplicatePixel (Pixel p, int bpp);
202705b261ecSmrg
20286747b715Smrgextern _X_EXPORT void
202905b261ecSmrgfbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp);
203005b261ecSmrg
203105b261ecSmrg#ifdef FB_ACCESS_WRAPPER
20326747b715Smrgextern _X_EXPORT ReadMemoryProcPtr wfbReadMemory;
20336747b715Smrgextern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
203405b261ecSmrg#endif
203505b261ecSmrg
203605b261ecSmrg/*
203705b261ecSmrg * fbwindow.c
203805b261ecSmrg */
203905b261ecSmrg
20406747b715Smrgextern _X_EXPORT Bool
204105b261ecSmrgfbCreateWindow(WindowPtr pWin);
204205b261ecSmrg
20436747b715Smrgextern _X_EXPORT Bool
204405b261ecSmrgfbDestroyWindow(WindowPtr pWin);
204505b261ecSmrg
20466747b715Smrgextern _X_EXPORT Bool
204705b261ecSmrgfbMapWindow(WindowPtr pWindow);
204805b261ecSmrg
20496747b715Smrgextern _X_EXPORT Bool
205005b261ecSmrgfbPositionWindow(WindowPtr pWin, int x, int y);
205105b261ecSmrg
20526747b715Smrgextern _X_EXPORT Bool
205305b261ecSmrgfbUnmapWindow(WindowPtr pWindow);
205405b261ecSmrg
20556747b715Smrgextern _X_EXPORT void
205605b261ecSmrgfbCopyWindowProc (DrawablePtr	pSrcDrawable,
205705b261ecSmrg		  DrawablePtr	pDstDrawable,
205805b261ecSmrg		  GCPtr		pGC,
205905b261ecSmrg		  BoxPtr	pbox,
206005b261ecSmrg		  int		nbox,
206105b261ecSmrg		  int		dx,
206205b261ecSmrg		  int		dy,
206305b261ecSmrg		  Bool		reverse,
206405b261ecSmrg		  Bool		upsidedown,
206505b261ecSmrg		  Pixel		bitplane,
206605b261ecSmrg		  void		*closure);
206705b261ecSmrg
20686747b715Smrgextern _X_EXPORT void
206905b261ecSmrgfbCopyWindow(WindowPtr	    pWin,
207005b261ecSmrg	     DDXPointRec    ptOldOrg,
207105b261ecSmrg	     RegionPtr	    prgnSrc);
207205b261ecSmrg
20736747b715Smrgextern _X_EXPORT Bool
207405b261ecSmrgfbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
207505b261ecSmrg
20766747b715Smrgextern _X_EXPORT void
207705b261ecSmrgfbFillRegionSolid (DrawablePtr	pDrawable,
207805b261ecSmrg		   RegionPtr	pRegion,
207905b261ecSmrg		   FbBits	and,
208005b261ecSmrg		   FbBits	xor);
208105b261ecSmrg
20826747b715Smrgextern _X_EXPORT pixman_image_t *
20836747b715Smrgimage_from_pict (PicturePtr	pict,
20846747b715Smrg		 Bool		has_clip,
20856747b715Smrg		 int		*xoff,
20866747b715Smrg		 int		*yoff);
20876747b715Smrg
20886747b715Smrgextern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
208905b261ecSmrg
209005b261ecSmrg#endif /* _FB_H_ */
209105b261ecSmrg
2092