1706f2543Smrg/*
2706f2543Smrg *
3706f2543Smrg * Copyright © 1998 Keith Packard
4706f2543Smrg *
5706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its
6706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that
7706f2543Smrg * the above copyright notice appear in all copies and that both that
8706f2543Smrg * copyright notice and this permission notice appear in supporting
9706f2543Smrg * documentation, and that the name of Keith Packard not be used in
10706f2543Smrg * advertising or publicity pertaining to distribution of the software without
11706f2543Smrg * specific, written prior permission.  Keith Packard makes no
12706f2543Smrg * representations about the suitability of this software for any purpose.  It
13706f2543Smrg * is provided "as is" without express or implied warranty.
14706f2543Smrg *
15706f2543Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17706f2543Smrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21706f2543Smrg * PERFORMANCE OF THIS SOFTWARE.
22706f2543Smrg */
23706f2543Smrg
24706f2543Smrg
25706f2543Smrg#ifndef _FB_H_
26706f2543Smrg#define _FB_H_
27706f2543Smrg
28706f2543Smrg#include <X11/X.h>
29706f2543Smrg#include <pixman.h>
30706f2543Smrg
31706f2543Smrg#include "scrnintstr.h"
32706f2543Smrg#include "pixmap.h"
33706f2543Smrg#include "pixmapstr.h"
34706f2543Smrg#include "region.h"
35706f2543Smrg#include "gcstruct.h"
36706f2543Smrg#include "colormap.h"
37706f2543Smrg#include "miscstruct.h"
38706f2543Smrg#include "servermd.h"
39706f2543Smrg#include "windowstr.h"
40706f2543Smrg#include "privates.h"
41706f2543Smrg#include "mi.h"
42706f2543Smrg#include "migc.h"
43706f2543Smrg#include "mibstore.h"
44706f2543Smrg#include "picturestr.h"
45706f2543Smrg
46706f2543Smrg#ifdef FB_ACCESS_WRAPPER
47706f2543Smrg
48706f2543Smrg#include "wfbrename.h"
49706f2543Smrg#define FBPREFIX(x) wfb##x
50706f2543Smrg#define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr))))
51706f2543Smrg#define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr))))
52706f2543Smrg
53706f2543Smrg#define MEMCPY_WRAPPED(dst, src, size) do {                       \
54706f2543Smrg    size_t _i;                                                    \
55706f2543Smrg    CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src);           \
56706f2543Smrg    for(_i = 0; _i < size; _i++) {                                \
57706f2543Smrg        WRITE(_dst +_i, READ(_src + _i));                         \
58706f2543Smrg    }                                                             \
59706f2543Smrg} while(0)
60706f2543Smrg
61706f2543Smrg#define MEMSET_WRAPPED(dst, val, size) do {                       \
62706f2543Smrg    size_t _i;                                                    \
63706f2543Smrg    CARD8 *_dst = (CARD8*)(dst);                                  \
64706f2543Smrg    for(_i = 0; _i < size; _i++) {                                \
65706f2543Smrg        WRITE(_dst +_i, (val));                                   \
66706f2543Smrg    }                                                             \
67706f2543Smrg} while(0)
68706f2543Smrg
69706f2543Smrg#else
70706f2543Smrg
71706f2543Smrg#define FBPREFIX(x) fb##x
72706f2543Smrg#define WRITE(ptr, val) (*(ptr) = (val))
73706f2543Smrg#define READ(ptr) (*(ptr))
74706f2543Smrg#define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size))
75706f2543Smrg#define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size))
76706f2543Smrg
77706f2543Smrg#endif
78706f2543Smrg
79706f2543Smrg/*
80706f2543Smrg * This single define controls the basic size of data manipulated
81706f2543Smrg * by this software; it must be log2(sizeof (FbBits) * 8)
82706f2543Smrg */
83706f2543Smrg
84706f2543Smrg#ifndef FB_SHIFT
85706f2543Smrg#define FB_SHIFT    LOG2_BITMAP_PAD
86706f2543Smrg#endif
87706f2543Smrg
88706f2543Smrg#if FB_SHIFT < LOG2_BITMAP_PAD
89706f2543Smrg    error FB_SHIFT must be >= LOG2_BITMAP_PAD
90706f2543Smrg#endif
91706f2543Smrg
92706f2543Smrg#define FB_UNIT	    (1 << FB_SHIFT)
93706f2543Smrg#define FB_HALFUNIT (1 << (FB_SHIFT-1))
94706f2543Smrg#define FB_MASK	    (FB_UNIT - 1)
95706f2543Smrg#define FB_ALLONES  ((FbBits) -1)
96706f2543Smrg
97706f2543Smrg#if GLYPHPADBYTES != 4
98706f2543Smrg#error "GLYPHPADBYTES must be 4"
99706f2543Smrg#endif
100706f2543Smrg/* whether to bother to include 24bpp support */
101706f2543Smrg#ifndef FBNO24BIT
102706f2543Smrg#define FB_24BIT
103706f2543Smrg#endif
104706f2543Smrg
105706f2543Smrg/*
106706f2543Smrg * Unless otherwise instructed, fb includes code to advertise 24bpp
107706f2543Smrg * windows with 32bpp image format for application compatibility
108706f2543Smrg */
109706f2543Smrg
110706f2543Smrg#ifdef FB_24BIT
111706f2543Smrg#ifndef FBNO24_32
112706f2543Smrg#define FB_24_32BIT
113706f2543Smrg#endif
114706f2543Smrg#endif
115706f2543Smrg
116706f2543Smrg#define FB_STIP_SHIFT	LOG2_BITMAP_PAD
117706f2543Smrg#define FB_STIP_UNIT	(1 << FB_STIP_SHIFT)
118706f2543Smrg#define FB_STIP_MASK	(FB_STIP_UNIT - 1)
119706f2543Smrg#define FB_STIP_ALLONES	((FbStip) -1)
120706f2543Smrg
121706f2543Smrg#define FB_STIP_ODDSTRIDE(s)	(((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0)
122706f2543Smrg#define FB_STIP_ODDPTR(p)	((((long) (p)) & (FB_MASK >> 3)) != 0)
123706f2543Smrg
124706f2543Smrg#define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
125706f2543Smrg#define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
126706f2543Smrg
127706f2543Smrg#define FbFullMask(n)   ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
128706f2543Smrg
129706f2543Smrg#if FB_SHIFT == 6
130706f2543Smrg# ifdef WIN32
131706f2543Smrgtypedef unsigned __int64    FbBits;
132706f2543Smrg# else
133706f2543Smrg#  if defined(__alpha__) || defined(__alpha) || \
134706f2543Smrg      defined(ia64) || defined(__ia64__) || \
135706f2543Smrg      defined(__sparc64__) || defined(_LP64) || \
136706f2543Smrg      defined(__s390x__) || \
137706f2543Smrg      defined(amd64) || defined (__amd64__) || \
138706f2543Smrg      defined (__powerpc64__)
139706f2543Smrgtypedef unsigned long	    FbBits;
140706f2543Smrg#  else
141706f2543Smrgtypedef unsigned long long  FbBits;
142706f2543Smrg#  endif
143706f2543Smrg# endif
144706f2543Smrg#endif
145706f2543Smrg
146706f2543Smrg#if FB_SHIFT == 5
147706f2543Smrgtypedef CARD32		    FbBits;
148706f2543Smrg#endif
149706f2543Smrg
150706f2543Smrg#if FB_SHIFT == 4
151706f2543Smrgtypedef CARD16		    FbBits;
152706f2543Smrg#endif
153706f2543Smrg
154706f2543Smrg#if LOG2_BITMAP_PAD == FB_SHIFT
155706f2543Smrgtypedef FbBits		    FbStip;
156706f2543Smrg#else
157706f2543Smrg# if LOG2_BITMAP_PAD == 5
158706f2543Smrgtypedef CARD32		    FbStip;
159706f2543Smrg# endif
160706f2543Smrg#endif
161706f2543Smrg
162706f2543Smrgtypedef int		    FbStride;
163706f2543Smrg
164706f2543Smrg
165706f2543Smrg#ifdef FB_DEBUG
166706f2543Smrgextern _X_EXPORT void fbValidateDrawable(DrawablePtr d);
167706f2543Smrgextern _X_EXPORT void fbInitializeDrawable(DrawablePtr d);
168706f2543Smrgextern _X_EXPORT void fbSetBits (FbStip *bits, int stride, FbStip data);
169706f2543Smrg#define FB_HEAD_BITS   (FbStip) (0xbaadf00d)
170706f2543Smrg#define FB_TAIL_BITS   (FbStip) (0xbaddf0ad)
171706f2543Smrg#else
172706f2543Smrg#define fbValidateDrawable(d)
173706f2543Smrg#define fdInitializeDrawable(d)
174706f2543Smrg#endif
175706f2543Smrg
176706f2543Smrg#include "fbrop.h"
177706f2543Smrg
178706f2543Smrg#if BITMAP_BIT_ORDER == LSBFirst
179706f2543Smrg#define FbScrLeft(x,n)	((x) >> (n))
180706f2543Smrg#define FbScrRight(x,n)	((x) << (n))
181706f2543Smrg/* #define FbLeftBits(x,n)	((x) & ((((FbBits) 1) << (n)) - 1)) */
182706f2543Smrg#define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1))
183706f2543Smrg#define FbStipMoveLsb(x,s,n)	(FbStipRight (x,(s)-(n)))
184706f2543Smrg#define FbPatternOffsetBits	0
185706f2543Smrg#else
186706f2543Smrg#define FbScrLeft(x,n)	((x) << (n))
187706f2543Smrg#define FbScrRight(x,n)	((x) >> (n))
188706f2543Smrg/* #define FbLeftBits(x,n)	((x) >> (FB_UNIT - (n))) */
189706f2543Smrg#define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n)))
190706f2543Smrg#define FbStipMoveLsb(x,s,n)	(x)
191706f2543Smrg#define FbPatternOffsetBits	(sizeof (FbBits) - 1)
192706f2543Smrg#endif
193706f2543Smrg
194706f2543Smrg#include "micoord.h"
195706f2543Smrg
196706f2543Smrg#define FbStipLeft(x,n)	FbScrLeft(x,n)
197706f2543Smrg#define FbStipRight(x,n) FbScrRight(x,n)
198706f2543Smrg
199706f2543Smrg#define FbRotLeft(x,n)	FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0)
200706f2543Smrg#define FbRotRight(x,n)	FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0)
201706f2543Smrg
202706f2543Smrg#define FbRotStipLeft(x,n)  FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0)
203706f2543Smrg#define FbRotStipRight(x,n)  FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0)
204706f2543Smrg
205706f2543Smrg#define FbLeftMask(x)	    ( ((x) & FB_MASK) ? \
206706f2543Smrg			     FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0)
207706f2543Smrg#define FbRightMask(x)	    ( ((FB_UNIT - (x)) & FB_MASK) ? \
208706f2543Smrg			     FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0)
209706f2543Smrg
210706f2543Smrg#define FbLeftStipMask(x)   ( ((x) & FB_STIP_MASK) ? \
211706f2543Smrg			     FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0)
212706f2543Smrg#define FbRightStipMask(x)  ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
213706f2543Smrg			     FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)
214706f2543Smrg
215706f2543Smrg#define FbBitsMask(x,w)	(FbScrRight(FB_ALLONES,(x) & FB_MASK) & \
216706f2543Smrg			 FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK))
217706f2543Smrg
218706f2543Smrg#define FbStipMask(x,w)	(FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
219706f2543Smrg			 FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
220706f2543Smrg
221706f2543Smrg
222706f2543Smrg#define FbMaskBits(x,w,l,n,r) { \
223706f2543Smrg    n = (w); \
224706f2543Smrg    r = FbRightMask((x)+n); \
225706f2543Smrg    l = FbLeftMask(x); \
226706f2543Smrg    if (l) { \
227706f2543Smrg	n -= FB_UNIT - ((x) & FB_MASK); \
228706f2543Smrg	if (n < 0) { \
229706f2543Smrg	    n = 0; \
230706f2543Smrg	    l &= r; \
231706f2543Smrg	    r = 0; \
232706f2543Smrg	} \
233706f2543Smrg    } \
234706f2543Smrg    n >>= FB_SHIFT; \
235706f2543Smrg}
236706f2543Smrg
237706f2543Smrg#ifdef FBNOPIXADDR
238706f2543Smrg#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) FbMaskBits(x,w,l,n,r)
239706f2543Smrg#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
240706f2543Smrg    *dst = FbDoMaskRRop(*dst,and,xor,l); \
241706f2543Smrg}
242706f2543Smrg#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
243706f2543Smrg    *dst = FbDoMaskRRop(*dst,and,xor,r); \
244706f2543Smrg}
245706f2543Smrg#else
246706f2543Smrg
247706f2543Smrg#define FbByteMaskInvalid   0x10
248706f2543Smrg
249706f2543Smrg#define FbPatternOffset(o,t)  ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
250706f2543Smrg
251706f2543Smrg#define FbPtrOffset(p,o,t)		((t *) ((CARD8 *) (p) + (o)))
252706f2543Smrg#define FbSelectPatternPart(xor,o,t)	((xor) >> (FbPatternOffset (o,t) << 3))
253706f2543Smrg#define FbStorePart(dst,off,t,xor)	(WRITE(FbPtrOffset(dst,off,t), \
254706f2543Smrg					 FbSelectPart(xor,off,t)))
255706f2543Smrg#ifndef FbSelectPart
256706f2543Smrg#define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t)
257706f2543Smrg#endif
258706f2543Smrg
259706f2543Smrg#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \
260706f2543Smrg    n = (w); \
261706f2543Smrg    lb = 0; \
262706f2543Smrg    rb = 0; \
263706f2543Smrg    r = FbRightMask((x)+n); \
264706f2543Smrg    if (r) { \
265706f2543Smrg	/* compute right byte length */ \
266706f2543Smrg	if ((copy) && (((x) + n) & 7) == 0) { \
267706f2543Smrg	    rb = (((x) + n) & FB_MASK) >> 3; \
268706f2543Smrg	} else { \
269706f2543Smrg	    rb = FbByteMaskInvalid; \
270706f2543Smrg	} \
271706f2543Smrg    } \
272706f2543Smrg    l = FbLeftMask(x); \
273706f2543Smrg    if (l) { \
274706f2543Smrg	/* compute left byte length */ \
275706f2543Smrg	if ((copy) && ((x) & 7) == 0) { \
276706f2543Smrg	    lb = ((x) & FB_MASK) >> 3; \
277706f2543Smrg	} else { \
278706f2543Smrg	    lb = FbByteMaskInvalid; \
279706f2543Smrg	} \
280706f2543Smrg	/* subtract out the portion painted by leftMask */ \
281706f2543Smrg	n -= FB_UNIT - ((x) & FB_MASK); \
282706f2543Smrg	if (n < 0) { \
283706f2543Smrg	    if (lb != FbByteMaskInvalid) { \
284706f2543Smrg		if (rb == FbByteMaskInvalid) { \
285706f2543Smrg		    lb = FbByteMaskInvalid; \
286706f2543Smrg		} else if (rb) { \
287706f2543Smrg		    lb |= (rb - lb) << (FB_SHIFT - 3); \
288706f2543Smrg		    rb = 0; \
289706f2543Smrg		} \
290706f2543Smrg	    } \
291706f2543Smrg	    n = 0; \
292706f2543Smrg	    l &= r; \
293706f2543Smrg	    r = 0; \
294706f2543Smrg	}\
295706f2543Smrg    } \
296706f2543Smrg    n >>= FB_SHIFT; \
297706f2543Smrg}
298706f2543Smrg
299706f2543Smrg#if FB_SHIFT == 6
300706f2543Smrg#define FbDoLeftMaskByteRRop6Cases(dst,xor) \
301706f2543Smrg    case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \
302706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
303706f2543Smrg	break; \
304706f2543Smrg    case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \
305706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
306706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
307706f2543Smrg	break; \
308706f2543Smrg    case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \
309706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
310706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
311706f2543Smrg	break; \
312706f2543Smrg    case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \
313706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
314706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
315706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
316706f2543Smrg	break; \
317706f2543Smrg    case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \
318706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
319706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
320706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
321706f2543Smrg	break; \
322706f2543Smrg    case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \
323706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
324706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
325706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
326706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
327706f2543Smrg	break; \
328706f2543Smrg    case (sizeof (FbBits) - 7): \
329706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
330706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
331706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
332706f2543Smrg	break; \
333706f2543Smrg    case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \
334706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
335706f2543Smrg	break; \
336706f2543Smrg    case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \
337706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
338706f2543Smrg	break; \
339706f2543Smrg    case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \
340706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
341706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
342706f2543Smrg	break; \
343706f2543Smrg    case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \
344706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
345706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
346706f2543Smrg	break; \
347706f2543Smrg    case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \
348706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
349706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
350706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
351706f2543Smrg	break; \
352706f2543Smrg    case (sizeof (FbBits) - 6): \
353706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
354706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
355706f2543Smrg	break; \
356706f2543Smrg    case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \
357706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
358706f2543Smrg	break; \
359706f2543Smrg    case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \
360706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
361706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
362706f2543Smrg	break; \
363706f2543Smrg    case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \
364706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
365706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
366706f2543Smrg	break; \
367706f2543Smrg    case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \
368706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
369706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
370706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
371706f2543Smrg	break; \
372706f2543Smrg    case (sizeof (FbBits) - 5): \
373706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
374706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
375706f2543Smrg	break; \
376706f2543Smrg    case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \
377706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
378706f2543Smrg	break; \
379706f2543Smrg    case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \
380706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
381706f2543Smrg	break; \
382706f2543Smrg    case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \
383706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
384706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
385706f2543Smrg	break; \
386706f2543Smrg    case (sizeof (FbBits) - 4): \
387706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
388706f2543Smrg	break;
389706f2543Smrg
390706f2543Smrg#define FbDoRightMaskByteRRop6Cases(dst,xor) \
391706f2543Smrg    case 4: \
392706f2543Smrg	FbStorePart(dst,0,CARD32,xor); \
393706f2543Smrg	break; \
394706f2543Smrg    case 5: \
395706f2543Smrg	FbStorePart(dst,0,CARD32,xor); \
396706f2543Smrg	FbStorePart(dst,4,CARD8,xor); \
397706f2543Smrg	break; \
398706f2543Smrg    case 6: \
399706f2543Smrg	FbStorePart(dst,0,CARD32,xor); \
400706f2543Smrg	FbStorePart(dst,4,CARD16,xor); \
401706f2543Smrg	break; \
402706f2543Smrg    case 7: \
403706f2543Smrg	FbStorePart(dst,0,CARD32,xor); \
404706f2543Smrg	FbStorePart(dst,4,CARD16,xor); \
405706f2543Smrg	FbStorePart(dst,6,CARD8,xor); \
406706f2543Smrg	break;
407706f2543Smrg#else
408706f2543Smrg#define FbDoLeftMaskByteRRop6Cases(dst,xor)
409706f2543Smrg#define FbDoRightMaskByteRRop6Cases(dst,xor)
410706f2543Smrg#endif
411706f2543Smrg
412706f2543Smrg#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
413706f2543Smrg    switch (lb) { \
414706f2543Smrg    FbDoLeftMaskByteRRop6Cases(dst,xor) \
415706f2543Smrg    case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
416706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
417706f2543Smrg	break; \
418706f2543Smrg    case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \
419706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
420706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
421706f2543Smrg	break; \
422706f2543Smrg    case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \
423706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
424706f2543Smrg	break; \
425706f2543Smrg    case sizeof (FbBits) - 3: \
426706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
427706f2543Smrg    case sizeof (FbBits) - 2: \
428706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \
429706f2543Smrg	break; \
430706f2543Smrg    case sizeof (FbBits) - 1: \
431706f2543Smrg	FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \
432706f2543Smrg	break; \
433706f2543Smrg    default: \
434706f2543Smrg	WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \
435706f2543Smrg	break; \
436706f2543Smrg    } \
437706f2543Smrg}
438706f2543Smrg
439706f2543Smrg
440706f2543Smrg#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
441706f2543Smrg    switch (rb) { \
442706f2543Smrg    case 1: \
443706f2543Smrg	FbStorePart(dst,0,CARD8,xor); \
444706f2543Smrg	break; \
445706f2543Smrg    case 2: \
446706f2543Smrg	FbStorePart(dst,0,CARD16,xor); \
447706f2543Smrg	break; \
448706f2543Smrg    case 3: \
449706f2543Smrg	FbStorePart(dst,0,CARD16,xor); \
450706f2543Smrg	FbStorePart(dst,2,CARD8,xor); \
451706f2543Smrg	break; \
452706f2543Smrg    FbDoRightMaskByteRRop6Cases(dst,xor) \
453706f2543Smrg    default: \
454706f2543Smrg	WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
455706f2543Smrg    } \
456706f2543Smrg}
457706f2543Smrg#endif
458706f2543Smrg
459706f2543Smrg#define FbMaskStip(x,w,l,n,r) { \
460706f2543Smrg    n = (w); \
461706f2543Smrg    r = FbRightStipMask((x)+n); \
462706f2543Smrg    l = FbLeftStipMask(x); \
463706f2543Smrg    if (l) { \
464706f2543Smrg	n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \
465706f2543Smrg	if (n < 0) { \
466706f2543Smrg	    n = 0; \
467706f2543Smrg	    l &= r; \
468706f2543Smrg	    r = 0; \
469706f2543Smrg	} \
470706f2543Smrg    } \
471706f2543Smrg    n >>= FB_STIP_SHIFT; \
472706f2543Smrg}
473706f2543Smrg
474706f2543Smrg/*
475706f2543Smrg * These macros are used to transparently stipple
476706f2543Smrg * in copy mode; the expected usage is with 'n' constant
477706f2543Smrg * so all of the conditional parts collapse into a minimal
478706f2543Smrg * sequence of partial word writes
479706f2543Smrg *
480706f2543Smrg * 'n' is the bytemask of which bytes to store, 'a' is the address
481706f2543Smrg * of the FbBits base unit, 'o' is the offset within that unit
482706f2543Smrg *
483706f2543Smrg * The term "lane" comes from the hardware term "byte-lane" which
484706f2543Smrg */
485706f2543Smrg
486706f2543Smrg#define FbLaneCase1(n,a,o)						\
487706f2543Smrg    if ((n) == 0x01) {							\
488706f2543Smrg	WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor);		\
489706f2543Smrg    }
490706f2543Smrg
491706f2543Smrg#define FbLaneCase2(n,a,o)						\
492706f2543Smrg    if ((n) == 0x03) {							\
493706f2543Smrg	WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor);	\
494706f2543Smrg    } else {								\
495706f2543Smrg	FbLaneCase1((n)&1,a,o)						\
496706f2543Smrg	FbLaneCase1((n)>>1,a,(o)+1)					\
497706f2543Smrg    }
498706f2543Smrg
499706f2543Smrg#define FbLaneCase4(n,a,o)						\
500706f2543Smrg    if ((n) == 0x0f) {							\
501706f2543Smrg	WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor);	\
502706f2543Smrg    } else {								\
503706f2543Smrg	FbLaneCase2((n)&3,a,o)						\
504706f2543Smrg	FbLaneCase2((n)>>2,a,(o)+2)					\
505706f2543Smrg    }
506706f2543Smrg
507706f2543Smrg#define FbLaneCase8(n,a,o)						\
508706f2543Smrg    if ((n) == 0x0ff) {							\
509706f2543Smrg	*(FbBits *) ((a)+(o)) = fgxor;					\
510706f2543Smrg    } else {								\
511706f2543Smrg	FbLaneCase4((n)&15,a,o)						\
512706f2543Smrg	FbLaneCase4((n)>>4,a,(o)+4)					\
513706f2543Smrg    }
514706f2543Smrg
515706f2543Smrg#if FB_SHIFT == 6
516706f2543Smrg#define FbLaneCase(n,a)   FbLaneCase8(n,(CARD8 *) (a),0)
517706f2543Smrg#endif
518706f2543Smrg
519706f2543Smrg#if FB_SHIFT == 5
520706f2543Smrg#define FbLaneCase(n,a)   FbLaneCase4(n,(CARD8 *) (a),0)
521706f2543Smrg#endif
522706f2543Smrg
523706f2543Smrg/* Rotate a filled pixel value to the specified alignement */
524706f2543Smrg#define FbRot24(p,b)	    (FbScrRight(p,b) | FbScrLeft(p,24-(b)))
525706f2543Smrg#define FbRot24Stip(p,b)    (FbStipRight(p,b) | FbStipLeft(p,24-(b)))
526706f2543Smrg
527706f2543Smrg/* step a filled pixel value to the next/previous FB_UNIT alignment */
528706f2543Smrg#define FbNext24Pix(p)	(FbRot24(p,(24-FB_UNIT%24)))
529706f2543Smrg#define FbPrev24Pix(p)	(FbRot24(p,FB_UNIT%24))
530706f2543Smrg#define FbNext24Stip(p)	(FbRot24(p,(24-FB_STIP_UNIT%24)))
531706f2543Smrg#define FbPrev24Stip(p)	(FbRot24(p,FB_STIP_UNIT%24))
532706f2543Smrg
533706f2543Smrg/* step a rotation value to the next/previous rotation value */
534706f2543Smrg#if FB_UNIT == 64
535706f2543Smrg#define FbNext24Rot(r)        ((r) == 16 ? 0 : (r) + 8)
536706f2543Smrg#define FbPrev24Rot(r)        ((r) == 0 ? 16 : (r) - 8)
537706f2543Smrg
538706f2543Smrg#if IMAGE_BYTE_ORDER == MSBFirst
539706f2543Smrg#define FbFirst24Rot(x)		(((x) + 8) % 24)
540706f2543Smrg#else
541706f2543Smrg#define FbFirst24Rot(x)		((x) % 24)
542706f2543Smrg#endif
543706f2543Smrg
544706f2543Smrg#endif
545706f2543Smrg
546706f2543Smrg#if FB_UNIT == 32
547706f2543Smrg#define FbNext24Rot(r)        ((r) == 0 ? 16 : (r) - 8)
548706f2543Smrg#define FbPrev24Rot(r)        ((r) == 16 ? 0 : (r) + 8)
549706f2543Smrg
550706f2543Smrg#if IMAGE_BYTE_ORDER == MSBFirst
551706f2543Smrg#define FbFirst24Rot(x)		(((x) + 16) % 24)
552706f2543Smrg#else
553706f2543Smrg#define FbFirst24Rot(x)		((x) % 24)
554706f2543Smrg#endif
555706f2543Smrg#endif
556706f2543Smrg
557706f2543Smrg#define FbNext24RotStip(r)        ((r) == 0 ? 16 : (r) - 8)
558706f2543Smrg#define FbPrev24RotStip(r)        ((r) == 16 ? 0 : (r) + 8)
559706f2543Smrg
560706f2543Smrg/* Whether 24-bit specific code is needed for this filled pixel value */
561706f2543Smrg#define FbCheck24Pix(p)	((p) == FbNext24Pix(p))
562706f2543Smrg
563706f2543Smrg/* Macros for dealing with dashing */
564706f2543Smrg
565706f2543Smrg#define FbDashDeclare	\
566706f2543Smrg    unsigned char	*__dash, *__firstDash, *__lastDash
567706f2543Smrg
568706f2543Smrg#define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) {	    \
569706f2543Smrg    (even) = TRUE;					    \
570706f2543Smrg    __firstDash = (pGC)->dash;				    \
571706f2543Smrg    __lastDash = __firstDash + (pGC)->numInDashList;	    \
572706f2543Smrg    (dashOffset) %= (pPriv)->dashLength;		    \
573706f2543Smrg							    \
574706f2543Smrg    __dash = __firstDash;				    \
575706f2543Smrg    while ((dashOffset) >= ((dashlen) = *__dash))	    \
576706f2543Smrg    {							    \
577706f2543Smrg	(dashOffset) -= (dashlen);			    \
578706f2543Smrg	(even) = 1-(even);				    \
579706f2543Smrg	if (++__dash == __lastDash)			    \
580706f2543Smrg	    __dash = __firstDash;			    \
581706f2543Smrg    }							    \
582706f2543Smrg    (dashlen) -= (dashOffset);				    \
583706f2543Smrg}
584706f2543Smrg
585706f2543Smrg#define FbDashNext(dashlen) {				    \
586706f2543Smrg    if (++__dash == __lastDash)				    \
587706f2543Smrg	__dash = __firstDash;				    \
588706f2543Smrg    (dashlen) = *__dash;				    \
589706f2543Smrg}
590706f2543Smrg
591706f2543Smrg/* as numInDashList is always even, this case can skip a test */
592706f2543Smrg
593706f2543Smrg#define FbDashNextEven(dashlen) {			    \
594706f2543Smrg    (dashlen) = *++__dash;				    \
595706f2543Smrg}
596706f2543Smrg
597706f2543Smrg#define FbDashNextOdd(dashlen)	FbDashNext(dashlen)
598706f2543Smrg
599706f2543Smrg#define FbDashStep(dashlen,even) {			    \
600706f2543Smrg    if (!--(dashlen)) {					    \
601706f2543Smrg	FbDashNext(dashlen);				    \
602706f2543Smrg	(even) = 1-(even);				    \
603706f2543Smrg    }							    \
604706f2543Smrg}
605706f2543Smrg
606706f2543Smrgextern _X_EXPORT DevPrivateKey
607706f2543SmrgfbGetGCPrivateKey (void);
608706f2543Smrg
609706f2543Smrgextern _X_EXPORT DevPrivateKey
610706f2543SmrgfbGetWinPrivateKey (void);
611706f2543Smrg
612706f2543Smrgextern _X_EXPORT const GCOps	fbGCOps;
613706f2543Smrgextern _X_EXPORT const GCFuncs	fbGCFuncs;
614706f2543Smrg
615706f2543Smrg#ifdef FB_24_32BIT
616706f2543Smrg#define FB_SCREEN_PRIVATE
617706f2543Smrg#endif
618706f2543Smrg
619706f2543Smrg/* Framebuffer access wrapper */
620706f2543Smrgtypedef FbBits (*ReadMemoryProcPtr)(const void *src, int size);
621706f2543Smrgtypedef void (*WriteMemoryProcPtr)(void *dst, FbBits value, int size);
622706f2543Smrgtypedef void (*SetupWrapProcPtr)(ReadMemoryProcPtr  *pRead,
623706f2543Smrg                                 WriteMemoryProcPtr *pWrite,
624706f2543Smrg                                 DrawablePtr         pDraw);
625706f2543Smrgtypedef void (*FinishWrapProcPtr)(DrawablePtr pDraw);
626706f2543Smrg
627706f2543Smrg#ifdef FB_ACCESS_WRAPPER
628706f2543Smrg
629706f2543Smrg#define fbPrepareAccess(pDraw) \
630706f2543Smrg	fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \
631706f2543Smrg		&wfbReadMemory, \
632706f2543Smrg		&wfbWriteMemory, \
633706f2543Smrg		(pDraw))
634706f2543Smrg#define fbFinishAccess(pDraw) \
635706f2543Smrg	fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw)
636706f2543Smrg
637706f2543Smrg#else
638706f2543Smrg
639706f2543Smrg#define fbPrepareAccess(pPix)
640706f2543Smrg#define fbFinishAccess(pDraw)
641706f2543Smrg
642706f2543Smrg#endif
643706f2543Smrg
644706f2543Smrg
645706f2543Smrg#ifdef FB_SCREEN_PRIVATE
646706f2543Smrgextern _X_EXPORT DevPrivateKey
647706f2543SmrgfbGetScreenPrivateKey(void);
648706f2543Smrg
649706f2543Smrg/* private field of a screen */
650706f2543Smrgtypedef struct {
651706f2543Smrg    unsigned char	win32bpp;	/* window bpp for 32-bpp images */
652706f2543Smrg    unsigned char	pix32bpp;	/* pixmap bpp for 32-bpp images */
653706f2543Smrg#ifdef FB_ACCESS_WRAPPER
654706f2543Smrg    SetupWrapProcPtr	setupWrap;	/* driver hook to set pixmap access wrapping */
655706f2543Smrg    FinishWrapProcPtr	finishWrap;	/* driver hook to clean up pixmap access wrapping */
656706f2543Smrg#endif
657706f2543Smrg} FbScreenPrivRec, *FbScreenPrivPtr;
658706f2543Smrg
659706f2543Smrg#define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \
660706f2543Smrg				     dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey()))
661706f2543Smrg#endif
662706f2543Smrg
663706f2543Smrg/* private field of GC */
664706f2543Smrgtypedef struct {
665706f2543Smrg    FbBits		and, xor;	/* reduced rop values */
666706f2543Smrg    FbBits		bgand, bgxor;	/* for stipples */
667706f2543Smrg    FbBits		fg, bg, pm;	/* expanded and filled */
668706f2543Smrg    unsigned int	dashLength;	/* total of all dash elements */
669706f2543Smrg    unsigned char    	evenStipple;	/* stipple is even */
670706f2543Smrg    unsigned char    	bpp;		/* current drawable bpp */
671706f2543Smrg} FbGCPrivRec, *FbGCPrivPtr;
672706f2543Smrg
673706f2543Smrg#define fbGetGCPrivate(pGC)	((FbGCPrivPtr)\
674706f2543Smrg				 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey()))
675706f2543Smrg
676706f2543Smrg#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
677706f2543Smrg#define fbGetExpose(pGC)	((pGC)->fExpose)
678706f2543Smrg#define fbGetFreeCompClip(pGC)	((pGC)->freeCompClip)
679706f2543Smrg#define fbGetRotatedPixmap(pGC)	((pGC)->pRotatedPixmap)
680706f2543Smrg
681706f2543Smrg#define fbGetScreenPixmap(s)	((PixmapPtr) (s)->devPrivate)
682706f2543Smrg#define fbGetWindowPixmap(pWin)	((PixmapPtr)\
683706f2543Smrg				 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey()))
684706f2543Smrg
685706f2543Smrg#ifdef ROOTLESS
686706f2543Smrg#define __fbPixDrawableX(pPix)	((pPix)->drawable.x)
687706f2543Smrg#define __fbPixDrawableY(pPix)	((pPix)->drawable.y)
688706f2543Smrg#else
689706f2543Smrg#define __fbPixDrawableX(pPix)	0
690706f2543Smrg#define __fbPixDrawableY(pPix)	0
691706f2543Smrg#endif
692706f2543Smrg
693706f2543Smrg#ifdef COMPOSITE
694706f2543Smrg#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix) - (pPix)->screen_x)
695706f2543Smrg#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix) - (pPix)->screen_y)
696706f2543Smrg#else
697706f2543Smrg#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix))
698706f2543Smrg#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix))
699706f2543Smrg#endif
700706f2543Smrg#define __fbPixOffXPix(pPix)	(__fbPixDrawableX(pPix))
701706f2543Smrg#define __fbPixOffYPix(pPix)	(__fbPixDrawableY(pPix))
702706f2543Smrg
703706f2543Smrg#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) {			\
704706f2543Smrg    if ((pDrawable)->type != DRAWABLE_PIXMAP) { 				\
705706f2543Smrg	(pixmap) = fbGetWindowPixmap(pDrawable);				\
706706f2543Smrg	(xoff) = __fbPixOffXWin(pixmap); 					\
707706f2543Smrg	(yoff) = __fbPixOffYWin(pixmap); 					\
708706f2543Smrg    } else { 									\
709706f2543Smrg	(pixmap) = (PixmapPtr) (pDrawable);					\
710706f2543Smrg	(xoff) = __fbPixOffXPix(pixmap); 					\
711706f2543Smrg	(yoff) = __fbPixOffYPix(pixmap); 					\
712706f2543Smrg    } 										\
713706f2543Smrg    fbPrepareAccess(pDrawable); 						\
714706f2543Smrg}
715706f2543Smrg
716706f2543Smrg#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) {			\
717706f2543Smrg    (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; 			       	\
718706f2543Smrg    (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride);	\
719706f2543Smrg    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
720706f2543Smrg}
721706f2543Smrg
722706f2543Smrg#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) {			\
723706f2543Smrg    (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; 			       	\
724706f2543Smrg    (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride);	\
725706f2543Smrg    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
726706f2543Smrg}
727706f2543Smrg
728706f2543Smrg#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 		\
729706f2543Smrg    PixmapPtr   _pPix; 								\
730706f2543Smrg    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); 				\
731706f2543Smrg    fbGetPixmapBitsData(_pPix, pointer, stride, bpp);				\
732706f2543Smrg}
733706f2543Smrg
734706f2543Smrg#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 	\
735706f2543Smrg    PixmapPtr   _pPix; 								\
736706f2543Smrg    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff);				\
737706f2543Smrg    fbGetPixmapStipData(_pPix, pointer, stride, bpp);				\
738706f2543Smrg}
739706f2543Smrg
740706f2543Smrg/*
741706f2543Smrg * XFree86 empties the root BorderClip when the VT is inactive,
742706f2543Smrg * here's a macro which uses that to disable GetImage and GetSpans
743706f2543Smrg */
744706f2543Smrg
745706f2543Smrg#define fbWindowEnabled(pWin) \
746706f2543Smrg    RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip)
747706f2543Smrg
748706f2543Smrg#define fbDrawableEnabled(pDrawable) \
749706f2543Smrg    ((pDrawable)->type == DRAWABLE_PIXMAP ? \
750706f2543Smrg     TRUE : fbWindowEnabled((WindowPtr) pDrawable))
751706f2543Smrg
752706f2543Smrg#define FbPowerOfTwo(w)	    (((w) & ((w) - 1)) == 0)
753706f2543Smrg/*
754706f2543Smrg * Accelerated tiles are power of 2 width <= FB_UNIT
755706f2543Smrg */
756706f2543Smrg#define FbEvenTile(w)	    ((w) <= FB_UNIT && FbPowerOfTwo(w))
757706f2543Smrg/*
758706f2543Smrg * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp
759706f2543Smrg * with dstBpp a power of 2 as well
760706f2543Smrg */
761706f2543Smrg#define FbEvenStip(w,bpp)   ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp))
762706f2543Smrg
763706f2543Smrg/*
764706f2543Smrg * fb24_32.c
765706f2543Smrg */
766706f2543Smrgextern _X_EXPORT void
767706f2543Smrgfb24_32GetSpans(DrawablePtr	pDrawable,
768706f2543Smrg		int		wMax,
769706f2543Smrg		DDXPointPtr	ppt,
770706f2543Smrg		int		*pwidth,
771706f2543Smrg		int		nspans,
772706f2543Smrg		char		*pchardstStart);
773706f2543Smrg
774706f2543Smrgextern _X_EXPORT void
775706f2543Smrgfb24_32SetSpans (DrawablePtr	    pDrawable,
776706f2543Smrg		 GCPtr		    pGC,
777706f2543Smrg		 char		    *src,
778706f2543Smrg		 DDXPointPtr	    ppt,
779706f2543Smrg		 int		    *pwidth,
780706f2543Smrg		 int		    nspans,
781706f2543Smrg		 int		    fSorted);
782706f2543Smrg
783706f2543Smrgextern _X_EXPORT void
784706f2543Smrgfb24_32PutZImage (DrawablePtr	pDrawable,
785706f2543Smrg		  RegionPtr	pClip,
786706f2543Smrg		  int		alu,
787706f2543Smrg		  FbBits	pm,
788706f2543Smrg		  int		x,
789706f2543Smrg		  int		y,
790706f2543Smrg		  int		width,
791706f2543Smrg		  int		height,
792706f2543Smrg		  CARD8		*src,
793706f2543Smrg		  FbStride	srcStride);
794706f2543Smrg
795706f2543Smrgextern _X_EXPORT void
796706f2543Smrgfb24_32GetImage (DrawablePtr     pDrawable,
797706f2543Smrg		 int             x,
798706f2543Smrg		 int             y,
799706f2543Smrg		 int             w,
800706f2543Smrg		 int             h,
801706f2543Smrg		 unsigned int    format,
802706f2543Smrg		 unsigned long   planeMask,
803706f2543Smrg		 char            *d);
804706f2543Smrg
805706f2543Smrgextern _X_EXPORT void
806706f2543Smrgfb24_32CopyMtoN (DrawablePtr pSrcDrawable,
807706f2543Smrg		 DrawablePtr pDstDrawable,
808706f2543Smrg		 GCPtr       pGC,
809706f2543Smrg		 BoxPtr      pbox,
810706f2543Smrg		 int         nbox,
811706f2543Smrg		 int         dx,
812706f2543Smrg		 int         dy,
813706f2543Smrg		 Bool        reverse,
814706f2543Smrg		 Bool        upsidedown,
815706f2543Smrg		 Pixel       bitplane,
816706f2543Smrg		 void        *closure);
817706f2543Smrg
818706f2543Smrgextern _X_EXPORT PixmapPtr
819706f2543Smrgfb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel);
820706f2543Smrg
821706f2543Smrgextern _X_EXPORT Bool
822706f2543Smrgfb24_32CreateScreenResources(ScreenPtr pScreen);
823706f2543Smrg
824706f2543Smrgextern _X_EXPORT Bool
825706f2543Smrgfb24_32ModifyPixmapHeader (PixmapPtr   pPixmap,
826706f2543Smrg			   int         width,
827706f2543Smrg			   int         height,
828706f2543Smrg			   int         depth,
829706f2543Smrg			   int         bitsPerPixel,
830706f2543Smrg			   int         devKind,
831706f2543Smrg			   pointer     pPixData);
832706f2543Smrg
833706f2543Smrg/*
834706f2543Smrg * fballpriv.c
835706f2543Smrg */
836706f2543Smrgextern _X_EXPORT Bool
837706f2543SmrgfbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCIndex);
838706f2543Smrg
839706f2543Smrg/*
840706f2543Smrg * fbarc.c
841706f2543Smrg */
842706f2543Smrg
843706f2543Smrgextern _X_EXPORT void
844706f2543SmrgfbPolyArc (DrawablePtr	pDrawable,
845706f2543Smrg	   GCPtr	pGC,
846706f2543Smrg	   int		narcs,
847706f2543Smrg	   xArc		*parcs);
848706f2543Smrg
849706f2543Smrg/*
850706f2543Smrg * fbbits.c
851706f2543Smrg */
852706f2543Smrg
853706f2543Smrgextern _X_EXPORT void
854706f2543SmrgfbBresSolid8(DrawablePtr    pDrawable,
855706f2543Smrg	     GCPtr	    pGC,
856706f2543Smrg	     int	    dashOffset,
857706f2543Smrg	     int	    signdx,
858706f2543Smrg	     int	    signdy,
859706f2543Smrg	     int	    axis,
860706f2543Smrg	     int	    x,
861706f2543Smrg	     int	    y,
862706f2543Smrg	     int	    e,
863706f2543Smrg	     int	    e1,
864706f2543Smrg	     int	    e3,
865706f2543Smrg	     int	    len);
866706f2543Smrg
867706f2543Smrgextern _X_EXPORT void
868706f2543SmrgfbBresDash8 (DrawablePtr    pDrawable,
869706f2543Smrg	     GCPtr	    pGC,
870706f2543Smrg	     int	    dashOffset,
871706f2543Smrg	     int	    signdx,
872706f2543Smrg	     int	    signdy,
873706f2543Smrg	     int	    axis,
874706f2543Smrg	     int	    x,
875706f2543Smrg	     int	    y,
876706f2543Smrg	     int	    e,
877706f2543Smrg	     int	    e1,
878706f2543Smrg	     int	    e3,
879706f2543Smrg	     int	    len);
880706f2543Smrg
881706f2543Smrgextern _X_EXPORT void
882706f2543SmrgfbDots8 (FbBits	    *dst,
883706f2543Smrg	 FbStride   dstStride,
884706f2543Smrg	 int	    dstBpp,
885706f2543Smrg	 BoxPtr	    pBox,
886706f2543Smrg	 xPoint	    *pts,
887706f2543Smrg	 int	    npt,
888706f2543Smrg	 int	    xorg,
889706f2543Smrg	 int	    yorg,
890706f2543Smrg	 int	    xoff,
891706f2543Smrg	 int	    yoff,
892706f2543Smrg	 FbBits	    and,
893706f2543Smrg	 FbBits	    xor);
894706f2543Smrg
895706f2543Smrgextern _X_EXPORT void
896706f2543SmrgfbArc8 (FbBits	    *dst,
897706f2543Smrg	FbStride    dstStride,
898706f2543Smrg	int	    dstBpp,
899706f2543Smrg	xArc	    *arc,
900706f2543Smrg	int	    dx,
901706f2543Smrg	int	    dy,
902706f2543Smrg	FbBits	    and,
903706f2543Smrg	FbBits	    xor);
904706f2543Smrg
905706f2543Smrgextern _X_EXPORT void
906706f2543SmrgfbGlyph8 (FbBits    *dstLine,
907706f2543Smrg	  FbStride  dstStride,
908706f2543Smrg	  int	    dstBpp,
909706f2543Smrg	  FbStip    *stipple,
910706f2543Smrg	  FbBits    fg,
911706f2543Smrg	  int	    height,
912706f2543Smrg	  int	    shift);
913706f2543Smrg
914706f2543Smrgextern _X_EXPORT void
915706f2543SmrgfbPolyline8 (DrawablePtr    pDrawable,
916706f2543Smrg	     GCPtr	    pGC,
917706f2543Smrg	     int	    mode,
918706f2543Smrg	     int	    npt,
919706f2543Smrg	     DDXPointPtr    ptsOrig);
920706f2543Smrg
921706f2543Smrgextern _X_EXPORT void
922706f2543SmrgfbPolySegment8 (DrawablePtr pDrawable,
923706f2543Smrg		GCPtr	    pGC,
924706f2543Smrg		int	    nseg,
925706f2543Smrg		xSegment    *pseg);
926706f2543Smrg
927706f2543Smrgextern _X_EXPORT void
928706f2543SmrgfbBresSolid16(DrawablePtr   pDrawable,
929706f2543Smrg	      GCPtr	    pGC,
930706f2543Smrg	      int	    dashOffset,
931706f2543Smrg	      int	    signdx,
932706f2543Smrg	      int	    signdy,
933706f2543Smrg	      int	    axis,
934706f2543Smrg	      int	    x,
935706f2543Smrg	      int	    y,
936706f2543Smrg	      int	    e,
937706f2543Smrg	      int	    e1,
938706f2543Smrg	      int	    e3,
939706f2543Smrg	      int	    len);
940706f2543Smrg
941706f2543Smrgextern _X_EXPORT void
942706f2543SmrgfbBresDash16(DrawablePtr    pDrawable,
943706f2543Smrg	     GCPtr	    pGC,
944706f2543Smrg	     int	    dashOffset,
945706f2543Smrg	     int	    signdx,
946706f2543Smrg	     int	    signdy,
947706f2543Smrg	     int	    axis,
948706f2543Smrg	     int	    x,
949706f2543Smrg	     int	    y,
950706f2543Smrg	     int	    e,
951706f2543Smrg	     int	    e1,
952706f2543Smrg	     int	    e3,
953706f2543Smrg	     int	    len);
954706f2543Smrg
955706f2543Smrgextern _X_EXPORT void
956706f2543SmrgfbDots16(FbBits	    *dst,
957706f2543Smrg	 FbStride   dstStride,
958706f2543Smrg	 int	    dstBpp,
959706f2543Smrg	 BoxPtr	    pBox,
960706f2543Smrg	 xPoint	    *pts,
961706f2543Smrg	 int	    npt,
962706f2543Smrg	 int	    xorg,
963706f2543Smrg	 int	    yorg,
964706f2543Smrg	 int	    xoff,
965706f2543Smrg	 int	    yoff,
966706f2543Smrg	 FbBits	    and,
967706f2543Smrg	 FbBits	    xor);
968706f2543Smrg
969706f2543Smrgextern _X_EXPORT void
970706f2543SmrgfbArc16(FbBits	    *dst,
971706f2543Smrg	FbStride    dstStride,
972706f2543Smrg	int	    dstBpp,
973706f2543Smrg	xArc	    *arc,
974706f2543Smrg	int	    dx,
975706f2543Smrg	int	    dy,
976706f2543Smrg	FbBits	    and,
977706f2543Smrg	FbBits	    xor);
978706f2543Smrg
979706f2543Smrgextern _X_EXPORT void
980706f2543SmrgfbGlyph16(FbBits    *dstLine,
981706f2543Smrg	  FbStride  dstStride,
982706f2543Smrg	  int	    dstBpp,
983706f2543Smrg	  FbStip    *stipple,
984706f2543Smrg	  FbBits    fg,
985706f2543Smrg	  int	    height,
986706f2543Smrg	  int	    shift);
987706f2543Smrg
988706f2543Smrgextern _X_EXPORT void
989706f2543SmrgfbPolyline16 (DrawablePtr   pDrawable,
990706f2543Smrg	      GCPtr	    pGC,
991706f2543Smrg	      int	    mode,
992706f2543Smrg	      int	    npt,
993706f2543Smrg	      DDXPointPtr   ptsOrig);
994706f2543Smrg
995706f2543Smrgextern _X_EXPORT void
996706f2543SmrgfbPolySegment16 (DrawablePtr	pDrawable,
997706f2543Smrg		 GCPtr		pGC,
998706f2543Smrg		 int		nseg,
999706f2543Smrg		 xSegment	*pseg);
1000706f2543Smrg
1001706f2543Smrg
1002706f2543Smrgextern _X_EXPORT void
1003706f2543SmrgfbBresSolid24(DrawablePtr   pDrawable,
1004706f2543Smrg	      GCPtr	    pGC,
1005706f2543Smrg	      int	    dashOffset,
1006706f2543Smrg	      int	    signdx,
1007706f2543Smrg	      int	    signdy,
1008706f2543Smrg	      int	    axis,
1009706f2543Smrg	      int	    x,
1010706f2543Smrg	      int	    y,
1011706f2543Smrg	      int	    e,
1012706f2543Smrg	      int	    e1,
1013706f2543Smrg	      int	    e3,
1014706f2543Smrg	      int	    len);
1015706f2543Smrg
1016706f2543Smrgextern _X_EXPORT void
1017706f2543SmrgfbBresDash24(DrawablePtr    pDrawable,
1018706f2543Smrg	     GCPtr	    pGC,
1019706f2543Smrg	     int	    dashOffset,
1020706f2543Smrg	     int	    signdx,
1021706f2543Smrg	     int	    signdy,
1022706f2543Smrg	     int	    axis,
1023706f2543Smrg	     int	    x,
1024706f2543Smrg	     int	    y,
1025706f2543Smrg	     int	    e,
1026706f2543Smrg	     int	    e1,
1027706f2543Smrg	     int	    e3,
1028706f2543Smrg	     int	    len);
1029706f2543Smrg
1030706f2543Smrgextern _X_EXPORT void
1031706f2543SmrgfbDots24(FbBits	    *dst,
1032706f2543Smrg	 FbStride   dstStride,
1033706f2543Smrg	 int	    dstBpp,
1034706f2543Smrg	 BoxPtr	    pBox,
1035706f2543Smrg	 xPoint	    *pts,
1036706f2543Smrg	 int	    npt,
1037706f2543Smrg	 int	    xorg,
1038706f2543Smrg	 int	    yorg,
1039706f2543Smrg	 int	    xoff,
1040706f2543Smrg	 int	    yoff,
1041706f2543Smrg	 FbBits	    and,
1042706f2543Smrg	 FbBits	    xor);
1043706f2543Smrg
1044706f2543Smrgextern _X_EXPORT void
1045706f2543SmrgfbArc24(FbBits	    *dst,
1046706f2543Smrg	FbStride    dstStride,
1047706f2543Smrg	int	    dstBpp,
1048706f2543Smrg	xArc	    *arc,
1049706f2543Smrg	int	    dx,
1050706f2543Smrg	int	    dy,
1051706f2543Smrg	FbBits	    and,
1052706f2543Smrg	FbBits	    xor);
1053706f2543Smrg
1054706f2543Smrgextern _X_EXPORT void
1055706f2543SmrgfbGlyph24(FbBits    *dstLine,
1056706f2543Smrg	  FbStride  dstStride,
1057706f2543Smrg	  int	    dstBpp,
1058706f2543Smrg	  FbStip    *stipple,
1059706f2543Smrg	  FbBits    fg,
1060706f2543Smrg	  int	    height,
1061706f2543Smrg	  int	    shift);
1062706f2543Smrg
1063706f2543Smrgextern _X_EXPORT void
1064706f2543SmrgfbPolyline24 (DrawablePtr   pDrawable,
1065706f2543Smrg	      GCPtr	    pGC,
1066706f2543Smrg	      int	    mode,
1067706f2543Smrg	      int	    npt,
1068706f2543Smrg	      DDXPointPtr   ptsOrig);
1069706f2543Smrg
1070706f2543Smrgextern _X_EXPORT void
1071706f2543SmrgfbPolySegment24 (DrawablePtr	pDrawable,
1072706f2543Smrg		 GCPtr		pGC,
1073706f2543Smrg		 int		nseg,
1074706f2543Smrg		 xSegment	*pseg);
1075706f2543Smrg
1076706f2543Smrg
1077706f2543Smrgextern _X_EXPORT void
1078706f2543SmrgfbBresSolid32(DrawablePtr   pDrawable,
1079706f2543Smrg	      GCPtr	    pGC,
1080706f2543Smrg	      int	    dashOffset,
1081706f2543Smrg	      int	    signdx,
1082706f2543Smrg	      int	    signdy,
1083706f2543Smrg	      int	    axis,
1084706f2543Smrg	      int	    x,
1085706f2543Smrg	      int	    y,
1086706f2543Smrg	      int	    e,
1087706f2543Smrg	      int	    e1,
1088706f2543Smrg	      int	    e3,
1089706f2543Smrg	      int	    len);
1090706f2543Smrg
1091706f2543Smrgextern _X_EXPORT void
1092706f2543SmrgfbBresDash32(DrawablePtr    pDrawable,
1093706f2543Smrg	     GCPtr	    pGC,
1094706f2543Smrg	     int	    dashOffset,
1095706f2543Smrg	     int	    signdx,
1096706f2543Smrg	     int	    signdy,
1097706f2543Smrg	     int	    axis,
1098706f2543Smrg	     int	    x,
1099706f2543Smrg	     int	    y,
1100706f2543Smrg	     int	    e,
1101706f2543Smrg	     int	    e1,
1102706f2543Smrg	     int	    e3,
1103706f2543Smrg	     int	    len);
1104706f2543Smrg
1105706f2543Smrgextern _X_EXPORT void
1106706f2543SmrgfbDots32(FbBits	    *dst,
1107706f2543Smrg	 FbStride   dstStride,
1108706f2543Smrg	 int	    dstBpp,
1109706f2543Smrg	 BoxPtr	    pBox,
1110706f2543Smrg	 xPoint	    *pts,
1111706f2543Smrg	 int	    npt,
1112706f2543Smrg	 int	    xorg,
1113706f2543Smrg	 int	    yorg,
1114706f2543Smrg	 int	    xoff,
1115706f2543Smrg	 int	    yoff,
1116706f2543Smrg	 FbBits	    and,
1117706f2543Smrg	 FbBits	    xor);
1118706f2543Smrg
1119706f2543Smrgextern _X_EXPORT void
1120706f2543SmrgfbArc32(FbBits	    *dst,
1121706f2543Smrg	FbStride    dstStride,
1122706f2543Smrg	int	    dstBpp,
1123706f2543Smrg	xArc	    *arc,
1124706f2543Smrg	int	    dx,
1125706f2543Smrg	int	    dy,
1126706f2543Smrg	FbBits	    and,
1127706f2543Smrg	FbBits	    xor);
1128706f2543Smrg
1129706f2543Smrgextern _X_EXPORT void
1130706f2543SmrgfbGlyph32(FbBits    *dstLine,
1131706f2543Smrg	  FbStride  dstStride,
1132706f2543Smrg	  int	    dstBpp,
1133706f2543Smrg	  FbStip    *stipple,
1134706f2543Smrg	  FbBits    fg,
1135706f2543Smrg	  int	    height,
1136706f2543Smrg	  int	    shift);
1137706f2543Smrgextern _X_EXPORT void
1138706f2543SmrgfbPolyline32 (DrawablePtr   pDrawable,
1139706f2543Smrg	      GCPtr	    pGC,
1140706f2543Smrg	      int	    mode,
1141706f2543Smrg	      int	    npt,
1142706f2543Smrg	      DDXPointPtr   ptsOrig);
1143706f2543Smrg
1144706f2543Smrgextern _X_EXPORT void
1145706f2543SmrgfbPolySegment32 (DrawablePtr	pDrawable,
1146706f2543Smrg		 GCPtr		pGC,
1147706f2543Smrg		 int		nseg,
1148706f2543Smrg		 xSegment	*pseg);
1149706f2543Smrg
1150706f2543Smrg/*
1151706f2543Smrg * fbblt.c
1152706f2543Smrg */
1153706f2543Smrgextern _X_EXPORT void
1154706f2543SmrgfbBlt (FbBits   *src,
1155706f2543Smrg       FbStride	srcStride,
1156706f2543Smrg       int	srcX,
1157706f2543Smrg
1158706f2543Smrg       FbBits   *dst,
1159706f2543Smrg       FbStride dstStride,
1160706f2543Smrg       int	dstX,
1161706f2543Smrg
1162706f2543Smrg       int	width,
1163706f2543Smrg       int	height,
1164706f2543Smrg
1165706f2543Smrg       int	alu,
1166706f2543Smrg       FbBits	pm,
1167706f2543Smrg       int	bpp,
1168706f2543Smrg
1169706f2543Smrg       Bool	reverse,
1170706f2543Smrg       Bool	upsidedown);
1171706f2543Smrg
1172706f2543Smrgextern _X_EXPORT void
1173706f2543SmrgfbBlt24 (FbBits	    *srcLine,
1174706f2543Smrg	 FbStride   srcStride,
1175706f2543Smrg	 int	    srcX,
1176706f2543Smrg
1177706f2543Smrg	 FbBits	    *dstLine,
1178706f2543Smrg	 FbStride   dstStride,
1179706f2543Smrg	 int	    dstX,
1180706f2543Smrg
1181706f2543Smrg	 int	    width,
1182706f2543Smrg	 int	    height,
1183706f2543Smrg
1184706f2543Smrg	 int	    alu,
1185706f2543Smrg	 FbBits	    pm,
1186706f2543Smrg
1187706f2543Smrg	 Bool	    reverse,
1188706f2543Smrg	 Bool	    upsidedown);
1189706f2543Smrg
1190706f2543Smrgextern _X_EXPORT void
1191706f2543SmrgfbBltStip (FbStip   *src,
1192706f2543Smrg	   FbStride srcStride,	    /* in FbStip units, not FbBits units */
1193706f2543Smrg	   int	    srcX,
1194706f2543Smrg
1195706f2543Smrg	   FbStip   *dst,
1196706f2543Smrg	   FbStride dstStride,	    /* in FbStip units, not FbBits units */
1197706f2543Smrg	   int	    dstX,
1198706f2543Smrg
1199706f2543Smrg	   int	    width,
1200706f2543Smrg	   int	    height,
1201706f2543Smrg
1202706f2543Smrg	   int	    alu,
1203706f2543Smrg	   FbBits   pm,
1204706f2543Smrg	   int	    bpp);
1205706f2543Smrg
1206706f2543Smrg/*
1207706f2543Smrg * fbbltone.c
1208706f2543Smrg */
1209706f2543Smrgextern _X_EXPORT void
1210706f2543SmrgfbBltOne (FbStip   *src,
1211706f2543Smrg	  FbStride srcStride,
1212706f2543Smrg	  int	   srcX,
1213706f2543Smrg	  FbBits   *dst,
1214706f2543Smrg	  FbStride dstStride,
1215706f2543Smrg	  int	   dstX,
1216706f2543Smrg	  int	   dstBpp,
1217706f2543Smrg
1218706f2543Smrg	  int	   width,
1219706f2543Smrg	  int	   height,
1220706f2543Smrg
1221706f2543Smrg	  FbBits   fgand,
1222706f2543Smrg	  FbBits   fbxor,
1223706f2543Smrg	  FbBits   bgand,
1224706f2543Smrg	  FbBits   bgxor);
1225706f2543Smrg
1226706f2543Smrg#ifdef FB_24BIT
1227706f2543Smrgextern _X_EXPORT void
1228706f2543SmrgfbBltOne24 (FbStip    *src,
1229706f2543Smrg	  FbStride  srcStride,	    /* FbStip units per scanline */
1230706f2543Smrg	  int	    srcX,	    /* bit position of source */
1231706f2543Smrg	  FbBits    *dst,
1232706f2543Smrg	  FbStride  dstStride,	    /* FbBits units per scanline */
1233706f2543Smrg	  int	    dstX,	    /* bit position of dest */
1234706f2543Smrg	  int	    dstBpp,	    /* bits per destination unit */
1235706f2543Smrg
1236706f2543Smrg	  int	    width,	    /* width in bits of destination */
1237706f2543Smrg	  int	    height,	    /* height in scanlines */
1238706f2543Smrg
1239706f2543Smrg	  FbBits    fgand,	    /* rrop values */
1240706f2543Smrg	  FbBits    fgxor,
1241706f2543Smrg	  FbBits    bgand,
1242706f2543Smrg	  FbBits    bgxor);
1243706f2543Smrg#endif
1244706f2543Smrg
1245706f2543Smrgextern _X_EXPORT void
1246706f2543SmrgfbBltPlane (FbBits	    *src,
1247706f2543Smrg	    FbStride	    srcStride,
1248706f2543Smrg	    int		    srcX,
1249706f2543Smrg	    int		    srcBpp,
1250706f2543Smrg
1251706f2543Smrg	    FbStip	    *dst,
1252706f2543Smrg	    FbStride	    dstStride,
1253706f2543Smrg	    int		    dstX,
1254706f2543Smrg
1255706f2543Smrg	    int		    width,
1256706f2543Smrg	    int		    height,
1257706f2543Smrg
1258706f2543Smrg	    FbStip	    fgand,
1259706f2543Smrg	    FbStip	    fgxor,
1260706f2543Smrg	    FbStip	    bgand,
1261706f2543Smrg	    FbStip	    bgxor,
1262706f2543Smrg	    Pixel	    planeMask);
1263706f2543Smrg
1264706f2543Smrg/*
1265706f2543Smrg * fbcmap_mi.c
1266706f2543Smrg */
1267706f2543Smrgextern _X_EXPORT int
1268706f2543SmrgfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps);
1269706f2543Smrg
1270706f2543Smrgextern _X_EXPORT void
1271706f2543SmrgfbInstallColormap(ColormapPtr pmap);
1272706f2543Smrg
1273706f2543Smrgextern _X_EXPORT void
1274706f2543SmrgfbUninstallColormap(ColormapPtr pmap);
1275706f2543Smrg
1276706f2543Smrgextern _X_EXPORT void
1277706f2543SmrgfbResolveColor(unsigned short	*pred,
1278706f2543Smrg	       unsigned short	*pgreen,
1279706f2543Smrg	       unsigned short	*pblue,
1280706f2543Smrg	       VisualPtr	pVisual);
1281706f2543Smrg
1282706f2543Smrgextern _X_EXPORT Bool
1283706f2543SmrgfbInitializeColormap(ColormapPtr pmap);
1284706f2543Smrg
128588c603c7Stsutsuiextern _X_EXPORT Bool
128688c603c7StsutsuimfbCreateColormap(ColormapPtr pmap);
128788c603c7Stsutsui
1288706f2543Smrgextern _X_EXPORT int
1289706f2543SmrgfbExpandDirectColors (ColormapPtr   pmap,
1290706f2543Smrg		      int	    ndef,
1291706f2543Smrg		      xColorItem    *indefs,
1292706f2543Smrg		      xColorItem    *outdefs);
1293706f2543Smrg
1294706f2543Smrgextern _X_EXPORT Bool
1295706f2543SmrgfbCreateDefColormap(ScreenPtr pScreen);
1296706f2543Smrg
1297706f2543Smrgextern _X_EXPORT void
1298706f2543SmrgfbClearVisualTypes(void);
1299706f2543Smrg
1300706f2543Smrgextern _X_EXPORT Bool
1301706f2543SmrgfbHasVisualTypes (int depth);
1302706f2543Smrg
1303706f2543Smrgextern _X_EXPORT Bool
1304706f2543SmrgfbSetVisualTypes (int depth, int visuals, int bitsPerRGB);
1305706f2543Smrg
1306706f2543Smrgextern _X_EXPORT Bool
1307706f2543SmrgfbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
1308706f2543Smrg			  Pixel redMask, Pixel greenMask, Pixel blueMask);
1309706f2543Smrg
1310706f2543Smrgextern _X_EXPORT Bool
1311706f2543SmrgfbInitVisuals (VisualPtr    *visualp,
1312706f2543Smrg	       DepthPtr	    *depthp,
1313706f2543Smrg	       int	    *nvisualp,
1314706f2543Smrg	       int	    *ndepthp,
1315706f2543Smrg	       int	    *rootDepthp,
1316706f2543Smrg	       VisualID	    *defaultVisp,
1317706f2543Smrg	       unsigned long	sizes,
1318706f2543Smrg	       int	    bitsPerRGB);
1319706f2543Smrg
1320706f2543Smrg/*
1321706f2543Smrg * fbcopy.c
1322706f2543Smrg */
1323706f2543Smrg
1324706f2543Smrg/* Compatibility definition, to be removed at next ABI change. */
1325706f2543Smrgtypedef void   (*fbCopyProc) (DrawablePtr  pSrcDrawable,
1326706f2543Smrg                              DrawablePtr  pDstDrawable,
1327706f2543Smrg                              GCPtr        pGC,
1328706f2543Smrg                              BoxPtr       pDstBox,
1329706f2543Smrg                              int          nbox,
1330706f2543Smrg                              int          dx,
1331706f2543Smrg                              int          dy,
1332706f2543Smrg                              Bool         reverse,
1333706f2543Smrg                              Bool         upsidedown,
1334706f2543Smrg                              Pixel        bitplane,
1335706f2543Smrg                              void         *closure);
1336706f2543Smrg
1337706f2543Smrgextern _X_EXPORT void
1338706f2543SmrgfbCopyNtoN (DrawablePtr	pSrcDrawable,
1339706f2543Smrg	    DrawablePtr	pDstDrawable,
1340706f2543Smrg	    GCPtr	pGC,
1341706f2543Smrg	    BoxPtr	pbox,
1342706f2543Smrg	    int		nbox,
1343706f2543Smrg	    int		dx,
1344706f2543Smrg	    int		dy,
1345706f2543Smrg	    Bool	reverse,
1346706f2543Smrg	    Bool	upsidedown,
1347706f2543Smrg	    Pixel	bitplane,
1348706f2543Smrg	    void	*closure);
1349706f2543Smrg
1350706f2543Smrg/* Compatibility wrapper, to be removed at next ABI change. */
1351706f2543Smrgextern _X_EXPORT void
1352706f2543SmrgfbCopyRegion (DrawablePtr   pSrcDrawable,
1353706f2543Smrg             DrawablePtr   pDstDrawable,
1354706f2543Smrg             GCPtr         pGC,
1355706f2543Smrg             RegionPtr     pDstRegion,
1356706f2543Smrg             int           dx,
1357706f2543Smrg             int           dy,
1358706f2543Smrg             fbCopyProc    copyProc,
1359706f2543Smrg             Pixel         bitPlane,
1360706f2543Smrg             void          *closure);
1361706f2543Smrg
1362706f2543Smrg/* Compatibility wrapper, to be removed at next ABI change. */
1363706f2543Smrgextern _X_EXPORT RegionPtr
1364706f2543SmrgfbDoCopy (DrawablePtr  pSrcDrawable,
1365706f2543Smrg         DrawablePtr   pDstDrawable,
1366706f2543Smrg         GCPtr         pGC,
1367706f2543Smrg         int           xIn,
1368706f2543Smrg         int           yIn,
1369706f2543Smrg         int           widthSrc,
1370706f2543Smrg         int           heightSrc,
1371706f2543Smrg         int           xOut,
1372706f2543Smrg         int           yOut,
1373706f2543Smrg         fbCopyProc    copyProc,
1374706f2543Smrg         Pixel         bitplane,
1375706f2543Smrg         void          *closure);
1376706f2543Smrg
1377706f2543Smrgextern _X_EXPORT void
1378706f2543SmrgfbCopy1toN (DrawablePtr	pSrcDrawable,
1379706f2543Smrg	    DrawablePtr	pDstDrawable,
1380706f2543Smrg	    GCPtr	pGC,
1381706f2543Smrg	    BoxPtr	pbox,
1382706f2543Smrg	    int		nbox,
1383706f2543Smrg	    int		dx,
1384706f2543Smrg	    int		dy,
1385706f2543Smrg	    Bool	reverse,
1386706f2543Smrg	    Bool	upsidedown,
1387706f2543Smrg	    Pixel	bitplane,
1388706f2543Smrg	    void	*closure);
1389706f2543Smrg
1390706f2543Smrgextern _X_EXPORT void
1391706f2543SmrgfbCopyNto1 (DrawablePtr	pSrcDrawable,
1392706f2543Smrg	    DrawablePtr	pDstDrawable,
1393706f2543Smrg	    GCPtr	pGC,
1394706f2543Smrg	    BoxPtr	pbox,
1395706f2543Smrg	    int		nbox,
1396706f2543Smrg	    int		dx,
1397706f2543Smrg	    int		dy,
1398706f2543Smrg	    Bool	reverse,
1399706f2543Smrg	    Bool	upsidedown,
1400706f2543Smrg	    Pixel	bitplane,
1401706f2543Smrg	    void	*closure);
1402706f2543Smrg
1403706f2543Smrgextern _X_EXPORT RegionPtr
1404706f2543SmrgfbCopyArea (DrawablePtr	pSrcDrawable,
1405706f2543Smrg	    DrawablePtr	pDstDrawable,
1406706f2543Smrg	    GCPtr	pGC,
1407706f2543Smrg	    int		xIn,
1408706f2543Smrg	    int		yIn,
1409706f2543Smrg	    int		widthSrc,
1410706f2543Smrg	    int		heightSrc,
1411706f2543Smrg	    int		xOut,
1412706f2543Smrg	    int		yOut);
1413706f2543Smrg
1414706f2543Smrgextern _X_EXPORT RegionPtr
1415706f2543SmrgfbCopyPlane (DrawablePtr    pSrcDrawable,
1416706f2543Smrg	     DrawablePtr    pDstDrawable,
1417706f2543Smrg	     GCPtr	    pGC,
1418706f2543Smrg	     int	    xIn,
1419706f2543Smrg	     int	    yIn,
1420706f2543Smrg	     int	    widthSrc,
1421706f2543Smrg	     int	    heightSrc,
1422706f2543Smrg	     int	    xOut,
1423706f2543Smrg	     int	    yOut,
1424706f2543Smrg	     unsigned long  bitplane);
1425706f2543Smrg
1426706f2543Smrg/*
1427706f2543Smrg * fbfill.c
1428706f2543Smrg */
1429706f2543Smrgextern _X_EXPORT void
1430706f2543SmrgfbFill (DrawablePtr pDrawable,
1431706f2543Smrg	GCPtr	    pGC,
1432706f2543Smrg	int	    x,
1433706f2543Smrg	int	    y,
1434706f2543Smrg	int	    width,
1435706f2543Smrg	int	    height);
1436706f2543Smrg
1437706f2543Smrgextern _X_EXPORT void
1438706f2543SmrgfbSolidBoxClipped (DrawablePtr	pDrawable,
1439706f2543Smrg		   RegionPtr	pClip,
1440706f2543Smrg		   int		xa,
1441706f2543Smrg		   int		ya,
1442706f2543Smrg		   int		xb,
1443706f2543Smrg		   int		yb,
1444706f2543Smrg		   FbBits	and,
1445706f2543Smrg		   FbBits	xor);
1446706f2543Smrg
1447706f2543Smrg/*
1448706f2543Smrg * fbfillrect.c
1449706f2543Smrg */
1450706f2543Smrgextern _X_EXPORT void
1451706f2543SmrgfbPolyFillRect(DrawablePtr  pDrawable,
1452706f2543Smrg	       GCPtr	    pGC,
1453706f2543Smrg	       int	    nrectInit,
1454706f2543Smrg	       xRectangle   *prectInit);
1455706f2543Smrg
1456706f2543Smrg#define fbPolyFillArc miPolyFillArc
1457706f2543Smrg
1458706f2543Smrg#define fbFillPolygon miFillPolygon
1459706f2543Smrg
1460706f2543Smrg/*
1461706f2543Smrg * fbfillsp.c
1462706f2543Smrg */
1463706f2543Smrgextern _X_EXPORT void
1464706f2543SmrgfbFillSpans (DrawablePtr    pDrawable,
1465706f2543Smrg	     GCPtr	    pGC,
1466706f2543Smrg	     int	    nInit,
1467706f2543Smrg	     DDXPointPtr    pptInit,
1468706f2543Smrg	     int	    *pwidthInit,
1469706f2543Smrg	     int	    fSorted);
1470706f2543Smrg
1471706f2543Smrg
1472706f2543Smrg/*
1473706f2543Smrg * fbgc.c
1474706f2543Smrg */
1475706f2543Smrg
1476706f2543Smrgextern _X_EXPORT Bool
1477706f2543SmrgfbCreateGC(GCPtr pGC);
1478706f2543Smrg
1479706f2543Smrgextern _X_EXPORT void
1480706f2543SmrgfbPadPixmap (PixmapPtr pPixmap);
1481706f2543Smrg
1482706f2543Smrgextern _X_EXPORT void
1483706f2543SmrgfbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
1484706f2543Smrg
1485706f2543Smrg/*
1486706f2543Smrg * fbgetsp.c
1487706f2543Smrg */
1488706f2543Smrgextern _X_EXPORT void
1489706f2543SmrgfbGetSpans(DrawablePtr	pDrawable,
1490706f2543Smrg	   int		wMax,
1491706f2543Smrg	   DDXPointPtr	ppt,
1492706f2543Smrg	   int		*pwidth,
1493706f2543Smrg	   int		nspans,
1494706f2543Smrg	   char		*pchardstStart);
1495706f2543Smrg
1496706f2543Smrg/*
1497706f2543Smrg * fbglyph.c
1498706f2543Smrg */
1499706f2543Smrg
1500706f2543Smrgextern _X_EXPORT Bool
1501706f2543SmrgfbGlyphIn (RegionPtr	pRegion,
1502706f2543Smrg	   int		x,
1503706f2543Smrg	   int		y,
1504706f2543Smrg	   int		width,
1505706f2543Smrg	   int		height);
1506706f2543Smrg
1507706f2543Smrgextern _X_EXPORT void
1508706f2543SmrgfbPolyGlyphBlt (DrawablePtr	pDrawable,
1509706f2543Smrg		GCPtr		pGC,
1510706f2543Smrg		int		x,
1511706f2543Smrg		int		y,
1512706f2543Smrg		unsigned int	nglyph,
1513706f2543Smrg		CharInfoPtr	*ppci,
1514706f2543Smrg		pointer		pglyphBase);
1515706f2543Smrg
1516706f2543Smrgextern _X_EXPORT void
1517706f2543SmrgfbImageGlyphBlt (DrawablePtr	pDrawable,
1518706f2543Smrg		 GCPtr		pGC,
1519706f2543Smrg		 int		x,
1520706f2543Smrg		 int		y,
1521706f2543Smrg		 unsigned int	nglyph,
1522706f2543Smrg		 CharInfoPtr	*ppci,
1523706f2543Smrg		 pointer	pglyphBase);
1524706f2543Smrg
1525706f2543Smrg/*
1526706f2543Smrg * fbimage.c
1527706f2543Smrg */
1528706f2543Smrg
1529706f2543Smrgextern _X_EXPORT void
1530706f2543SmrgfbPutImage (DrawablePtr	pDrawable,
1531706f2543Smrg	    GCPtr	pGC,
1532706f2543Smrg	    int		depth,
1533706f2543Smrg	    int		x,
1534706f2543Smrg	    int		y,
1535706f2543Smrg	    int		w,
1536706f2543Smrg	    int		h,
1537706f2543Smrg	    int		leftPad,
1538706f2543Smrg	    int		format,
1539706f2543Smrg	    char	*pImage);
1540706f2543Smrg
1541706f2543Smrgextern _X_EXPORT void
1542706f2543SmrgfbPutZImage (DrawablePtr	pDrawable,
1543706f2543Smrg	     RegionPtr		pClip,
1544706f2543Smrg	     int		alu,
1545706f2543Smrg	     FbBits		pm,
1546706f2543Smrg	     int		x,
1547706f2543Smrg	     int		y,
1548706f2543Smrg	     int		width,
1549706f2543Smrg	     int		height,
1550706f2543Smrg	     FbStip		*src,
1551706f2543Smrg	     FbStride		srcStride);
1552706f2543Smrg
1553706f2543Smrgextern _X_EXPORT void
1554706f2543SmrgfbPutXYImage (DrawablePtr	pDrawable,
1555706f2543Smrg	      RegionPtr		pClip,
1556706f2543Smrg	      FbBits		fg,
1557706f2543Smrg	      FbBits		bg,
1558706f2543Smrg	      FbBits		pm,
1559706f2543Smrg	      int		alu,
1560706f2543Smrg	      Bool		opaque,
1561706f2543Smrg
1562706f2543Smrg	      int		x,
1563706f2543Smrg	      int		y,
1564706f2543Smrg	      int		width,
1565706f2543Smrg	      int		height,
1566706f2543Smrg
1567706f2543Smrg	      FbStip		*src,
1568706f2543Smrg	      FbStride		srcStride,
1569706f2543Smrg	      int		srcX);
1570706f2543Smrg
1571706f2543Smrgextern _X_EXPORT void
1572706f2543SmrgfbGetImage (DrawablePtr	    pDrawable,
1573706f2543Smrg	    int		    x,
1574706f2543Smrg	    int		    y,
1575706f2543Smrg	    int		    w,
1576706f2543Smrg	    int		    h,
1577706f2543Smrg	    unsigned int    format,
1578706f2543Smrg	    unsigned long   planeMask,
1579706f2543Smrg	    char	    *d);
1580706f2543Smrg/*
1581706f2543Smrg * fbline.c
1582706f2543Smrg */
1583706f2543Smrg
1584706f2543Smrgextern _X_EXPORT void
1585706f2543SmrgfbZeroLine (DrawablePtr	pDrawable,
1586706f2543Smrg	    GCPtr	pGC,
1587706f2543Smrg	    int		mode,
1588706f2543Smrg	    int		npt,
1589706f2543Smrg	    DDXPointPtr	ppt);
1590706f2543Smrg
1591706f2543Smrgextern _X_EXPORT void
1592706f2543SmrgfbZeroSegment (DrawablePtr  pDrawable,
1593706f2543Smrg	       GCPtr	    pGC,
1594706f2543Smrg	       int	    nseg,
1595706f2543Smrg	       xSegment	    *pSegs);
1596706f2543Smrg
1597706f2543Smrgextern _X_EXPORT void
1598706f2543SmrgfbPolyLine (DrawablePtr	pDrawable,
1599706f2543Smrg	    GCPtr	pGC,
1600706f2543Smrg	    int		mode,
1601706f2543Smrg	    int		npt,
1602706f2543Smrg	    DDXPointPtr	ppt);
1603706f2543Smrg
1604706f2543Smrgextern _X_EXPORT void
1605706f2543SmrgfbFixCoordModePrevious (int npt,
1606706f2543Smrg			DDXPointPtr ppt);
1607706f2543Smrg
1608706f2543Smrgextern _X_EXPORT void
1609706f2543SmrgfbPolySegment (DrawablePtr  pDrawable,
1610706f2543Smrg	       GCPtr	    pGC,
1611706f2543Smrg	       int	    nseg,
1612706f2543Smrg	       xSegment	    *pseg);
1613706f2543Smrg
1614706f2543Smrg#define fbPolyRectangle	miPolyRectangle
1615706f2543Smrg
1616706f2543Smrg/*
1617706f2543Smrg * fbpict.c
1618706f2543Smrg */
1619706f2543Smrg
1620706f2543Smrgextern _X_EXPORT Bool
1621706f2543SmrgfbPictureInit (ScreenPtr pScreen,
1622706f2543Smrg	       PictFormatPtr formats,
1623706f2543Smrg	       int nformats);
1624706f2543Smrg
1625706f2543Smrg/*
1626706f2543Smrg * fbpixmap.c
1627706f2543Smrg */
1628706f2543Smrg
1629706f2543Smrgextern _X_EXPORT PixmapPtr
1630706f2543SmrgfbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
1631706f2543Smrg		   unsigned usage_hint);
1632706f2543Smrg
1633706f2543Smrgextern _X_EXPORT PixmapPtr
1634706f2543SmrgfbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
1635706f2543Smrg		unsigned usage_hint);
1636706f2543Smrg
1637706f2543Smrgextern _X_EXPORT Bool
1638706f2543SmrgfbDestroyPixmap (PixmapPtr pPixmap);
1639706f2543Smrg
1640706f2543Smrgextern _X_EXPORT RegionPtr
1641706f2543SmrgfbPixmapToRegion(PixmapPtr pPix);
1642706f2543Smrg
1643706f2543Smrg/*
1644706f2543Smrg * fbpoint.c
1645706f2543Smrg */
1646706f2543Smrg
1647706f2543Smrgextern _X_EXPORT void
1648706f2543SmrgfbDots (FbBits	    *dstOrig,
1649706f2543Smrg	FbStride    dstStride,
1650706f2543Smrg	int	    dstBpp,
1651706f2543Smrg	BoxPtr	    pBox,
1652706f2543Smrg	xPoint	    *pts,
1653706f2543Smrg	int	    npt,
1654706f2543Smrg	int	    xorg,
1655706f2543Smrg	int	    yorg,
1656706f2543Smrg	int	    xoff,
1657706f2543Smrg	int	    yoff,
1658706f2543Smrg	FbBits	    andOrig,
1659706f2543Smrg	FbBits	    xorOrig);
1660706f2543Smrg
1661706f2543Smrgextern _X_EXPORT void
1662706f2543SmrgfbPolyPoint (DrawablePtr    pDrawable,
1663706f2543Smrg	     GCPtr	    pGC,
1664706f2543Smrg	     int	    mode,
1665706f2543Smrg	     int	    npt,
1666706f2543Smrg	     xPoint	    *pptInit);
1667706f2543Smrg
1668706f2543Smrg/*
1669706f2543Smrg * fbpush.c
1670706f2543Smrg */
1671706f2543Smrgextern _X_EXPORT void
1672706f2543SmrgfbPushPattern (DrawablePtr  pDrawable,
1673706f2543Smrg	       GCPtr	    pGC,
1674706f2543Smrg
1675706f2543Smrg	       FbStip	    *src,
1676706f2543Smrg	       FbStride	    srcStride,
1677706f2543Smrg	       int	    srcX,
1678706f2543Smrg
1679706f2543Smrg	       int	    x,
1680706f2543Smrg	       int	    y,
1681706f2543Smrg
1682706f2543Smrg	       int	    width,
1683706f2543Smrg	       int	    height);
1684706f2543Smrg
1685706f2543Smrgextern _X_EXPORT void
1686706f2543SmrgfbPushFill (DrawablePtr	pDrawable,
1687706f2543Smrg	    GCPtr	pGC,
1688706f2543Smrg
1689706f2543Smrg	    FbStip	*src,
1690706f2543Smrg	    FbStride	srcStride,
1691706f2543Smrg	    int		srcX,
1692706f2543Smrg
1693706f2543Smrg	    int		x,
1694706f2543Smrg	    int		y,
1695706f2543Smrg	    int		width,
1696706f2543Smrg	    int		height);
1697706f2543Smrg
1698706f2543Smrgextern _X_EXPORT void
1699706f2543SmrgfbPushImage (DrawablePtr    pDrawable,
1700706f2543Smrg	     GCPtr	    pGC,
1701706f2543Smrg
1702706f2543Smrg	     FbStip	    *src,
1703706f2543Smrg	     FbStride	    srcStride,
1704706f2543Smrg	     int	    srcX,
1705706f2543Smrg
1706706f2543Smrg	     int	    x,
1707706f2543Smrg	     int	    y,
1708706f2543Smrg	     int	    width,
1709706f2543Smrg	     int	    height);
1710706f2543Smrg
1711706f2543Smrgextern _X_EXPORT void
1712706f2543SmrgfbPushPixels (GCPtr	    pGC,
1713706f2543Smrg	      PixmapPtr	    pBitmap,
1714706f2543Smrg	      DrawablePtr   pDrawable,
1715706f2543Smrg	      int	    dx,
1716706f2543Smrg	      int	    dy,
1717706f2543Smrg	      int	    xOrg,
1718706f2543Smrg	      int	    yOrg);
1719706f2543Smrg
1720706f2543Smrg
1721706f2543Smrg/*
1722706f2543Smrg * fbscreen.c
1723706f2543Smrg */
1724706f2543Smrg
1725706f2543Smrgextern _X_EXPORT Bool
1726706f2543SmrgfbCloseScreen (int indx, ScreenPtr pScreen);
1727706f2543Smrg
1728706f2543Smrgextern _X_EXPORT Bool
1729706f2543SmrgfbRealizeFont(ScreenPtr pScreen, FontPtr pFont);
1730706f2543Smrg
1731706f2543Smrgextern _X_EXPORT Bool
1732706f2543SmrgfbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
1733706f2543Smrg
1734706f2543Smrgextern _X_EXPORT void
1735706f2543SmrgfbQueryBestSize (int class,
1736706f2543Smrg		 unsigned short *width, unsigned short *height,
1737706f2543Smrg		 ScreenPtr pScreen);
1738706f2543Smrg
1739706f2543Smrgextern _X_EXPORT PixmapPtr
1740706f2543Smrg_fbGetWindowPixmap (WindowPtr pWindow);
1741706f2543Smrg
1742706f2543Smrgextern _X_EXPORT void
1743706f2543Smrg_fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap);
1744706f2543Smrg
1745706f2543Smrgextern _X_EXPORT Bool
1746706f2543SmrgfbSetupScreen(ScreenPtr	pScreen,
1747706f2543Smrg	      pointer	pbits,		/* pointer to screen bitmap */
1748706f2543Smrg	      int	xsize, 		/* in pixels */
1749706f2543Smrg	      int	ysize,
1750706f2543Smrg	      int	dpix,		/* dots per inch */
1751706f2543Smrg	      int	dpiy,
1752706f2543Smrg	      int	width,		/* pixel width of frame buffer */
1753706f2543Smrg	      int	bpp);		/* bits per pixel of frame buffer */
1754706f2543Smrg
1755706f2543Smrgextern _X_EXPORT Bool
1756706f2543SmrgwfbFinishScreenInit(ScreenPtr	pScreen,
1757706f2543Smrg		    pointer	pbits,
1758706f2543Smrg		    int		xsize,
1759706f2543Smrg		    int		ysize,
1760706f2543Smrg		    int		dpix,
1761706f2543Smrg		    int		dpiy,
1762706f2543Smrg		    int		width,
1763706f2543Smrg		    int		bpp,
1764706f2543Smrg		    SetupWrapProcPtr setupWrap,
1765706f2543Smrg		    FinishWrapProcPtr finishWrap);
1766706f2543Smrg
1767706f2543Smrgextern _X_EXPORT Bool
1768706f2543SmrgwfbScreenInit(ScreenPtr	pScreen,
1769706f2543Smrg	      pointer	pbits,
1770706f2543Smrg	      int	xsize,
1771706f2543Smrg	      int	ysize,
1772706f2543Smrg	      int	dpix,
1773706f2543Smrg	      int	dpiy,
1774706f2543Smrg	      int	width,
1775706f2543Smrg	      int	bpp,
1776706f2543Smrg	      SetupWrapProcPtr setupWrap,
1777706f2543Smrg	      FinishWrapProcPtr finishWrap);
1778706f2543Smrg
1779706f2543Smrgextern _X_EXPORT Bool
1780706f2543SmrgfbFinishScreenInit(ScreenPtr	pScreen,
1781706f2543Smrg		   pointer	pbits,
1782706f2543Smrg		   int		xsize,
1783706f2543Smrg		   int		ysize,
1784706f2543Smrg		   int		dpix,
1785706f2543Smrg		   int		dpiy,
1786706f2543Smrg		   int		width,
1787706f2543Smrg		   int		bpp);
1788706f2543Smrg
1789706f2543Smrgextern _X_EXPORT Bool
1790706f2543SmrgfbScreenInit(ScreenPtr	pScreen,
1791706f2543Smrg	     pointer	pbits,
1792706f2543Smrg	     int	xsize,
1793706f2543Smrg	     int	ysize,
1794706f2543Smrg	     int	dpix,
1795706f2543Smrg	     int	dpiy,
1796706f2543Smrg	     int	width,
1797706f2543Smrg	     int	bpp);
1798706f2543Smrg
1799706f2543Smrg/*
1800706f2543Smrg * fbseg.c
1801706f2543Smrg */
1802706f2543Smrgtypedef void	FbBres (DrawablePtr	pDrawable,
1803706f2543Smrg			GCPtr		pGC,
1804706f2543Smrg			int		dashOffset,
1805706f2543Smrg			int		signdx,
1806706f2543Smrg			int		signdy,
1807706f2543Smrg			int		axis,
1808706f2543Smrg			int		x,
1809706f2543Smrg			int		y,
1810706f2543Smrg			int		e,
1811706f2543Smrg			int		e1,
1812706f2543Smrg			int		e3,
1813706f2543Smrg			int		len);
1814706f2543Smrg
1815706f2543Smrgextern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash;
1816706f2543Smrg/*
1817706f2543Smrg * fbsetsp.c
1818706f2543Smrg */
1819706f2543Smrg
1820706f2543Smrgextern _X_EXPORT void
1821706f2543SmrgfbSetSpans (DrawablePtr	    pDrawable,
1822706f2543Smrg	    GCPtr	    pGC,
1823706f2543Smrg	    char	    *src,
1824706f2543Smrg	    DDXPointPtr	    ppt,
1825706f2543Smrg	    int		    *pwidth,
1826706f2543Smrg	    int		    nspans,
1827706f2543Smrg	    int		    fSorted);
1828706f2543Smrg
1829706f2543Smrgextern _X_EXPORT FbBres *
1830706f2543SmrgfbSelectBres (DrawablePtr   pDrawable,
1831706f2543Smrg	      GCPtr	    pGC);
1832706f2543Smrg
1833706f2543Smrgextern _X_EXPORT void
1834706f2543SmrgfbBres (DrawablePtr	pDrawable,
1835706f2543Smrg	GCPtr		pGC,
1836706f2543Smrg	int		dashOffset,
1837706f2543Smrg	int		signdx,
1838706f2543Smrg	int		signdy,
1839706f2543Smrg	int		axis,
1840706f2543Smrg	int		x,
1841706f2543Smrg	int		y,
1842706f2543Smrg	int		e,
1843706f2543Smrg	int		e1,
1844706f2543Smrg	int		e3,
1845706f2543Smrg	int		len);
1846706f2543Smrg
1847706f2543Smrgextern _X_EXPORT void
1848706f2543SmrgfbSegment (DrawablePtr	pDrawable,
1849706f2543Smrg	   GCPtr	pGC,
1850706f2543Smrg	   int		xa,
1851706f2543Smrg	   int		ya,
1852706f2543Smrg	   int		xb,
1853706f2543Smrg	   int		yb,
1854706f2543Smrg	   Bool		drawLast,
1855706f2543Smrg	   int		*dashOffset);
1856706f2543Smrg
1857706f2543Smrg
1858706f2543Smrg/*
1859706f2543Smrg * fbsolid.c
1860706f2543Smrg */
1861706f2543Smrg
1862706f2543Smrgextern _X_EXPORT void
1863706f2543SmrgfbSolid (FbBits	    *dst,
1864706f2543Smrg	 FbStride   dstStride,
1865706f2543Smrg	 int	    dstX,
1866706f2543Smrg	 int	    bpp,
1867706f2543Smrg
1868706f2543Smrg	 int	    width,
1869706f2543Smrg	 int	    height,
1870706f2543Smrg
1871706f2543Smrg	 FbBits	    and,
1872706f2543Smrg	 FbBits	    xor);
1873706f2543Smrg
1874706f2543Smrg#ifdef FB_24BIT
1875706f2543Smrgextern _X_EXPORT void
1876706f2543SmrgfbSolid24 (FbBits   *dst,
1877706f2543Smrg	   FbStride dstStride,
1878706f2543Smrg	   int	    dstX,
1879706f2543Smrg
1880706f2543Smrg	   int	    width,
1881706f2543Smrg	   int	    height,
1882706f2543Smrg
1883706f2543Smrg	   FbBits   and,
1884706f2543Smrg	   FbBits   xor);
1885706f2543Smrg#endif
1886706f2543Smrg
1887706f2543Smrg/*
1888706f2543Smrg * fbstipple.c
1889706f2543Smrg */
1890706f2543Smrg
1891706f2543Smrgextern _X_EXPORT void
1892706f2543SmrgfbTransparentSpan (FbBits   *dst,
1893706f2543Smrg		   FbBits   stip,
1894706f2543Smrg		   FbBits   fgxor,
1895706f2543Smrg		   int	    n);
1896706f2543Smrg
1897706f2543Smrgextern _X_EXPORT void
1898706f2543SmrgfbEvenStipple (FbBits   *dst,
1899706f2543Smrg	       FbStride dstStride,
1900706f2543Smrg	       int	dstX,
1901706f2543Smrg	       int	dstBpp,
1902706f2543Smrg
1903706f2543Smrg	       int	width,
1904706f2543Smrg	       int	height,
1905706f2543Smrg
1906706f2543Smrg	       FbStip   *stip,
1907706f2543Smrg	       FbStride	stipStride,
1908706f2543Smrg	       int	stipHeight,
1909706f2543Smrg
1910706f2543Smrg	       FbBits   fgand,
1911706f2543Smrg	       FbBits   fgxor,
1912706f2543Smrg	       FbBits   bgand,
1913706f2543Smrg	       FbBits   bgxor,
1914706f2543Smrg
1915706f2543Smrg	       int	xRot,
1916706f2543Smrg	       int	yRot);
1917706f2543Smrg
1918706f2543Smrgextern _X_EXPORT void
1919706f2543SmrgfbOddStipple (FbBits	*dst,
1920706f2543Smrg	      FbStride	dstStride,
1921706f2543Smrg	      int	dstX,
1922706f2543Smrg	      int	dstBpp,
1923706f2543Smrg
1924706f2543Smrg	      int	width,
1925706f2543Smrg	      int	height,
1926706f2543Smrg
1927706f2543Smrg	      FbStip	*stip,
1928706f2543Smrg	      FbStride	stipStride,
1929706f2543Smrg	      int	stipWidth,
1930706f2543Smrg	      int	stipHeight,
1931706f2543Smrg
1932706f2543Smrg	      FbBits	fgand,
1933706f2543Smrg	      FbBits	fgxor,
1934706f2543Smrg	      FbBits	bgand,
1935706f2543Smrg	      FbBits	bgxor,
1936706f2543Smrg
1937706f2543Smrg	      int	xRot,
1938706f2543Smrg	      int	yRot);
1939706f2543Smrg
1940706f2543Smrgextern _X_EXPORT void
1941706f2543SmrgfbStipple (FbBits   *dst,
1942706f2543Smrg	   FbStride dstStride,
1943706f2543Smrg	   int	    dstX,
1944706f2543Smrg	   int	    dstBpp,
1945706f2543Smrg
1946706f2543Smrg	   int	    width,
1947706f2543Smrg	   int	    height,
1948706f2543Smrg
1949706f2543Smrg	   FbStip   *stip,
1950706f2543Smrg	   FbStride stipStride,
1951706f2543Smrg	   int	    stipWidth,
1952706f2543Smrg	   int	    stipHeight,
1953706f2543Smrg	   Bool	    even,
1954706f2543Smrg
1955706f2543Smrg	   FbBits   fgand,
1956706f2543Smrg	   FbBits   fgxor,
1957706f2543Smrg	   FbBits   bgand,
1958706f2543Smrg	   FbBits   bgxor,
1959706f2543Smrg
1960706f2543Smrg	   int	    xRot,
1961706f2543Smrg	   int	    yRot);
1962706f2543Smrg
1963706f2543Smrg/*
1964706f2543Smrg * fbtile.c
1965706f2543Smrg */
1966706f2543Smrg
1967706f2543Smrgextern _X_EXPORT void
1968706f2543SmrgfbEvenTile (FbBits	*dst,
1969706f2543Smrg	    FbStride	dstStride,
1970706f2543Smrg	    int		dstX,
1971706f2543Smrg
1972706f2543Smrg	    int		width,
1973706f2543Smrg	    int		height,
1974706f2543Smrg
1975706f2543Smrg	    FbBits	*tile,
1976706f2543Smrg	    FbStride	tileStride,
1977706f2543Smrg	    int		tileHeight,
1978706f2543Smrg
1979706f2543Smrg	    int		alu,
1980706f2543Smrg	    FbBits	pm,
1981706f2543Smrg	    int		xRot,
1982706f2543Smrg	    int		yRot);
1983706f2543Smrg
1984706f2543Smrgextern _X_EXPORT void
1985706f2543SmrgfbOddTile (FbBits	*dst,
1986706f2543Smrg	   FbStride	dstStride,
1987706f2543Smrg	   int		dstX,
1988706f2543Smrg
1989706f2543Smrg	   int		width,
1990706f2543Smrg	   int		height,
1991706f2543Smrg
1992706f2543Smrg	   FbBits	*tile,
1993706f2543Smrg	   FbStride	tileStride,
1994706f2543Smrg	   int		tileWidth,
1995706f2543Smrg	   int		tileHeight,
1996706f2543Smrg
1997706f2543Smrg	   int		alu,
1998706f2543Smrg	   FbBits	pm,
1999706f2543Smrg	   int		bpp,
2000706f2543Smrg
2001706f2543Smrg	   int		xRot,
2002706f2543Smrg	   int		yRot);
2003706f2543Smrg
2004706f2543Smrgextern _X_EXPORT void
2005706f2543SmrgfbTile (FbBits	    *dst,
2006706f2543Smrg	FbStride    dstStride,
2007706f2543Smrg	int	    dstX,
2008706f2543Smrg
2009706f2543Smrg	int	    width,
2010706f2543Smrg	int	    height,
2011706f2543Smrg
2012706f2543Smrg	FbBits	    *tile,
2013706f2543Smrg	FbStride    tileStride,
2014706f2543Smrg	int	    tileWidth,
2015706f2543Smrg	int	    tileHeight,
2016706f2543Smrg
2017706f2543Smrg	int	    alu,
2018706f2543Smrg	FbBits	    pm,
2019706f2543Smrg	int	    bpp,
2020706f2543Smrg
2021706f2543Smrg	int	    xRot,
2022706f2543Smrg	int	    yRot);
2023706f2543Smrg
2024706f2543Smrg/*
2025706f2543Smrg * fbutil.c
2026706f2543Smrg */
2027706f2543Smrgextern _X_EXPORT FbBits
2028706f2543SmrgfbReplicatePixel (Pixel p, int bpp);
2029706f2543Smrg
2030706f2543Smrgextern _X_EXPORT void
2031706f2543SmrgfbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp);
2032706f2543Smrg
2033706f2543Smrg#ifdef FB_ACCESS_WRAPPER
2034706f2543Smrgextern _X_EXPORT ReadMemoryProcPtr wfbReadMemory;
2035706f2543Smrgextern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
2036706f2543Smrg#endif
2037706f2543Smrg
2038706f2543Smrg/*
2039706f2543Smrg * fbwindow.c
2040706f2543Smrg */
2041706f2543Smrg
2042706f2543Smrgextern _X_EXPORT Bool
2043706f2543SmrgfbCreateWindow(WindowPtr pWin);
2044706f2543Smrg
2045706f2543Smrgextern _X_EXPORT Bool
2046706f2543SmrgfbDestroyWindow(WindowPtr pWin);
2047706f2543Smrg
2048706f2543Smrgextern _X_EXPORT Bool
2049706f2543SmrgfbMapWindow(WindowPtr pWindow);
2050706f2543Smrg
2051706f2543Smrgextern _X_EXPORT Bool
2052706f2543SmrgfbPositionWindow(WindowPtr pWin, int x, int y);
2053706f2543Smrg
2054706f2543Smrgextern _X_EXPORT Bool
2055706f2543SmrgfbUnmapWindow(WindowPtr pWindow);
2056706f2543Smrg
2057706f2543Smrgextern _X_EXPORT void
2058706f2543SmrgfbCopyWindowProc (DrawablePtr	pSrcDrawable,
2059706f2543Smrg		  DrawablePtr	pDstDrawable,
2060706f2543Smrg		  GCPtr		pGC,
2061706f2543Smrg		  BoxPtr	pbox,
2062706f2543Smrg		  int		nbox,
2063706f2543Smrg		  int		dx,
2064706f2543Smrg		  int		dy,
2065706f2543Smrg		  Bool		reverse,
2066706f2543Smrg		  Bool		upsidedown,
2067706f2543Smrg		  Pixel		bitplane,
2068706f2543Smrg		  void		*closure);
2069706f2543Smrg
2070706f2543Smrgextern _X_EXPORT void
2071706f2543SmrgfbCopyWindow(WindowPtr	    pWin,
2072706f2543Smrg	     DDXPointRec    ptOldOrg,
2073706f2543Smrg	     RegionPtr	    prgnSrc);
2074706f2543Smrg
2075706f2543Smrgextern _X_EXPORT Bool
2076706f2543SmrgfbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
2077706f2543Smrg
2078706f2543Smrgextern _X_EXPORT void
2079706f2543SmrgfbFillRegionSolid (DrawablePtr	pDrawable,
2080706f2543Smrg		   RegionPtr	pRegion,
2081706f2543Smrg		   FbBits	and,
2082706f2543Smrg		   FbBits	xor);
2083706f2543Smrg
2084706f2543Smrgextern _X_EXPORT pixman_image_t *
2085706f2543Smrgimage_from_pict (PicturePtr	pict,
2086706f2543Smrg		 Bool		has_clip,
2087706f2543Smrg		 int		*xoff,
2088706f2543Smrg		 int		*yoff);
2089706f2543Smrg
2090706f2543Smrgextern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
2091706f2543Smrg
2092706f2543Smrg#endif /* _FB_H_ */
2093706f2543Smrg
2094