fb.h revision 9ace9065
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    	evenStipple;	/* stipple is even */
67005b261ecSmrg    unsigned char    	bpp;		/* current drawable bpp */
67105b261ecSmrg} FbGCPrivRec, *FbGCPrivPtr;
67205b261ecSmrg
67305b261ecSmrg#define fbGetGCPrivate(pGC)	((FbGCPrivPtr)\
6746747b715Smrg				 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey()))
67505b261ecSmrg
67605b261ecSmrg#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
67705b261ecSmrg#define fbGetExpose(pGC)	((pGC)->fExpose)
67805b261ecSmrg#define fbGetFreeCompClip(pGC)	((pGC)->freeCompClip)
67905b261ecSmrg#define fbGetRotatedPixmap(pGC)	((pGC)->pRotatedPixmap)
68005b261ecSmrg
68105b261ecSmrg#define fbGetScreenPixmap(s)	((PixmapPtr) (s)->devPrivate)
68205b261ecSmrg#define fbGetWindowPixmap(pWin)	((PixmapPtr)\
6836747b715Smrg				 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey()))
68405b261ecSmrg
68505b261ecSmrg#ifdef ROOTLESS
68605b261ecSmrg#define __fbPixDrawableX(pPix)	((pPix)->drawable.x)
68705b261ecSmrg#define __fbPixDrawableY(pPix)	((pPix)->drawable.y)
68805b261ecSmrg#else
68905b261ecSmrg#define __fbPixDrawableX(pPix)	0
69005b261ecSmrg#define __fbPixDrawableY(pPix)	0
69105b261ecSmrg#endif
69205b261ecSmrg
69305b261ecSmrg#ifdef COMPOSITE
69405b261ecSmrg#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix) - (pPix)->screen_x)
69505b261ecSmrg#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix) - (pPix)->screen_y)
69605b261ecSmrg#else
69705b261ecSmrg#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix))
69805b261ecSmrg#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix))
69905b261ecSmrg#endif
70005b261ecSmrg#define __fbPixOffXPix(pPix)	(__fbPixDrawableX(pPix))
70105b261ecSmrg#define __fbPixOffYPix(pPix)	(__fbPixDrawableY(pPix))
70205b261ecSmrg
7036747b715Smrg#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) {			\
7046747b715Smrg    if ((pDrawable)->type != DRAWABLE_PIXMAP) { 				\
7056747b715Smrg	(pixmap) = fbGetWindowPixmap(pDrawable);				\
7066747b715Smrg	(xoff) = __fbPixOffXWin(pixmap); 					\
7076747b715Smrg	(yoff) = __fbPixOffYWin(pixmap); 					\
7086747b715Smrg    } else { 									\
7096747b715Smrg	(pixmap) = (PixmapPtr) (pDrawable);					\
7106747b715Smrg	(xoff) = __fbPixOffXPix(pixmap); 					\
7116747b715Smrg	(yoff) = __fbPixOffYPix(pixmap); 					\
7126747b715Smrg    } 										\
7136747b715Smrg    fbPrepareAccess(pDrawable); 						\
71405b261ecSmrg}
71505b261ecSmrg
7166747b715Smrg#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) {			\
7176747b715Smrg    (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; 			       	\
7186747b715Smrg    (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride);	\
7196747b715Smrg    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
7206747b715Smrg}
7216747b715Smrg
7226747b715Smrg#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) {			\
7236747b715Smrg    (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; 			       	\
7246747b715Smrg    (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride);	\
7256747b715Smrg    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
7266747b715Smrg}
7276747b715Smrg
7286747b715Smrg#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 		\
7296747b715Smrg    PixmapPtr   _pPix; 								\
7306747b715Smrg    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); 				\
7316747b715Smrg    fbGetPixmapBitsData(_pPix, pointer, stride, bpp);				\
7326747b715Smrg}
7336747b715Smrg
7346747b715Smrg#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 	\
7356747b715Smrg    PixmapPtr   _pPix; 								\
7366747b715Smrg    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff);				\
7376747b715Smrg    fbGetPixmapStipData(_pPix, pointer, stride, bpp);				\
73805b261ecSmrg}
73905b261ecSmrg
74005b261ecSmrg/*
74105b261ecSmrg * XFree86 empties the root BorderClip when the VT is inactive,
74205b261ecSmrg * here's a macro which uses that to disable GetImage and GetSpans
74305b261ecSmrg */
74405b261ecSmrg
74505b261ecSmrg#define fbWindowEnabled(pWin) \
7466747b715Smrg    RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip)
74705b261ecSmrg
74805b261ecSmrg#define fbDrawableEnabled(pDrawable) \
74905b261ecSmrg    ((pDrawable)->type == DRAWABLE_PIXMAP ? \
75005b261ecSmrg     TRUE : fbWindowEnabled((WindowPtr) pDrawable))
75105b261ecSmrg
75205b261ecSmrg#define FbPowerOfTwo(w)	    (((w) & ((w) - 1)) == 0)
75305b261ecSmrg/*
75405b261ecSmrg * Accelerated tiles are power of 2 width <= FB_UNIT
75505b261ecSmrg */
75605b261ecSmrg#define FbEvenTile(w)	    ((w) <= FB_UNIT && FbPowerOfTwo(w))
75705b261ecSmrg/*
75805b261ecSmrg * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp
75905b261ecSmrg * with dstBpp a power of 2 as well
76005b261ecSmrg */
76105b261ecSmrg#define FbEvenStip(w,bpp)   ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp))
76205b261ecSmrg
76305b261ecSmrg/*
76405b261ecSmrg * fb24_32.c
76505b261ecSmrg */
7666747b715Smrgextern _X_EXPORT void
76705b261ecSmrgfb24_32GetSpans(DrawablePtr	pDrawable,
76805b261ecSmrg		int		wMax,
76905b261ecSmrg		DDXPointPtr	ppt,
77005b261ecSmrg		int		*pwidth,
77105b261ecSmrg		int		nspans,
77205b261ecSmrg		char		*pchardstStart);
77305b261ecSmrg
7746747b715Smrgextern _X_EXPORT void
77505b261ecSmrgfb24_32SetSpans (DrawablePtr	    pDrawable,
77605b261ecSmrg		 GCPtr		    pGC,
77705b261ecSmrg		 char		    *src,
77805b261ecSmrg		 DDXPointPtr	    ppt,
77905b261ecSmrg		 int		    *pwidth,
78005b261ecSmrg		 int		    nspans,
78105b261ecSmrg		 int		    fSorted);
78205b261ecSmrg
7836747b715Smrgextern _X_EXPORT void
78405b261ecSmrgfb24_32PutZImage (DrawablePtr	pDrawable,
78505b261ecSmrg		  RegionPtr	pClip,
78605b261ecSmrg		  int		alu,
78705b261ecSmrg		  FbBits	pm,
78805b261ecSmrg		  int		x,
78905b261ecSmrg		  int		y,
79005b261ecSmrg		  int		width,
79105b261ecSmrg		  int		height,
79205b261ecSmrg		  CARD8		*src,
79305b261ecSmrg		  FbStride	srcStride);
79405b261ecSmrg
7956747b715Smrgextern _X_EXPORT void
79605b261ecSmrgfb24_32GetImage (DrawablePtr     pDrawable,
79705b261ecSmrg		 int             x,
79805b261ecSmrg		 int             y,
79905b261ecSmrg		 int             w,
80005b261ecSmrg		 int             h,
80105b261ecSmrg		 unsigned int    format,
80205b261ecSmrg		 unsigned long   planeMask,
80305b261ecSmrg		 char            *d);
80405b261ecSmrg
8056747b715Smrgextern _X_EXPORT void
80605b261ecSmrgfb24_32CopyMtoN (DrawablePtr pSrcDrawable,
80705b261ecSmrg		 DrawablePtr pDstDrawable,
80805b261ecSmrg		 GCPtr       pGC,
80905b261ecSmrg		 BoxPtr      pbox,
81005b261ecSmrg		 int         nbox,
81105b261ecSmrg		 int         dx,
81205b261ecSmrg		 int         dy,
81305b261ecSmrg		 Bool        reverse,
81405b261ecSmrg		 Bool        upsidedown,
81505b261ecSmrg		 Pixel       bitplane,
81605b261ecSmrg		 void        *closure);
81705b261ecSmrg
8186747b715Smrgextern _X_EXPORT PixmapPtr
81905b261ecSmrgfb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel);
82005b261ecSmrg
8216747b715Smrgextern _X_EXPORT Bool
82205b261ecSmrgfb24_32CreateScreenResources(ScreenPtr pScreen);
82305b261ecSmrg
8246747b715Smrgextern _X_EXPORT Bool
82505b261ecSmrgfb24_32ModifyPixmapHeader (PixmapPtr   pPixmap,
82605b261ecSmrg			   int         width,
82705b261ecSmrg			   int         height,
82805b261ecSmrg			   int         depth,
82905b261ecSmrg			   int         bitsPerPixel,
83005b261ecSmrg			   int         devKind,
83105b261ecSmrg			   pointer     pPixData);
83205b261ecSmrg
83305b261ecSmrg/*
83405b261ecSmrg * fballpriv.c
83505b261ecSmrg */
8366747b715Smrgextern _X_EXPORT Bool
8374642e01fSmrgfbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCIndex);
83805b261ecSmrg
83905b261ecSmrg/*
84005b261ecSmrg * fbarc.c
84105b261ecSmrg */
84205b261ecSmrg
8436747b715Smrgextern _X_EXPORT void
84405b261ecSmrgfbPolyArc (DrawablePtr	pDrawable,
84505b261ecSmrg	   GCPtr	pGC,
84605b261ecSmrg	   int		narcs,
84705b261ecSmrg	   xArc		*parcs);
84805b261ecSmrg
84905b261ecSmrg/*
85005b261ecSmrg * fbbits.c
85105b261ecSmrg */
85205b261ecSmrg
8536747b715Smrgextern _X_EXPORT void
85405b261ecSmrgfbBresSolid8(DrawablePtr    pDrawable,
85505b261ecSmrg	     GCPtr	    pGC,
85605b261ecSmrg	     int	    dashOffset,
85705b261ecSmrg	     int	    signdx,
85805b261ecSmrg	     int	    signdy,
85905b261ecSmrg	     int	    axis,
86005b261ecSmrg	     int	    x,
86105b261ecSmrg	     int	    y,
86205b261ecSmrg	     int	    e,
86305b261ecSmrg	     int	    e1,
86405b261ecSmrg	     int	    e3,
86505b261ecSmrg	     int	    len);
86605b261ecSmrg
8676747b715Smrgextern _X_EXPORT void
86805b261ecSmrgfbBresDash8 (DrawablePtr    pDrawable,
86905b261ecSmrg	     GCPtr	    pGC,
87005b261ecSmrg	     int	    dashOffset,
87105b261ecSmrg	     int	    signdx,
87205b261ecSmrg	     int	    signdy,
87305b261ecSmrg	     int	    axis,
87405b261ecSmrg	     int	    x,
87505b261ecSmrg	     int	    y,
87605b261ecSmrg	     int	    e,
87705b261ecSmrg	     int	    e1,
87805b261ecSmrg	     int	    e3,
87905b261ecSmrg	     int	    len);
88005b261ecSmrg
8816747b715Smrgextern _X_EXPORT void
88205b261ecSmrgfbDots8 (FbBits	    *dst,
88305b261ecSmrg	 FbStride   dstStride,
88405b261ecSmrg	 int	    dstBpp,
88505b261ecSmrg	 BoxPtr	    pBox,
88605b261ecSmrg	 xPoint	    *pts,
88705b261ecSmrg	 int	    npt,
88805b261ecSmrg	 int	    xorg,
88905b261ecSmrg	 int	    yorg,
89005b261ecSmrg	 int	    xoff,
89105b261ecSmrg	 int	    yoff,
89205b261ecSmrg	 FbBits	    and,
89305b261ecSmrg	 FbBits	    xor);
89405b261ecSmrg
8956747b715Smrgextern _X_EXPORT void
89605b261ecSmrgfbArc8 (FbBits	    *dst,
89705b261ecSmrg	FbStride    dstStride,
89805b261ecSmrg	int	    dstBpp,
89905b261ecSmrg	xArc	    *arc,
90005b261ecSmrg	int	    dx,
90105b261ecSmrg	int	    dy,
90205b261ecSmrg	FbBits	    and,
90305b261ecSmrg	FbBits	    xor);
90405b261ecSmrg
9056747b715Smrgextern _X_EXPORT void
90605b261ecSmrgfbGlyph8 (FbBits    *dstLine,
90705b261ecSmrg	  FbStride  dstStride,
90805b261ecSmrg	  int	    dstBpp,
90905b261ecSmrg	  FbStip    *stipple,
91005b261ecSmrg	  FbBits    fg,
91105b261ecSmrg	  int	    height,
91205b261ecSmrg	  int	    shift);
91305b261ecSmrg
9146747b715Smrgextern _X_EXPORT void
91505b261ecSmrgfbPolyline8 (DrawablePtr    pDrawable,
91605b261ecSmrg	     GCPtr	    pGC,
91705b261ecSmrg	     int	    mode,
91805b261ecSmrg	     int	    npt,
91905b261ecSmrg	     DDXPointPtr    ptsOrig);
92005b261ecSmrg
9216747b715Smrgextern _X_EXPORT void
92205b261ecSmrgfbPolySegment8 (DrawablePtr pDrawable,
92305b261ecSmrg		GCPtr	    pGC,
92405b261ecSmrg		int	    nseg,
92505b261ecSmrg		xSegment    *pseg);
92605b261ecSmrg
9276747b715Smrgextern _X_EXPORT void
92805b261ecSmrgfbBresSolid16(DrawablePtr   pDrawable,
92905b261ecSmrg	      GCPtr	    pGC,
93005b261ecSmrg	      int	    dashOffset,
93105b261ecSmrg	      int	    signdx,
93205b261ecSmrg	      int	    signdy,
93305b261ecSmrg	      int	    axis,
93405b261ecSmrg	      int	    x,
93505b261ecSmrg	      int	    y,
93605b261ecSmrg	      int	    e,
93705b261ecSmrg	      int	    e1,
93805b261ecSmrg	      int	    e3,
93905b261ecSmrg	      int	    len);
94005b261ecSmrg
9416747b715Smrgextern _X_EXPORT void
94205b261ecSmrgfbBresDash16(DrawablePtr    pDrawable,
94305b261ecSmrg	     GCPtr	    pGC,
94405b261ecSmrg	     int	    dashOffset,
94505b261ecSmrg	     int	    signdx,
94605b261ecSmrg	     int	    signdy,
94705b261ecSmrg	     int	    axis,
94805b261ecSmrg	     int	    x,
94905b261ecSmrg	     int	    y,
95005b261ecSmrg	     int	    e,
95105b261ecSmrg	     int	    e1,
95205b261ecSmrg	     int	    e3,
95305b261ecSmrg	     int	    len);
95405b261ecSmrg
9556747b715Smrgextern _X_EXPORT void
95605b261ecSmrgfbDots16(FbBits	    *dst,
95705b261ecSmrg	 FbStride   dstStride,
95805b261ecSmrg	 int	    dstBpp,
95905b261ecSmrg	 BoxPtr	    pBox,
96005b261ecSmrg	 xPoint	    *pts,
96105b261ecSmrg	 int	    npt,
96205b261ecSmrg	 int	    xorg,
96305b261ecSmrg	 int	    yorg,
96405b261ecSmrg	 int	    xoff,
96505b261ecSmrg	 int	    yoff,
96605b261ecSmrg	 FbBits	    and,
96705b261ecSmrg	 FbBits	    xor);
96805b261ecSmrg
9696747b715Smrgextern _X_EXPORT void
97005b261ecSmrgfbArc16(FbBits	    *dst,
97105b261ecSmrg	FbStride    dstStride,
97205b261ecSmrg	int	    dstBpp,
97305b261ecSmrg	xArc	    *arc,
97405b261ecSmrg	int	    dx,
97505b261ecSmrg	int	    dy,
97605b261ecSmrg	FbBits	    and,
97705b261ecSmrg	FbBits	    xor);
97805b261ecSmrg
9796747b715Smrgextern _X_EXPORT void
98005b261ecSmrgfbGlyph16(FbBits    *dstLine,
98105b261ecSmrg	  FbStride  dstStride,
98205b261ecSmrg	  int	    dstBpp,
98305b261ecSmrg	  FbStip    *stipple,
98405b261ecSmrg	  FbBits    fg,
98505b261ecSmrg	  int	    height,
98605b261ecSmrg	  int	    shift);
98705b261ecSmrg
9886747b715Smrgextern _X_EXPORT void
98905b261ecSmrgfbPolyline16 (DrawablePtr   pDrawable,
99005b261ecSmrg	      GCPtr	    pGC,
99105b261ecSmrg	      int	    mode,
99205b261ecSmrg	      int	    npt,
99305b261ecSmrg	      DDXPointPtr   ptsOrig);
99405b261ecSmrg
9956747b715Smrgextern _X_EXPORT void
99605b261ecSmrgfbPolySegment16 (DrawablePtr	pDrawable,
99705b261ecSmrg		 GCPtr		pGC,
99805b261ecSmrg		 int		nseg,
99905b261ecSmrg		 xSegment	*pseg);
100005b261ecSmrg
100105b261ecSmrg
10026747b715Smrgextern _X_EXPORT void
100305b261ecSmrgfbBresSolid24(DrawablePtr   pDrawable,
100405b261ecSmrg	      GCPtr	    pGC,
100505b261ecSmrg	      int	    dashOffset,
100605b261ecSmrg	      int	    signdx,
100705b261ecSmrg	      int	    signdy,
100805b261ecSmrg	      int	    axis,
100905b261ecSmrg	      int	    x,
101005b261ecSmrg	      int	    y,
101105b261ecSmrg	      int	    e,
101205b261ecSmrg	      int	    e1,
101305b261ecSmrg	      int	    e3,
101405b261ecSmrg	      int	    len);
101505b261ecSmrg
10166747b715Smrgextern _X_EXPORT void
101705b261ecSmrgfbBresDash24(DrawablePtr    pDrawable,
101805b261ecSmrg	     GCPtr	    pGC,
101905b261ecSmrg	     int	    dashOffset,
102005b261ecSmrg	     int	    signdx,
102105b261ecSmrg	     int	    signdy,
102205b261ecSmrg	     int	    axis,
102305b261ecSmrg	     int	    x,
102405b261ecSmrg	     int	    y,
102505b261ecSmrg	     int	    e,
102605b261ecSmrg	     int	    e1,
102705b261ecSmrg	     int	    e3,
102805b261ecSmrg	     int	    len);
102905b261ecSmrg
10306747b715Smrgextern _X_EXPORT void
103105b261ecSmrgfbDots24(FbBits	    *dst,
103205b261ecSmrg	 FbStride   dstStride,
103305b261ecSmrg	 int	    dstBpp,
103405b261ecSmrg	 BoxPtr	    pBox,
103505b261ecSmrg	 xPoint	    *pts,
103605b261ecSmrg	 int	    npt,
103705b261ecSmrg	 int	    xorg,
103805b261ecSmrg	 int	    yorg,
103905b261ecSmrg	 int	    xoff,
104005b261ecSmrg	 int	    yoff,
104105b261ecSmrg	 FbBits	    and,
104205b261ecSmrg	 FbBits	    xor);
104305b261ecSmrg
10446747b715Smrgextern _X_EXPORT void
104505b261ecSmrgfbArc24(FbBits	    *dst,
104605b261ecSmrg	FbStride    dstStride,
104705b261ecSmrg	int	    dstBpp,
104805b261ecSmrg	xArc	    *arc,
104905b261ecSmrg	int	    dx,
105005b261ecSmrg	int	    dy,
105105b261ecSmrg	FbBits	    and,
105205b261ecSmrg	FbBits	    xor);
105305b261ecSmrg
10546747b715Smrgextern _X_EXPORT void
105505b261ecSmrgfbGlyph24(FbBits    *dstLine,
105605b261ecSmrg	  FbStride  dstStride,
105705b261ecSmrg	  int	    dstBpp,
105805b261ecSmrg	  FbStip    *stipple,
105905b261ecSmrg	  FbBits    fg,
106005b261ecSmrg	  int	    height,
106105b261ecSmrg	  int	    shift);
106205b261ecSmrg
10636747b715Smrgextern _X_EXPORT void
106405b261ecSmrgfbPolyline24 (DrawablePtr   pDrawable,
106505b261ecSmrg	      GCPtr	    pGC,
106605b261ecSmrg	      int	    mode,
106705b261ecSmrg	      int	    npt,
106805b261ecSmrg	      DDXPointPtr   ptsOrig);
106905b261ecSmrg
10706747b715Smrgextern _X_EXPORT void
107105b261ecSmrgfbPolySegment24 (DrawablePtr	pDrawable,
107205b261ecSmrg		 GCPtr		pGC,
107305b261ecSmrg		 int		nseg,
107405b261ecSmrg		 xSegment	*pseg);
107505b261ecSmrg
107605b261ecSmrg
10776747b715Smrgextern _X_EXPORT void
107805b261ecSmrgfbBresSolid32(DrawablePtr   pDrawable,
107905b261ecSmrg	      GCPtr	    pGC,
108005b261ecSmrg	      int	    dashOffset,
108105b261ecSmrg	      int	    signdx,
108205b261ecSmrg	      int	    signdy,
108305b261ecSmrg	      int	    axis,
108405b261ecSmrg	      int	    x,
108505b261ecSmrg	      int	    y,
108605b261ecSmrg	      int	    e,
108705b261ecSmrg	      int	    e1,
108805b261ecSmrg	      int	    e3,
108905b261ecSmrg	      int	    len);
109005b261ecSmrg
10916747b715Smrgextern _X_EXPORT void
109205b261ecSmrgfbBresDash32(DrawablePtr    pDrawable,
109305b261ecSmrg	     GCPtr	    pGC,
109405b261ecSmrg	     int	    dashOffset,
109505b261ecSmrg	     int	    signdx,
109605b261ecSmrg	     int	    signdy,
109705b261ecSmrg	     int	    axis,
109805b261ecSmrg	     int	    x,
109905b261ecSmrg	     int	    y,
110005b261ecSmrg	     int	    e,
110105b261ecSmrg	     int	    e1,
110205b261ecSmrg	     int	    e3,
110305b261ecSmrg	     int	    len);
110405b261ecSmrg
11056747b715Smrgextern _X_EXPORT void
110605b261ecSmrgfbDots32(FbBits	    *dst,
110705b261ecSmrg	 FbStride   dstStride,
110805b261ecSmrg	 int	    dstBpp,
110905b261ecSmrg	 BoxPtr	    pBox,
111005b261ecSmrg	 xPoint	    *pts,
111105b261ecSmrg	 int	    npt,
111205b261ecSmrg	 int	    xorg,
111305b261ecSmrg	 int	    yorg,
111405b261ecSmrg	 int	    xoff,
111505b261ecSmrg	 int	    yoff,
111605b261ecSmrg	 FbBits	    and,
111705b261ecSmrg	 FbBits	    xor);
111805b261ecSmrg
11196747b715Smrgextern _X_EXPORT void
112005b261ecSmrgfbArc32(FbBits	    *dst,
112105b261ecSmrg	FbStride    dstStride,
112205b261ecSmrg	int	    dstBpp,
112305b261ecSmrg	xArc	    *arc,
112405b261ecSmrg	int	    dx,
112505b261ecSmrg	int	    dy,
112605b261ecSmrg	FbBits	    and,
112705b261ecSmrg	FbBits	    xor);
112805b261ecSmrg
11296747b715Smrgextern _X_EXPORT void
113005b261ecSmrgfbGlyph32(FbBits    *dstLine,
113105b261ecSmrg	  FbStride  dstStride,
113205b261ecSmrg	  int	    dstBpp,
113305b261ecSmrg	  FbStip    *stipple,
113405b261ecSmrg	  FbBits    fg,
113505b261ecSmrg	  int	    height,
113605b261ecSmrg	  int	    shift);
11376747b715Smrgextern _X_EXPORT void
113805b261ecSmrgfbPolyline32 (DrawablePtr   pDrawable,
113905b261ecSmrg	      GCPtr	    pGC,
114005b261ecSmrg	      int	    mode,
114105b261ecSmrg	      int	    npt,
114205b261ecSmrg	      DDXPointPtr   ptsOrig);
114305b261ecSmrg
11446747b715Smrgextern _X_EXPORT void
114505b261ecSmrgfbPolySegment32 (DrawablePtr	pDrawable,
114605b261ecSmrg		 GCPtr		pGC,
114705b261ecSmrg		 int		nseg,
114805b261ecSmrg		 xSegment	*pseg);
114905b261ecSmrg
115005b261ecSmrg/*
115105b261ecSmrg * fbblt.c
115205b261ecSmrg */
11536747b715Smrgextern _X_EXPORT void
115405b261ecSmrgfbBlt (FbBits   *src,
115505b261ecSmrg       FbStride	srcStride,
115605b261ecSmrg       int	srcX,
115705b261ecSmrg
115805b261ecSmrg       FbBits   *dst,
115905b261ecSmrg       FbStride dstStride,
116005b261ecSmrg       int	dstX,
116105b261ecSmrg
116205b261ecSmrg       int	width,
116305b261ecSmrg       int	height,
116405b261ecSmrg
116505b261ecSmrg       int	alu,
116605b261ecSmrg       FbBits	pm,
116705b261ecSmrg       int	bpp,
116805b261ecSmrg
116905b261ecSmrg       Bool	reverse,
117005b261ecSmrg       Bool	upsidedown);
117105b261ecSmrg
11726747b715Smrgextern _X_EXPORT void
117305b261ecSmrgfbBlt24 (FbBits	    *srcLine,
117405b261ecSmrg	 FbStride   srcStride,
117505b261ecSmrg	 int	    srcX,
117605b261ecSmrg
117705b261ecSmrg	 FbBits	    *dstLine,
117805b261ecSmrg	 FbStride   dstStride,
117905b261ecSmrg	 int	    dstX,
118005b261ecSmrg
118105b261ecSmrg	 int	    width,
118205b261ecSmrg	 int	    height,
118305b261ecSmrg
118405b261ecSmrg	 int	    alu,
118505b261ecSmrg	 FbBits	    pm,
118605b261ecSmrg
118705b261ecSmrg	 Bool	    reverse,
118805b261ecSmrg	 Bool	    upsidedown);
118905b261ecSmrg
11906747b715Smrgextern _X_EXPORT void
119105b261ecSmrgfbBltStip (FbStip   *src,
119205b261ecSmrg	   FbStride srcStride,	    /* in FbStip units, not FbBits units */
119305b261ecSmrg	   int	    srcX,
119405b261ecSmrg
119505b261ecSmrg	   FbStip   *dst,
119605b261ecSmrg	   FbStride dstStride,	    /* in FbStip units, not FbBits units */
119705b261ecSmrg	   int	    dstX,
119805b261ecSmrg
119905b261ecSmrg	   int	    width,
120005b261ecSmrg	   int	    height,
120105b261ecSmrg
120205b261ecSmrg	   int	    alu,
120305b261ecSmrg	   FbBits   pm,
120405b261ecSmrg	   int	    bpp);
120505b261ecSmrg
120605b261ecSmrg/*
120705b261ecSmrg * fbbltone.c
120805b261ecSmrg */
12096747b715Smrgextern _X_EXPORT void
121005b261ecSmrgfbBltOne (FbStip   *src,
121105b261ecSmrg	  FbStride srcStride,
121205b261ecSmrg	  int	   srcX,
121305b261ecSmrg	  FbBits   *dst,
121405b261ecSmrg	  FbStride dstStride,
121505b261ecSmrg	  int	   dstX,
121605b261ecSmrg	  int	   dstBpp,
121705b261ecSmrg
121805b261ecSmrg	  int	   width,
121905b261ecSmrg	  int	   height,
122005b261ecSmrg
122105b261ecSmrg	  FbBits   fgand,
122205b261ecSmrg	  FbBits   fbxor,
122305b261ecSmrg	  FbBits   bgand,
122405b261ecSmrg	  FbBits   bgxor);
122505b261ecSmrg
122605b261ecSmrg#ifdef FB_24BIT
12276747b715Smrgextern _X_EXPORT void
122805b261ecSmrgfbBltOne24 (FbStip    *src,
122905b261ecSmrg	  FbStride  srcStride,	    /* FbStip units per scanline */
123005b261ecSmrg	  int	    srcX,	    /* bit position of source */
123105b261ecSmrg	  FbBits    *dst,
123205b261ecSmrg	  FbStride  dstStride,	    /* FbBits units per scanline */
123305b261ecSmrg	  int	    dstX,	    /* bit position of dest */
123405b261ecSmrg	  int	    dstBpp,	    /* bits per destination unit */
123505b261ecSmrg
123605b261ecSmrg	  int	    width,	    /* width in bits of destination */
123705b261ecSmrg	  int	    height,	    /* height in scanlines */
123805b261ecSmrg
123905b261ecSmrg	  FbBits    fgand,	    /* rrop values */
124005b261ecSmrg	  FbBits    fgxor,
124105b261ecSmrg	  FbBits    bgand,
124205b261ecSmrg	  FbBits    bgxor);
124305b261ecSmrg#endif
124405b261ecSmrg
12456747b715Smrgextern _X_EXPORT void
124605b261ecSmrgfbBltPlane (FbBits	    *src,
124705b261ecSmrg	    FbStride	    srcStride,
124805b261ecSmrg	    int		    srcX,
124905b261ecSmrg	    int		    srcBpp,
125005b261ecSmrg
125105b261ecSmrg	    FbStip	    *dst,
125205b261ecSmrg	    FbStride	    dstStride,
125305b261ecSmrg	    int		    dstX,
125405b261ecSmrg
125505b261ecSmrg	    int		    width,
125605b261ecSmrg	    int		    height,
125705b261ecSmrg
125805b261ecSmrg	    FbStip	    fgand,
125905b261ecSmrg	    FbStip	    fgxor,
126005b261ecSmrg	    FbStip	    bgand,
126105b261ecSmrg	    FbStip	    bgxor,
126205b261ecSmrg	    Pixel	    planeMask);
126305b261ecSmrg
126405b261ecSmrg/*
12659ace9065Smrg * fbcmap_mi.c
126605b261ecSmrg */
12676747b715Smrgextern _X_EXPORT int
126805b261ecSmrgfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps);
126905b261ecSmrg
12706747b715Smrgextern _X_EXPORT void
127105b261ecSmrgfbInstallColormap(ColormapPtr pmap);
127205b261ecSmrg
12736747b715Smrgextern _X_EXPORT void
127405b261ecSmrgfbUninstallColormap(ColormapPtr pmap);
127505b261ecSmrg
12766747b715Smrgextern _X_EXPORT void
127705b261ecSmrgfbResolveColor(unsigned short	*pred,
127805b261ecSmrg	       unsigned short	*pgreen,
127905b261ecSmrg	       unsigned short	*pblue,
128005b261ecSmrg	       VisualPtr	pVisual);
128105b261ecSmrg
12826747b715Smrgextern _X_EXPORT Bool
128305b261ecSmrgfbInitializeColormap(ColormapPtr pmap);
128405b261ecSmrg
12856747b715Smrgextern _X_EXPORT int
128605b261ecSmrgfbExpandDirectColors (ColormapPtr   pmap,
128705b261ecSmrg		      int	    ndef,
128805b261ecSmrg		      xColorItem    *indefs,
128905b261ecSmrg		      xColorItem    *outdefs);
129005b261ecSmrg
12916747b715Smrgextern _X_EXPORT Bool
129205b261ecSmrgfbCreateDefColormap(ScreenPtr pScreen);
129305b261ecSmrg
12946747b715Smrgextern _X_EXPORT void
129505b261ecSmrgfbClearVisualTypes(void);
129605b261ecSmrg
12976747b715Smrgextern _X_EXPORT Bool
129805b261ecSmrgfbHasVisualTypes (int depth);
129905b261ecSmrg
13006747b715Smrgextern _X_EXPORT Bool
130105b261ecSmrgfbSetVisualTypes (int depth, int visuals, int bitsPerRGB);
130205b261ecSmrg
13036747b715Smrgextern _X_EXPORT Bool
130405b261ecSmrgfbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
130505b261ecSmrg			  Pixel redMask, Pixel greenMask, Pixel blueMask);
130605b261ecSmrg
13076747b715Smrgextern _X_EXPORT Bool
130805b261ecSmrgfbInitVisuals (VisualPtr    *visualp,
130905b261ecSmrg	       DepthPtr	    *depthp,
131005b261ecSmrg	       int	    *nvisualp,
131105b261ecSmrg	       int	    *ndepthp,
131205b261ecSmrg	       int	    *rootDepthp,
131305b261ecSmrg	       VisualID	    *defaultVisp,
131405b261ecSmrg	       unsigned long	sizes,
131505b261ecSmrg	       int	    bitsPerRGB);
131605b261ecSmrg
131705b261ecSmrg/*
131805b261ecSmrg * fbcopy.c
131905b261ecSmrg */
132005b261ecSmrg
13216747b715Smrg/* Compatibility definition, to be removed at next ABI change. */
13226747b715Smrgtypedef void   (*fbCopyProc) (DrawablePtr  pSrcDrawable,
13236747b715Smrg                              DrawablePtr  pDstDrawable,
13246747b715Smrg                              GCPtr        pGC,
13256747b715Smrg                              BoxPtr       pDstBox,
13266747b715Smrg                              int          nbox,
13276747b715Smrg                              int          dx,
13286747b715Smrg                              int          dy,
13296747b715Smrg                              Bool         reverse,
13306747b715Smrg                              Bool         upsidedown,
13316747b715Smrg                              Pixel        bitplane,
13326747b715Smrg                              void         *closure);
13336747b715Smrg
13346747b715Smrgextern _X_EXPORT void
133505b261ecSmrgfbCopyNtoN (DrawablePtr	pSrcDrawable,
133605b261ecSmrg	    DrawablePtr	pDstDrawable,
133705b261ecSmrg	    GCPtr	pGC,
133805b261ecSmrg	    BoxPtr	pbox,
133905b261ecSmrg	    int		nbox,
134005b261ecSmrg	    int		dx,
134105b261ecSmrg	    int		dy,
134205b261ecSmrg	    Bool	reverse,
134305b261ecSmrg	    Bool	upsidedown,
134405b261ecSmrg	    Pixel	bitplane,
134505b261ecSmrg	    void	*closure);
134605b261ecSmrg
13476747b715Smrg/* Compatibility wrapper, to be removed at next ABI change. */
13486747b715Smrgextern _X_EXPORT void
13496747b715SmrgfbCopyRegion (DrawablePtr   pSrcDrawable,
13506747b715Smrg             DrawablePtr   pDstDrawable,
13516747b715Smrg             GCPtr         pGC,
13526747b715Smrg             RegionPtr     pDstRegion,
13536747b715Smrg             int           dx,
13546747b715Smrg             int           dy,
13556747b715Smrg             fbCopyProc    copyProc,
13566747b715Smrg             Pixel         bitPlane,
13576747b715Smrg             void          *closure);
13586747b715Smrg
13596747b715Smrg/* Compatibility wrapper, to be removed at next ABI change. */
13606747b715Smrgextern _X_EXPORT RegionPtr
13616747b715SmrgfbDoCopy (DrawablePtr  pSrcDrawable,
13626747b715Smrg         DrawablePtr   pDstDrawable,
13636747b715Smrg         GCPtr         pGC,
13646747b715Smrg         int           xIn,
13656747b715Smrg         int           yIn,
13666747b715Smrg         int           widthSrc,
13676747b715Smrg         int           heightSrc,
13686747b715Smrg         int           xOut,
13696747b715Smrg         int           yOut,
13706747b715Smrg         fbCopyProc    copyProc,
13716747b715Smrg         Pixel         bitplane,
13726747b715Smrg         void          *closure);
13736747b715Smrg
13746747b715Smrgextern _X_EXPORT void
137505b261ecSmrgfbCopy1toN (DrawablePtr	pSrcDrawable,
137605b261ecSmrg	    DrawablePtr	pDstDrawable,
137705b261ecSmrg	    GCPtr	pGC,
137805b261ecSmrg	    BoxPtr	pbox,
137905b261ecSmrg	    int		nbox,
138005b261ecSmrg	    int		dx,
138105b261ecSmrg	    int		dy,
138205b261ecSmrg	    Bool	reverse,
138305b261ecSmrg	    Bool	upsidedown,
138405b261ecSmrg	    Pixel	bitplane,
138505b261ecSmrg	    void	*closure);
138605b261ecSmrg
13876747b715Smrgextern _X_EXPORT void
138805b261ecSmrgfbCopyNto1 (DrawablePtr	pSrcDrawable,
138905b261ecSmrg	    DrawablePtr	pDstDrawable,
139005b261ecSmrg	    GCPtr	pGC,
139105b261ecSmrg	    BoxPtr	pbox,
139205b261ecSmrg	    int		nbox,
139305b261ecSmrg	    int		dx,
139405b261ecSmrg	    int		dy,
139505b261ecSmrg	    Bool	reverse,
139605b261ecSmrg	    Bool	upsidedown,
139705b261ecSmrg	    Pixel	bitplane,
139805b261ecSmrg	    void	*closure);
139905b261ecSmrg
14006747b715Smrgextern _X_EXPORT RegionPtr
140105b261ecSmrgfbCopyArea (DrawablePtr	pSrcDrawable,
140205b261ecSmrg	    DrawablePtr	pDstDrawable,
140305b261ecSmrg	    GCPtr	pGC,
140405b261ecSmrg	    int		xIn,
140505b261ecSmrg	    int		yIn,
140605b261ecSmrg	    int		widthSrc,
140705b261ecSmrg	    int		heightSrc,
140805b261ecSmrg	    int		xOut,
140905b261ecSmrg	    int		yOut);
141005b261ecSmrg
14116747b715Smrgextern _X_EXPORT RegionPtr
141205b261ecSmrgfbCopyPlane (DrawablePtr    pSrcDrawable,
141305b261ecSmrg	     DrawablePtr    pDstDrawable,
141405b261ecSmrg	     GCPtr	    pGC,
141505b261ecSmrg	     int	    xIn,
141605b261ecSmrg	     int	    yIn,
141705b261ecSmrg	     int	    widthSrc,
141805b261ecSmrg	     int	    heightSrc,
141905b261ecSmrg	     int	    xOut,
142005b261ecSmrg	     int	    yOut,
142105b261ecSmrg	     unsigned long  bitplane);
142205b261ecSmrg
142305b261ecSmrg/*
142405b261ecSmrg * fbfill.c
142505b261ecSmrg */
14266747b715Smrgextern _X_EXPORT void
142705b261ecSmrgfbFill (DrawablePtr pDrawable,
142805b261ecSmrg	GCPtr	    pGC,
142905b261ecSmrg	int	    x,
143005b261ecSmrg	int	    y,
143105b261ecSmrg	int	    width,
143205b261ecSmrg	int	    height);
143305b261ecSmrg
14346747b715Smrgextern _X_EXPORT void
143505b261ecSmrgfbSolidBoxClipped (DrawablePtr	pDrawable,
143605b261ecSmrg		   RegionPtr	pClip,
143705b261ecSmrg		   int		xa,
143805b261ecSmrg		   int		ya,
143905b261ecSmrg		   int		xb,
144005b261ecSmrg		   int		yb,
144105b261ecSmrg		   FbBits	and,
144205b261ecSmrg		   FbBits	xor);
144305b261ecSmrg
144405b261ecSmrg/*
144505b261ecSmrg * fbfillrect.c
144605b261ecSmrg */
14476747b715Smrgextern _X_EXPORT void
144805b261ecSmrgfbPolyFillRect(DrawablePtr  pDrawable,
144905b261ecSmrg	       GCPtr	    pGC,
145005b261ecSmrg	       int	    nrectInit,
145105b261ecSmrg	       xRectangle   *prectInit);
145205b261ecSmrg
145305b261ecSmrg#define fbPolyFillArc miPolyFillArc
145405b261ecSmrg
145505b261ecSmrg#define fbFillPolygon miFillPolygon
145605b261ecSmrg
145705b261ecSmrg/*
145805b261ecSmrg * fbfillsp.c
145905b261ecSmrg */
14606747b715Smrgextern _X_EXPORT void
146105b261ecSmrgfbFillSpans (DrawablePtr    pDrawable,
146205b261ecSmrg	     GCPtr	    pGC,
146305b261ecSmrg	     int	    nInit,
146405b261ecSmrg	     DDXPointPtr    pptInit,
146505b261ecSmrg	     int	    *pwidthInit,
146605b261ecSmrg	     int	    fSorted);
146705b261ecSmrg
146805b261ecSmrg
146905b261ecSmrg/*
147005b261ecSmrg * fbgc.c
147105b261ecSmrg */
147205b261ecSmrg
14736747b715Smrgextern _X_EXPORT Bool
147405b261ecSmrgfbCreateGC(GCPtr pGC);
147505b261ecSmrg
14766747b715Smrgextern _X_EXPORT void
147705b261ecSmrgfbPadPixmap (PixmapPtr pPixmap);
147805b261ecSmrg
14796747b715Smrgextern _X_EXPORT void
148005b261ecSmrgfbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
148105b261ecSmrg
148205b261ecSmrg/*
148305b261ecSmrg * fbgetsp.c
148405b261ecSmrg */
14856747b715Smrgextern _X_EXPORT void
148605b261ecSmrgfbGetSpans(DrawablePtr	pDrawable,
148705b261ecSmrg	   int		wMax,
148805b261ecSmrg	   DDXPointPtr	ppt,
148905b261ecSmrg	   int		*pwidth,
149005b261ecSmrg	   int		nspans,
149105b261ecSmrg	   char		*pchardstStart);
149205b261ecSmrg
149305b261ecSmrg/*
149405b261ecSmrg * fbglyph.c
149505b261ecSmrg */
149605b261ecSmrg
14976747b715Smrgextern _X_EXPORT Bool
149805b261ecSmrgfbGlyphIn (RegionPtr	pRegion,
149905b261ecSmrg	   int		x,
150005b261ecSmrg	   int		y,
150105b261ecSmrg	   int		width,
150205b261ecSmrg	   int		height);
150305b261ecSmrg
15046747b715Smrgextern _X_EXPORT void
150505b261ecSmrgfbPolyGlyphBlt (DrawablePtr	pDrawable,
150605b261ecSmrg		GCPtr		pGC,
150705b261ecSmrg		int		x,
150805b261ecSmrg		int		y,
150905b261ecSmrg		unsigned int	nglyph,
151005b261ecSmrg		CharInfoPtr	*ppci,
151105b261ecSmrg		pointer		pglyphBase);
151205b261ecSmrg
15136747b715Smrgextern _X_EXPORT void
151405b261ecSmrgfbImageGlyphBlt (DrawablePtr	pDrawable,
151505b261ecSmrg		 GCPtr		pGC,
151605b261ecSmrg		 int		x,
151705b261ecSmrg		 int		y,
151805b261ecSmrg		 unsigned int	nglyph,
151905b261ecSmrg		 CharInfoPtr	*ppci,
152005b261ecSmrg		 pointer	pglyphBase);
152105b261ecSmrg
152205b261ecSmrg/*
152305b261ecSmrg * fbimage.c
152405b261ecSmrg */
152505b261ecSmrg
15266747b715Smrgextern _X_EXPORT void
152705b261ecSmrgfbPutImage (DrawablePtr	pDrawable,
152805b261ecSmrg	    GCPtr	pGC,
152905b261ecSmrg	    int		depth,
153005b261ecSmrg	    int		x,
153105b261ecSmrg	    int		y,
153205b261ecSmrg	    int		w,
153305b261ecSmrg	    int		h,
153405b261ecSmrg	    int		leftPad,
153505b261ecSmrg	    int		format,
153605b261ecSmrg	    char	*pImage);
153705b261ecSmrg
15386747b715Smrgextern _X_EXPORT void
153905b261ecSmrgfbPutZImage (DrawablePtr	pDrawable,
154005b261ecSmrg	     RegionPtr		pClip,
154105b261ecSmrg	     int		alu,
154205b261ecSmrg	     FbBits		pm,
154305b261ecSmrg	     int		x,
154405b261ecSmrg	     int		y,
154505b261ecSmrg	     int		width,
154605b261ecSmrg	     int		height,
154705b261ecSmrg	     FbStip		*src,
154805b261ecSmrg	     FbStride		srcStride);
154905b261ecSmrg
15506747b715Smrgextern _X_EXPORT void
155105b261ecSmrgfbPutXYImage (DrawablePtr	pDrawable,
155205b261ecSmrg	      RegionPtr		pClip,
155305b261ecSmrg	      FbBits		fg,
155405b261ecSmrg	      FbBits		bg,
155505b261ecSmrg	      FbBits		pm,
155605b261ecSmrg	      int		alu,
155705b261ecSmrg	      Bool		opaque,
155805b261ecSmrg
155905b261ecSmrg	      int		x,
156005b261ecSmrg	      int		y,
156105b261ecSmrg	      int		width,
156205b261ecSmrg	      int		height,
156305b261ecSmrg
156405b261ecSmrg	      FbStip		*src,
156505b261ecSmrg	      FbStride		srcStride,
156605b261ecSmrg	      int		srcX);
156705b261ecSmrg
15686747b715Smrgextern _X_EXPORT void
156905b261ecSmrgfbGetImage (DrawablePtr	    pDrawable,
157005b261ecSmrg	    int		    x,
157105b261ecSmrg	    int		    y,
157205b261ecSmrg	    int		    w,
157305b261ecSmrg	    int		    h,
157405b261ecSmrg	    unsigned int    format,
157505b261ecSmrg	    unsigned long   planeMask,
157605b261ecSmrg	    char	    *d);
157705b261ecSmrg/*
157805b261ecSmrg * fbline.c
157905b261ecSmrg */
158005b261ecSmrg
15816747b715Smrgextern _X_EXPORT void
158205b261ecSmrgfbZeroLine (DrawablePtr	pDrawable,
158305b261ecSmrg	    GCPtr	pGC,
158405b261ecSmrg	    int		mode,
158505b261ecSmrg	    int		npt,
158605b261ecSmrg	    DDXPointPtr	ppt);
158705b261ecSmrg
15886747b715Smrgextern _X_EXPORT void
158905b261ecSmrgfbZeroSegment (DrawablePtr  pDrawable,
159005b261ecSmrg	       GCPtr	    pGC,
159105b261ecSmrg	       int	    nseg,
159205b261ecSmrg	       xSegment	    *pSegs);
159305b261ecSmrg
15946747b715Smrgextern _X_EXPORT void
159505b261ecSmrgfbPolyLine (DrawablePtr	pDrawable,
159605b261ecSmrg	    GCPtr	pGC,
159705b261ecSmrg	    int		mode,
159805b261ecSmrg	    int		npt,
159905b261ecSmrg	    DDXPointPtr	ppt);
160005b261ecSmrg
16016747b715Smrgextern _X_EXPORT void
160205b261ecSmrgfbFixCoordModePrevious (int npt,
160305b261ecSmrg			DDXPointPtr ppt);
160405b261ecSmrg
16056747b715Smrgextern _X_EXPORT void
160605b261ecSmrgfbPolySegment (DrawablePtr  pDrawable,
160705b261ecSmrg	       GCPtr	    pGC,
160805b261ecSmrg	       int	    nseg,
160905b261ecSmrg	       xSegment	    *pseg);
161005b261ecSmrg
161105b261ecSmrg#define fbPolyRectangle	miPolyRectangle
161205b261ecSmrg
161305b261ecSmrg/*
161405b261ecSmrg * fbpict.c
161505b261ecSmrg */
161605b261ecSmrg
16176747b715Smrgextern _X_EXPORT Bool
161805b261ecSmrgfbPictureInit (ScreenPtr pScreen,
161905b261ecSmrg	       PictFormatPtr formats,
162005b261ecSmrg	       int nformats);
162105b261ecSmrg
162205b261ecSmrg/*
162305b261ecSmrg * fbpixmap.c
162405b261ecSmrg */
162505b261ecSmrg
16266747b715Smrgextern _X_EXPORT PixmapPtr
16274642e01fSmrgfbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
16284642e01fSmrg		   unsigned usage_hint);
162905b261ecSmrg
16306747b715Smrgextern _X_EXPORT PixmapPtr
16314642e01fSmrgfbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
16324642e01fSmrg		unsigned usage_hint);
163305b261ecSmrg
16346747b715Smrgextern _X_EXPORT Bool
163505b261ecSmrgfbDestroyPixmap (PixmapPtr pPixmap);
163605b261ecSmrg
16376747b715Smrgextern _X_EXPORT RegionPtr
163805b261ecSmrgfbPixmapToRegion(PixmapPtr pPix);
163905b261ecSmrg
164005b261ecSmrg/*
164105b261ecSmrg * fbpoint.c
164205b261ecSmrg */
164305b261ecSmrg
16446747b715Smrgextern _X_EXPORT void
164505b261ecSmrgfbDots (FbBits	    *dstOrig,
164605b261ecSmrg	FbStride    dstStride,
164705b261ecSmrg	int	    dstBpp,
164805b261ecSmrg	BoxPtr	    pBox,
164905b261ecSmrg	xPoint	    *pts,
165005b261ecSmrg	int	    npt,
165105b261ecSmrg	int	    xorg,
165205b261ecSmrg	int	    yorg,
165305b261ecSmrg	int	    xoff,
165405b261ecSmrg	int	    yoff,
165505b261ecSmrg	FbBits	    andOrig,
165605b261ecSmrg	FbBits	    xorOrig);
165705b261ecSmrg
16586747b715Smrgextern _X_EXPORT void
165905b261ecSmrgfbPolyPoint (DrawablePtr    pDrawable,
166005b261ecSmrg	     GCPtr	    pGC,
166105b261ecSmrg	     int	    mode,
166205b261ecSmrg	     int	    npt,
166305b261ecSmrg	     xPoint	    *pptInit);
166405b261ecSmrg
166505b261ecSmrg/*
166605b261ecSmrg * fbpush.c
166705b261ecSmrg */
16686747b715Smrgextern _X_EXPORT void
166905b261ecSmrgfbPushPattern (DrawablePtr  pDrawable,
167005b261ecSmrg	       GCPtr	    pGC,
167105b261ecSmrg
167205b261ecSmrg	       FbStip	    *src,
167305b261ecSmrg	       FbStride	    srcStride,
167405b261ecSmrg	       int	    srcX,
167505b261ecSmrg
167605b261ecSmrg	       int	    x,
167705b261ecSmrg	       int	    y,
167805b261ecSmrg
167905b261ecSmrg	       int	    width,
168005b261ecSmrg	       int	    height);
168105b261ecSmrg
16826747b715Smrgextern _X_EXPORT void
168305b261ecSmrgfbPushFill (DrawablePtr	pDrawable,
168405b261ecSmrg	    GCPtr	pGC,
168505b261ecSmrg
168605b261ecSmrg	    FbStip	*src,
168705b261ecSmrg	    FbStride	srcStride,
168805b261ecSmrg	    int		srcX,
168905b261ecSmrg
169005b261ecSmrg	    int		x,
169105b261ecSmrg	    int		y,
169205b261ecSmrg	    int		width,
169305b261ecSmrg	    int		height);
169405b261ecSmrg
16956747b715Smrgextern _X_EXPORT void
169605b261ecSmrgfbPushImage (DrawablePtr    pDrawable,
169705b261ecSmrg	     GCPtr	    pGC,
169805b261ecSmrg
169905b261ecSmrg	     FbStip	    *src,
170005b261ecSmrg	     FbStride	    srcStride,
170105b261ecSmrg	     int	    srcX,
170205b261ecSmrg
170305b261ecSmrg	     int	    x,
170405b261ecSmrg	     int	    y,
170505b261ecSmrg	     int	    width,
170605b261ecSmrg	     int	    height);
170705b261ecSmrg
17086747b715Smrgextern _X_EXPORT void
170905b261ecSmrgfbPushPixels (GCPtr	    pGC,
171005b261ecSmrg	      PixmapPtr	    pBitmap,
171105b261ecSmrg	      DrawablePtr   pDrawable,
171205b261ecSmrg	      int	    dx,
171305b261ecSmrg	      int	    dy,
171405b261ecSmrg	      int	    xOrg,
171505b261ecSmrg	      int	    yOrg);
171605b261ecSmrg
171705b261ecSmrg
171805b261ecSmrg/*
171905b261ecSmrg * fbscreen.c
172005b261ecSmrg */
172105b261ecSmrg
17226747b715Smrgextern _X_EXPORT Bool
172305b261ecSmrgfbCloseScreen (int indx, ScreenPtr pScreen);
172405b261ecSmrg
17256747b715Smrgextern _X_EXPORT Bool
172605b261ecSmrgfbRealizeFont(ScreenPtr pScreen, FontPtr pFont);
172705b261ecSmrg
17286747b715Smrgextern _X_EXPORT Bool
172905b261ecSmrgfbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
173005b261ecSmrg
17316747b715Smrgextern _X_EXPORT void
173205b261ecSmrgfbQueryBestSize (int class,
173305b261ecSmrg		 unsigned short *width, unsigned short *height,
173405b261ecSmrg		 ScreenPtr pScreen);
173505b261ecSmrg
17366747b715Smrgextern _X_EXPORT PixmapPtr
173705b261ecSmrg_fbGetWindowPixmap (WindowPtr pWindow);
173805b261ecSmrg
17396747b715Smrgextern _X_EXPORT void
174005b261ecSmrg_fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap);
174105b261ecSmrg
17426747b715Smrgextern _X_EXPORT Bool
174305b261ecSmrgfbSetupScreen(ScreenPtr	pScreen,
174405b261ecSmrg	      pointer	pbits,		/* pointer to screen bitmap */
174505b261ecSmrg	      int	xsize, 		/* in pixels */
174605b261ecSmrg	      int	ysize,
174705b261ecSmrg	      int	dpix,		/* dots per inch */
174805b261ecSmrg	      int	dpiy,
174905b261ecSmrg	      int	width,		/* pixel width of frame buffer */
175005b261ecSmrg	      int	bpp);		/* bits per pixel of frame buffer */
175105b261ecSmrg
17526747b715Smrgextern _X_EXPORT Bool
175305b261ecSmrgwfbFinishScreenInit(ScreenPtr	pScreen,
175405b261ecSmrg		    pointer	pbits,
175505b261ecSmrg		    int		xsize,
175605b261ecSmrg		    int		ysize,
175705b261ecSmrg		    int		dpix,
175805b261ecSmrg		    int		dpiy,
175905b261ecSmrg		    int		width,
176005b261ecSmrg		    int		bpp,
176105b261ecSmrg		    SetupWrapProcPtr setupWrap,
176205b261ecSmrg		    FinishWrapProcPtr finishWrap);
176305b261ecSmrg
17646747b715Smrgextern _X_EXPORT Bool
176505b261ecSmrgwfbScreenInit(ScreenPtr	pScreen,
176605b261ecSmrg	      pointer	pbits,
176705b261ecSmrg	      int	xsize,
176805b261ecSmrg	      int	ysize,
176905b261ecSmrg	      int	dpix,
177005b261ecSmrg	      int	dpiy,
177105b261ecSmrg	      int	width,
177205b261ecSmrg	      int	bpp,
177305b261ecSmrg	      SetupWrapProcPtr setupWrap,
177405b261ecSmrg	      FinishWrapProcPtr finishWrap);
177505b261ecSmrg
17766747b715Smrgextern _X_EXPORT Bool
177705b261ecSmrgfbFinishScreenInit(ScreenPtr	pScreen,
177805b261ecSmrg		   pointer	pbits,
177905b261ecSmrg		   int		xsize,
178005b261ecSmrg		   int		ysize,
178105b261ecSmrg		   int		dpix,
178205b261ecSmrg		   int		dpiy,
178305b261ecSmrg		   int		width,
178405b261ecSmrg		   int		bpp);
178505b261ecSmrg
17866747b715Smrgextern _X_EXPORT Bool
178705b261ecSmrgfbScreenInit(ScreenPtr	pScreen,
178805b261ecSmrg	     pointer	pbits,
178905b261ecSmrg	     int	xsize,
179005b261ecSmrg	     int	ysize,
179105b261ecSmrg	     int	dpix,
179205b261ecSmrg	     int	dpiy,
179305b261ecSmrg	     int	width,
179405b261ecSmrg	     int	bpp);
179505b261ecSmrg
179605b261ecSmrg/*
179705b261ecSmrg * fbseg.c
179805b261ecSmrg */
179905b261ecSmrgtypedef void	FbBres (DrawablePtr	pDrawable,
180005b261ecSmrg			GCPtr		pGC,
180105b261ecSmrg			int		dashOffset,
180205b261ecSmrg			int		signdx,
180305b261ecSmrg			int		signdy,
180405b261ecSmrg			int		axis,
180505b261ecSmrg			int		x,
180605b261ecSmrg			int		y,
180705b261ecSmrg			int		e,
180805b261ecSmrg			int		e1,
180905b261ecSmrg			int		e3,
181005b261ecSmrg			int		len);
181105b261ecSmrg
18126747b715Smrgextern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash;
181305b261ecSmrg/*
181405b261ecSmrg * fbsetsp.c
181505b261ecSmrg */
181605b261ecSmrg
18176747b715Smrgextern _X_EXPORT void
181805b261ecSmrgfbSetSpans (DrawablePtr	    pDrawable,
181905b261ecSmrg	    GCPtr	    pGC,
182005b261ecSmrg	    char	    *src,
182105b261ecSmrg	    DDXPointPtr	    ppt,
182205b261ecSmrg	    int		    *pwidth,
182305b261ecSmrg	    int		    nspans,
182405b261ecSmrg	    int		    fSorted);
182505b261ecSmrg
18266747b715Smrgextern _X_EXPORT FbBres *
182705b261ecSmrgfbSelectBres (DrawablePtr   pDrawable,
182805b261ecSmrg	      GCPtr	    pGC);
182905b261ecSmrg
18306747b715Smrgextern _X_EXPORT void
183105b261ecSmrgfbBres (DrawablePtr	pDrawable,
183205b261ecSmrg	GCPtr		pGC,
183305b261ecSmrg	int		dashOffset,
183405b261ecSmrg	int		signdx,
183505b261ecSmrg	int		signdy,
183605b261ecSmrg	int		axis,
183705b261ecSmrg	int		x,
183805b261ecSmrg	int		y,
183905b261ecSmrg	int		e,
184005b261ecSmrg	int		e1,
184105b261ecSmrg	int		e3,
184205b261ecSmrg	int		len);
184305b261ecSmrg
18446747b715Smrgextern _X_EXPORT void
184505b261ecSmrgfbSegment (DrawablePtr	pDrawable,
184605b261ecSmrg	   GCPtr	pGC,
184705b261ecSmrg	   int		xa,
184805b261ecSmrg	   int		ya,
184905b261ecSmrg	   int		xb,
185005b261ecSmrg	   int		yb,
185105b261ecSmrg	   Bool		drawLast,
185205b261ecSmrg	   int		*dashOffset);
185305b261ecSmrg
185405b261ecSmrg
185505b261ecSmrg/*
185605b261ecSmrg * fbsolid.c
185705b261ecSmrg */
185805b261ecSmrg
18596747b715Smrgextern _X_EXPORT void
186005b261ecSmrgfbSolid (FbBits	    *dst,
186105b261ecSmrg	 FbStride   dstStride,
186205b261ecSmrg	 int	    dstX,
186305b261ecSmrg	 int	    bpp,
186405b261ecSmrg
186505b261ecSmrg	 int	    width,
186605b261ecSmrg	 int	    height,
186705b261ecSmrg
186805b261ecSmrg	 FbBits	    and,
186905b261ecSmrg	 FbBits	    xor);
187005b261ecSmrg
187105b261ecSmrg#ifdef FB_24BIT
18726747b715Smrgextern _X_EXPORT void
187305b261ecSmrgfbSolid24 (FbBits   *dst,
187405b261ecSmrg	   FbStride dstStride,
187505b261ecSmrg	   int	    dstX,
187605b261ecSmrg
187705b261ecSmrg	   int	    width,
187805b261ecSmrg	   int	    height,
187905b261ecSmrg
188005b261ecSmrg	   FbBits   and,
188105b261ecSmrg	   FbBits   xor);
188205b261ecSmrg#endif
188305b261ecSmrg
188405b261ecSmrg/*
188505b261ecSmrg * fbstipple.c
188605b261ecSmrg */
188705b261ecSmrg
18886747b715Smrgextern _X_EXPORT void
188905b261ecSmrgfbTransparentSpan (FbBits   *dst,
189005b261ecSmrg		   FbBits   stip,
189105b261ecSmrg		   FbBits   fgxor,
189205b261ecSmrg		   int	    n);
189305b261ecSmrg
18946747b715Smrgextern _X_EXPORT void
189505b261ecSmrgfbEvenStipple (FbBits   *dst,
189605b261ecSmrg	       FbStride dstStride,
189705b261ecSmrg	       int	dstX,
189805b261ecSmrg	       int	dstBpp,
189905b261ecSmrg
190005b261ecSmrg	       int	width,
190105b261ecSmrg	       int	height,
190205b261ecSmrg
190305b261ecSmrg	       FbStip   *stip,
190405b261ecSmrg	       FbStride	stipStride,
190505b261ecSmrg	       int	stipHeight,
190605b261ecSmrg
190705b261ecSmrg	       FbBits   fgand,
190805b261ecSmrg	       FbBits   fgxor,
190905b261ecSmrg	       FbBits   bgand,
191005b261ecSmrg	       FbBits   bgxor,
191105b261ecSmrg
191205b261ecSmrg	       int	xRot,
191305b261ecSmrg	       int	yRot);
191405b261ecSmrg
19156747b715Smrgextern _X_EXPORT void
191605b261ecSmrgfbOddStipple (FbBits	*dst,
191705b261ecSmrg	      FbStride	dstStride,
191805b261ecSmrg	      int	dstX,
191905b261ecSmrg	      int	dstBpp,
192005b261ecSmrg
192105b261ecSmrg	      int	width,
192205b261ecSmrg	      int	height,
192305b261ecSmrg
192405b261ecSmrg	      FbStip	*stip,
192505b261ecSmrg	      FbStride	stipStride,
192605b261ecSmrg	      int	stipWidth,
192705b261ecSmrg	      int	stipHeight,
192805b261ecSmrg
192905b261ecSmrg	      FbBits	fgand,
193005b261ecSmrg	      FbBits	fgxor,
193105b261ecSmrg	      FbBits	bgand,
193205b261ecSmrg	      FbBits	bgxor,
193305b261ecSmrg
193405b261ecSmrg	      int	xRot,
193505b261ecSmrg	      int	yRot);
193605b261ecSmrg
19376747b715Smrgextern _X_EXPORT void
193805b261ecSmrgfbStipple (FbBits   *dst,
193905b261ecSmrg	   FbStride dstStride,
194005b261ecSmrg	   int	    dstX,
194105b261ecSmrg	   int	    dstBpp,
194205b261ecSmrg
194305b261ecSmrg	   int	    width,
194405b261ecSmrg	   int	    height,
194505b261ecSmrg
194605b261ecSmrg	   FbStip   *stip,
194705b261ecSmrg	   FbStride stipStride,
194805b261ecSmrg	   int	    stipWidth,
194905b261ecSmrg	   int	    stipHeight,
195005b261ecSmrg	   Bool	    even,
195105b261ecSmrg
195205b261ecSmrg	   FbBits   fgand,
195305b261ecSmrg	   FbBits   fgxor,
195405b261ecSmrg	   FbBits   bgand,
195505b261ecSmrg	   FbBits   bgxor,
195605b261ecSmrg
195705b261ecSmrg	   int	    xRot,
195805b261ecSmrg	   int	    yRot);
195905b261ecSmrg
196005b261ecSmrg/*
196105b261ecSmrg * fbtile.c
196205b261ecSmrg */
196305b261ecSmrg
19646747b715Smrgextern _X_EXPORT void
196505b261ecSmrgfbEvenTile (FbBits	*dst,
196605b261ecSmrg	    FbStride	dstStride,
196705b261ecSmrg	    int		dstX,
196805b261ecSmrg
196905b261ecSmrg	    int		width,
197005b261ecSmrg	    int		height,
197105b261ecSmrg
197205b261ecSmrg	    FbBits	*tile,
197305b261ecSmrg	    FbStride	tileStride,
197405b261ecSmrg	    int		tileHeight,
197505b261ecSmrg
197605b261ecSmrg	    int		alu,
197705b261ecSmrg	    FbBits	pm,
197805b261ecSmrg	    int		xRot,
197905b261ecSmrg	    int		yRot);
198005b261ecSmrg
19816747b715Smrgextern _X_EXPORT void
198205b261ecSmrgfbOddTile (FbBits	*dst,
198305b261ecSmrg	   FbStride	dstStride,
198405b261ecSmrg	   int		dstX,
198505b261ecSmrg
198605b261ecSmrg	   int		width,
198705b261ecSmrg	   int		height,
198805b261ecSmrg
198905b261ecSmrg	   FbBits	*tile,
199005b261ecSmrg	   FbStride	tileStride,
199105b261ecSmrg	   int		tileWidth,
199205b261ecSmrg	   int		tileHeight,
199305b261ecSmrg
199405b261ecSmrg	   int		alu,
199505b261ecSmrg	   FbBits	pm,
199605b261ecSmrg	   int		bpp,
199705b261ecSmrg
199805b261ecSmrg	   int		xRot,
199905b261ecSmrg	   int		yRot);
200005b261ecSmrg
20016747b715Smrgextern _X_EXPORT void
200205b261ecSmrgfbTile (FbBits	    *dst,
200305b261ecSmrg	FbStride    dstStride,
200405b261ecSmrg	int	    dstX,
200505b261ecSmrg
200605b261ecSmrg	int	    width,
200705b261ecSmrg	int	    height,
200805b261ecSmrg
200905b261ecSmrg	FbBits	    *tile,
201005b261ecSmrg	FbStride    tileStride,
201105b261ecSmrg	int	    tileWidth,
201205b261ecSmrg	int	    tileHeight,
201305b261ecSmrg
201405b261ecSmrg	int	    alu,
201505b261ecSmrg	FbBits	    pm,
201605b261ecSmrg	int	    bpp,
201705b261ecSmrg
201805b261ecSmrg	int	    xRot,
201905b261ecSmrg	int	    yRot);
202005b261ecSmrg
202105b261ecSmrg/*
202205b261ecSmrg * fbutil.c
202305b261ecSmrg */
20246747b715Smrgextern _X_EXPORT FbBits
202505b261ecSmrgfbReplicatePixel (Pixel p, int bpp);
202605b261ecSmrg
20276747b715Smrgextern _X_EXPORT void
202805b261ecSmrgfbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp);
202905b261ecSmrg
203005b261ecSmrg#ifdef FB_ACCESS_WRAPPER
20316747b715Smrgextern _X_EXPORT ReadMemoryProcPtr wfbReadMemory;
20326747b715Smrgextern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
203305b261ecSmrg#endif
203405b261ecSmrg
203505b261ecSmrg/*
203605b261ecSmrg * fbwindow.c
203705b261ecSmrg */
203805b261ecSmrg
20396747b715Smrgextern _X_EXPORT Bool
204005b261ecSmrgfbCreateWindow(WindowPtr pWin);
204105b261ecSmrg
20426747b715Smrgextern _X_EXPORT Bool
204305b261ecSmrgfbDestroyWindow(WindowPtr pWin);
204405b261ecSmrg
20456747b715Smrgextern _X_EXPORT Bool
204605b261ecSmrgfbMapWindow(WindowPtr pWindow);
204705b261ecSmrg
20486747b715Smrgextern _X_EXPORT Bool
204905b261ecSmrgfbPositionWindow(WindowPtr pWin, int x, int y);
205005b261ecSmrg
20516747b715Smrgextern _X_EXPORT Bool
205205b261ecSmrgfbUnmapWindow(WindowPtr pWindow);
205305b261ecSmrg
20546747b715Smrgextern _X_EXPORT void
205505b261ecSmrgfbCopyWindowProc (DrawablePtr	pSrcDrawable,
205605b261ecSmrg		  DrawablePtr	pDstDrawable,
205705b261ecSmrg		  GCPtr		pGC,
205805b261ecSmrg		  BoxPtr	pbox,
205905b261ecSmrg		  int		nbox,
206005b261ecSmrg		  int		dx,
206105b261ecSmrg		  int		dy,
206205b261ecSmrg		  Bool		reverse,
206305b261ecSmrg		  Bool		upsidedown,
206405b261ecSmrg		  Pixel		bitplane,
206505b261ecSmrg		  void		*closure);
206605b261ecSmrg
20676747b715Smrgextern _X_EXPORT void
206805b261ecSmrgfbCopyWindow(WindowPtr	    pWin,
206905b261ecSmrg	     DDXPointRec    ptOldOrg,
207005b261ecSmrg	     RegionPtr	    prgnSrc);
207105b261ecSmrg
20726747b715Smrgextern _X_EXPORT Bool
207305b261ecSmrgfbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
207405b261ecSmrg
20756747b715Smrgextern _X_EXPORT void
207605b261ecSmrgfbFillRegionSolid (DrawablePtr	pDrawable,
207705b261ecSmrg		   RegionPtr	pRegion,
207805b261ecSmrg		   FbBits	and,
207905b261ecSmrg		   FbBits	xor);
208005b261ecSmrg
20816747b715Smrgextern _X_EXPORT pixman_image_t *
20826747b715Smrgimage_from_pict (PicturePtr	pict,
20836747b715Smrg		 Bool		has_clip,
20846747b715Smrg		 int		*xoff,
20856747b715Smrg		 int		*yoff);
20866747b715Smrg
20876747b715Smrgextern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
208805b261ecSmrg
208905b261ecSmrg#endif /* _FB_H_ */
209005b261ecSmrg
2091