xref: /OK3568_Linux_fs/external/xserver/fb/fb.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright © 1998 Keith Packard
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Permission to use, copy, modify, distribute, and sell this software and its
6*4882a593Smuzhiyun  * documentation for any purpose is hereby granted without fee, provided that
7*4882a593Smuzhiyun  * the above copyright notice appear in all copies and that both that
8*4882a593Smuzhiyun  * copyright notice and this permission notice appear in supporting
9*4882a593Smuzhiyun  * documentation, and that the name of Keith Packard not be used in
10*4882a593Smuzhiyun  * advertising or publicity pertaining to distribution of the software without
11*4882a593Smuzhiyun  * specific, written prior permission.  Keith Packard makes no
12*4882a593Smuzhiyun  * representations about the suitability of this software for any purpose.  It
13*4882a593Smuzhiyun  * is provided "as is" without express or implied warranty.
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16*4882a593Smuzhiyun  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17*4882a593Smuzhiyun  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18*4882a593Smuzhiyun  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19*4882a593Smuzhiyun  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20*4882a593Smuzhiyun  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21*4882a593Smuzhiyun  * PERFORMANCE OF THIS SOFTWARE.
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #ifndef _FB_H_
25*4882a593Smuzhiyun #define _FB_H_
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #include <X11/X.h>
28*4882a593Smuzhiyun #include <pixman.h>
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #include "scrnintstr.h"
31*4882a593Smuzhiyun #include "pixmap.h"
32*4882a593Smuzhiyun #include "pixmapstr.h"
33*4882a593Smuzhiyun #include "region.h"
34*4882a593Smuzhiyun #include "gcstruct.h"
35*4882a593Smuzhiyun #include "colormap.h"
36*4882a593Smuzhiyun #include "miscstruct.h"
37*4882a593Smuzhiyun #include "servermd.h"
38*4882a593Smuzhiyun #include "windowstr.h"
39*4882a593Smuzhiyun #include "privates.h"
40*4882a593Smuzhiyun #include "mi.h"
41*4882a593Smuzhiyun #include "migc.h"
42*4882a593Smuzhiyun #include "picturestr.h"
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #ifdef FB_ACCESS_WRAPPER
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #include "wfbrename.h"
47*4882a593Smuzhiyun #define FBPREFIX(x) wfb##x
48*4882a593Smuzhiyun #define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr))))
49*4882a593Smuzhiyun #define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr))))
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #define MEMCPY_WRAPPED(dst, src, size) do {                       \
52*4882a593Smuzhiyun     size_t _i;                                                    \
53*4882a593Smuzhiyun     CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src);           \
54*4882a593Smuzhiyun     for(_i = 0; _i < size; _i++) {                                \
55*4882a593Smuzhiyun         WRITE(_dst +_i, READ(_src + _i));                         \
56*4882a593Smuzhiyun     }                                                             \
57*4882a593Smuzhiyun } while(0)
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define MEMSET_WRAPPED(dst, val, size) do {                       \
60*4882a593Smuzhiyun     size_t _i;                                                    \
61*4882a593Smuzhiyun     CARD8 *_dst = (CARD8*)(dst);                                  \
62*4882a593Smuzhiyun     for(_i = 0; _i < size; _i++) {                                \
63*4882a593Smuzhiyun         WRITE(_dst +_i, (val));                                   \
64*4882a593Smuzhiyun     }                                                             \
65*4882a593Smuzhiyun } while(0)
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #else
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define FBPREFIX(x) fb##x
70*4882a593Smuzhiyun #define WRITE(ptr, val) (*(ptr) = (val))
71*4882a593Smuzhiyun #define READ(ptr) (*(ptr))
72*4882a593Smuzhiyun #define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size))
73*4882a593Smuzhiyun #define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size))
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun #endif
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun /*
78*4882a593Smuzhiyun  * This single define controls the basic size of data manipulated
79*4882a593Smuzhiyun  * by this software; it must be log2(sizeof (FbBits) * 8)
80*4882a593Smuzhiyun  */
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun #ifndef FB_SHIFT
83*4882a593Smuzhiyun #define FB_SHIFT    LOG2_BITMAP_PAD
84*4882a593Smuzhiyun #endif
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun #define FB_UNIT	    (1 << FB_SHIFT)
87*4882a593Smuzhiyun #define FB_MASK	    (FB_UNIT - 1)
88*4882a593Smuzhiyun #define FB_ALLONES  ((FbBits) -1)
89*4882a593Smuzhiyun #if GLYPHPADBYTES != 4
90*4882a593Smuzhiyun #error "GLYPHPADBYTES must be 4"
91*4882a593Smuzhiyun #endif
92*4882a593Smuzhiyun #define FB_STIP_SHIFT	LOG2_BITMAP_PAD
93*4882a593Smuzhiyun #define FB_STIP_UNIT	(1 << FB_STIP_SHIFT)
94*4882a593Smuzhiyun #define FB_STIP_MASK	(FB_STIP_UNIT - 1)
95*4882a593Smuzhiyun #define FB_STIP_ALLONES	((FbStip) -1)
96*4882a593Smuzhiyun #define FB_STIP_ODDSTRIDE(s)	(((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0)
97*4882a593Smuzhiyun #define FB_STIP_ODDPTR(p)	((((long) (p)) & (FB_MASK >> 3)) != 0)
98*4882a593Smuzhiyun #define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
99*4882a593Smuzhiyun #define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
100*4882a593Smuzhiyun #define FbFullMask(n)   ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #if FB_SHIFT == 5
103*4882a593Smuzhiyun typedef CARD32 FbBits;
104*4882a593Smuzhiyun #else
105*4882a593Smuzhiyun #error "Unsupported FB_SHIFT"
106*4882a593Smuzhiyun #endif
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun #if LOG2_BITMAP_PAD == FB_SHIFT
109*4882a593Smuzhiyun typedef FbBits FbStip;
110*4882a593Smuzhiyun #endif
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun typedef int FbStride;
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun #ifdef FB_DEBUG
115*4882a593Smuzhiyun extern _X_EXPORT void fbValidateDrawable(DrawablePtr d);
116*4882a593Smuzhiyun extern _X_EXPORT void fbInitializeDrawable(DrawablePtr d);
117*4882a593Smuzhiyun extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun #define FB_HEAD_BITS   (FbStip) (0xbaadf00d)
120*4882a593Smuzhiyun #define FB_TAIL_BITS   (FbStip) (0xbaddf0ad)
121*4882a593Smuzhiyun #else
122*4882a593Smuzhiyun #define fbValidateDrawable(d)
123*4882a593Smuzhiyun #define fdInitializeDrawable(d)
124*4882a593Smuzhiyun #endif
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun #include "fbrop.h"
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #if BITMAP_BIT_ORDER == LSBFirst
129*4882a593Smuzhiyun #define FbScrLeft(x,n)	((x) >> (n))
130*4882a593Smuzhiyun #define FbScrRight(x,n)	((x) << (n))
131*4882a593Smuzhiyun /* #define FbLeftBits(x,n)	((x) & ((((FbBits) 1) << (n)) - 1)) */
132*4882a593Smuzhiyun #define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1))
133*4882a593Smuzhiyun #define FbStipMoveLsb(x,s,n)	(FbStipRight (x,(s)-(n)))
134*4882a593Smuzhiyun #define FbPatternOffsetBits	0
135*4882a593Smuzhiyun #else
136*4882a593Smuzhiyun #define FbScrLeft(x,n)	((x) << (n))
137*4882a593Smuzhiyun #define FbScrRight(x,n)	((x) >> (n))
138*4882a593Smuzhiyun /* #define FbLeftBits(x,n)	((x) >> (FB_UNIT - (n))) */
139*4882a593Smuzhiyun #define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n)))
140*4882a593Smuzhiyun #define FbStipMoveLsb(x,s,n)	(x)
141*4882a593Smuzhiyun #define FbPatternOffsetBits	(sizeof (FbBits) - 1)
142*4882a593Smuzhiyun #endif
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #include "micoord.h"
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun #define FbStipLeft(x,n)	FbScrLeft(x,n)
147*4882a593Smuzhiyun #define FbStipRight(x,n) FbScrRight(x,n)
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun #define FbRotLeft(x,n)	FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0)
150*4882a593Smuzhiyun #define FbRotRight(x,n)	FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0)
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun #define FbRotStipLeft(x,n)  FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0)
153*4882a593Smuzhiyun #define FbRotStipRight(x,n)  FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0)
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun #define FbLeftMask(x)	    ( ((x) & FB_MASK) ? \
156*4882a593Smuzhiyun 			     FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0)
157*4882a593Smuzhiyun #define FbRightMask(x)	    ( ((FB_UNIT - (x)) & FB_MASK) ? \
158*4882a593Smuzhiyun 			     FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0)
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun #define FbLeftStipMask(x)   ( ((x) & FB_STIP_MASK) ? \
161*4882a593Smuzhiyun 			     FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0)
162*4882a593Smuzhiyun #define FbRightStipMask(x)  ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
163*4882a593Smuzhiyun 			     FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun #define FbBitsMask(x,w)	(FbScrRight(FB_ALLONES,(x) & FB_MASK) & \
166*4882a593Smuzhiyun 			 FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK))
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun #define FbStipMask(x,w)	(FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
169*4882a593Smuzhiyun 			 FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun #define FbMaskBits(x,w,l,n,r) { \
172*4882a593Smuzhiyun     n = (w); \
173*4882a593Smuzhiyun     r = FbRightMask((x)+n); \
174*4882a593Smuzhiyun     l = FbLeftMask(x); \
175*4882a593Smuzhiyun     if (l) { \
176*4882a593Smuzhiyun 	n -= FB_UNIT - ((x) & FB_MASK); \
177*4882a593Smuzhiyun 	if (n < 0) { \
178*4882a593Smuzhiyun 	    n = 0; \
179*4882a593Smuzhiyun 	    l &= r; \
180*4882a593Smuzhiyun 	    r = 0; \
181*4882a593Smuzhiyun 	} \
182*4882a593Smuzhiyun     } \
183*4882a593Smuzhiyun     n >>= FB_SHIFT; \
184*4882a593Smuzhiyun }
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun #define FbByteMaskInvalid   0x10
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun #define FbPatternOffset(o,t)  ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun #define FbPtrOffset(p,o,t)		((t *) ((CARD8 *) (p) + (o)))
191*4882a593Smuzhiyun #define FbSelectPatternPart(xor,o,t)	((xor) >> (FbPatternOffset (o,t) << 3))
192*4882a593Smuzhiyun #define FbStorePart(dst,off,t,xor)	(WRITE(FbPtrOffset(dst,off,t), \
193*4882a593Smuzhiyun 					 FbSelectPart(xor,off,t)))
194*4882a593Smuzhiyun #ifndef FbSelectPart
195*4882a593Smuzhiyun #define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t)
196*4882a593Smuzhiyun #endif
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun #define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \
199*4882a593Smuzhiyun     n = (w); \
200*4882a593Smuzhiyun     lb = 0; \
201*4882a593Smuzhiyun     rb = 0; \
202*4882a593Smuzhiyun     r = FbRightMask((x)+n); \
203*4882a593Smuzhiyun     if (r) { \
204*4882a593Smuzhiyun 	/* compute right byte length */ \
205*4882a593Smuzhiyun 	if ((copy) && (((x) + n) & 7) == 0) { \
206*4882a593Smuzhiyun 	    rb = (((x) + n) & FB_MASK) >> 3; \
207*4882a593Smuzhiyun 	} else { \
208*4882a593Smuzhiyun 	    rb = FbByteMaskInvalid; \
209*4882a593Smuzhiyun 	} \
210*4882a593Smuzhiyun     } \
211*4882a593Smuzhiyun     l = FbLeftMask(x); \
212*4882a593Smuzhiyun     if (l) { \
213*4882a593Smuzhiyun 	/* compute left byte length */ \
214*4882a593Smuzhiyun 	if ((copy) && ((x) & 7) == 0) { \
215*4882a593Smuzhiyun 	    lb = ((x) & FB_MASK) >> 3; \
216*4882a593Smuzhiyun 	} else { \
217*4882a593Smuzhiyun 	    lb = FbByteMaskInvalid; \
218*4882a593Smuzhiyun 	} \
219*4882a593Smuzhiyun 	/* subtract out the portion painted by leftMask */ \
220*4882a593Smuzhiyun 	n -= FB_UNIT - ((x) & FB_MASK); \
221*4882a593Smuzhiyun 	if (n < 0) { \
222*4882a593Smuzhiyun 	    if (lb != FbByteMaskInvalid) { \
223*4882a593Smuzhiyun 		if (rb == FbByteMaskInvalid) { \
224*4882a593Smuzhiyun 		    lb = FbByteMaskInvalid; \
225*4882a593Smuzhiyun 		} else if (rb) { \
226*4882a593Smuzhiyun 		    lb |= (rb - lb) << (FB_SHIFT - 3); \
227*4882a593Smuzhiyun 		    rb = 0; \
228*4882a593Smuzhiyun 		} \
229*4882a593Smuzhiyun 	    } \
230*4882a593Smuzhiyun 	    n = 0; \
231*4882a593Smuzhiyun 	    l &= r; \
232*4882a593Smuzhiyun 	    r = 0; \
233*4882a593Smuzhiyun 	}\
234*4882a593Smuzhiyun     } \
235*4882a593Smuzhiyun     n >>= FB_SHIFT; \
236*4882a593Smuzhiyun }
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun #define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
239*4882a593Smuzhiyun     switch (lb) { \
240*4882a593Smuzhiyun     case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
241*4882a593Smuzhiyun 	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
242*4882a593Smuzhiyun 	break; \
243*4882a593Smuzhiyun     case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \
244*4882a593Smuzhiyun 	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
245*4882a593Smuzhiyun 	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
246*4882a593Smuzhiyun 	break; \
247*4882a593Smuzhiyun     case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \
248*4882a593Smuzhiyun 	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
249*4882a593Smuzhiyun 	break; \
250*4882a593Smuzhiyun     case sizeof (FbBits) - 3: \
251*4882a593Smuzhiyun 	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
252*4882a593Smuzhiyun     case sizeof (FbBits) - 2: \
253*4882a593Smuzhiyun 	FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \
254*4882a593Smuzhiyun 	break; \
255*4882a593Smuzhiyun     case sizeof (FbBits) - 1: \
256*4882a593Smuzhiyun 	FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \
257*4882a593Smuzhiyun 	break; \
258*4882a593Smuzhiyun     default: \
259*4882a593Smuzhiyun 	WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \
260*4882a593Smuzhiyun 	break; \
261*4882a593Smuzhiyun     } \
262*4882a593Smuzhiyun }
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun #define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
265*4882a593Smuzhiyun     switch (rb) { \
266*4882a593Smuzhiyun     case 1: \
267*4882a593Smuzhiyun 	FbStorePart(dst,0,CARD8,xor); \
268*4882a593Smuzhiyun 	break; \
269*4882a593Smuzhiyun     case 2: \
270*4882a593Smuzhiyun 	FbStorePart(dst,0,CARD16,xor); \
271*4882a593Smuzhiyun 	break; \
272*4882a593Smuzhiyun     case 3: \
273*4882a593Smuzhiyun 	FbStorePart(dst,0,CARD16,xor); \
274*4882a593Smuzhiyun 	FbStorePart(dst,2,CARD8,xor); \
275*4882a593Smuzhiyun 	break; \
276*4882a593Smuzhiyun     default: \
277*4882a593Smuzhiyun 	WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
278*4882a593Smuzhiyun     } \
279*4882a593Smuzhiyun }
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #define FbMaskStip(x,w,l,n,r) { \
282*4882a593Smuzhiyun     n = (w); \
283*4882a593Smuzhiyun     r = FbRightStipMask((x)+n); \
284*4882a593Smuzhiyun     l = FbLeftStipMask(x); \
285*4882a593Smuzhiyun     if (l) { \
286*4882a593Smuzhiyun 	n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \
287*4882a593Smuzhiyun 	if (n < 0) { \
288*4882a593Smuzhiyun 	    n = 0; \
289*4882a593Smuzhiyun 	    l &= r; \
290*4882a593Smuzhiyun 	    r = 0; \
291*4882a593Smuzhiyun 	} \
292*4882a593Smuzhiyun     } \
293*4882a593Smuzhiyun     n >>= FB_STIP_SHIFT; \
294*4882a593Smuzhiyun }
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun /*
297*4882a593Smuzhiyun  * These macros are used to transparently stipple
298*4882a593Smuzhiyun  * in copy mode; the expected usage is with 'n' constant
299*4882a593Smuzhiyun  * so all of the conditional parts collapse into a minimal
300*4882a593Smuzhiyun  * sequence of partial word writes
301*4882a593Smuzhiyun  *
302*4882a593Smuzhiyun  * 'n' is the bytemask of which bytes to store, 'a' is the address
303*4882a593Smuzhiyun  * of the FbBits base unit, 'o' is the offset within that unit
304*4882a593Smuzhiyun  *
305*4882a593Smuzhiyun  * The term "lane" comes from the hardware term "byte-lane" which
306*4882a593Smuzhiyun  */
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun #define FbLaneCase1(n,a,o)						\
309*4882a593Smuzhiyun     if ((n) == 0x01) {							\
310*4882a593Smuzhiyun 	WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor);		\
311*4882a593Smuzhiyun     }
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun #define FbLaneCase2(n,a,o)						\
314*4882a593Smuzhiyun     if ((n) == 0x03) {							\
315*4882a593Smuzhiyun 	WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor);	\
316*4882a593Smuzhiyun     } else {								\
317*4882a593Smuzhiyun 	FbLaneCase1((n)&1,a,o)						\
318*4882a593Smuzhiyun 	FbLaneCase1((n)>>1,a,(o)+1)					\
319*4882a593Smuzhiyun     }
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun #define FbLaneCase4(n,a,o)						\
322*4882a593Smuzhiyun     if ((n) == 0x0f) {							\
323*4882a593Smuzhiyun 	WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor);	\
324*4882a593Smuzhiyun     } else {								\
325*4882a593Smuzhiyun 	FbLaneCase2((n)&3,a,o)						\
326*4882a593Smuzhiyun 	FbLaneCase2((n)>>2,a,(o)+2)					\
327*4882a593Smuzhiyun     }
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun #define FbLaneCase(n,a)   FbLaneCase4(n,(CARD8 *) (a),0)
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun /* Macros for dealing with dashing */
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun #define FbDashDeclare	\
334*4882a593Smuzhiyun     unsigned char	*__dash, *__firstDash, *__lastDash
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun #define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) {	    \
337*4882a593Smuzhiyun     (even) = TRUE;					    \
338*4882a593Smuzhiyun     __firstDash = (pGC)->dash;				    \
339*4882a593Smuzhiyun     __lastDash = __firstDash + (pGC)->numInDashList;	    \
340*4882a593Smuzhiyun     (dashOffset) %= (pPriv)->dashLength;		    \
341*4882a593Smuzhiyun 							    \
342*4882a593Smuzhiyun     __dash = __firstDash;				    \
343*4882a593Smuzhiyun     while ((dashOffset) >= ((dashlen) = *__dash))	    \
344*4882a593Smuzhiyun     {							    \
345*4882a593Smuzhiyun 	(dashOffset) -= (dashlen);			    \
346*4882a593Smuzhiyun 	(even) = 1-(even);				    \
347*4882a593Smuzhiyun 	if (++__dash == __lastDash)			    \
348*4882a593Smuzhiyun 	    __dash = __firstDash;			    \
349*4882a593Smuzhiyun     }							    \
350*4882a593Smuzhiyun     (dashlen) -= (dashOffset);				    \
351*4882a593Smuzhiyun }
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun #define FbDashNext(dashlen) {				    \
354*4882a593Smuzhiyun     if (++__dash == __lastDash)				    \
355*4882a593Smuzhiyun 	__dash = __firstDash;				    \
356*4882a593Smuzhiyun     (dashlen) = *__dash;				    \
357*4882a593Smuzhiyun }
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun /* as numInDashList is always even, this case can skip a test */
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun #define FbDashNextEven(dashlen) {			    \
362*4882a593Smuzhiyun     (dashlen) = *++__dash;				    \
363*4882a593Smuzhiyun }
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun #define FbDashNextOdd(dashlen)	FbDashNext(dashlen)
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun #define FbDashStep(dashlen,even) {			    \
368*4882a593Smuzhiyun     if (!--(dashlen)) {					    \
369*4882a593Smuzhiyun 	FbDashNext(dashlen);				    \
370*4882a593Smuzhiyun 	(even) = 1-(even);				    \
371*4882a593Smuzhiyun     }							    \
372*4882a593Smuzhiyun }
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun extern _X_EXPORT const GCOps fbGCOps;
375*4882a593Smuzhiyun extern _X_EXPORT const GCFuncs fbGCFuncs;
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun /* Framebuffer access wrapper */
378*4882a593Smuzhiyun typedef FbBits(*ReadMemoryProcPtr) (const void *src, int size);
379*4882a593Smuzhiyun typedef void (*WriteMemoryProcPtr) (void *dst, FbBits value, int size);
380*4882a593Smuzhiyun typedef void (*SetupWrapProcPtr) (ReadMemoryProcPtr * pRead,
381*4882a593Smuzhiyun                                   WriteMemoryProcPtr * pWrite,
382*4882a593Smuzhiyun                                   DrawablePtr pDraw);
383*4882a593Smuzhiyun typedef void (*FinishWrapProcPtr) (DrawablePtr pDraw);
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun #ifdef FB_ACCESS_WRAPPER
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun #define fbPrepareAccess(pDraw) \
388*4882a593Smuzhiyun 	fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \
389*4882a593Smuzhiyun 		&wfbReadMemory, \
390*4882a593Smuzhiyun 		&wfbWriteMemory, \
391*4882a593Smuzhiyun 		(pDraw))
392*4882a593Smuzhiyun #define fbFinishAccess(pDraw) \
393*4882a593Smuzhiyun 	fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw)
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun #else
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun #define fbPrepareAccess(pPix)
398*4882a593Smuzhiyun #define fbFinishAccess(pDraw)
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun #endif
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun extern _X_EXPORT DevPrivateKey
403*4882a593Smuzhiyun fbGetScreenPrivateKey(void);
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun /* private field of a screen */
406*4882a593Smuzhiyun typedef struct {
407*4882a593Smuzhiyun #ifdef FB_ACCESS_WRAPPER
408*4882a593Smuzhiyun     SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */
409*4882a593Smuzhiyun     FinishWrapProcPtr finishWrap;       /* driver hook to clean up pixmap access wrapping */
410*4882a593Smuzhiyun #endif
411*4882a593Smuzhiyun     DevPrivateKeyRec    gcPrivateKeyRec;
412*4882a593Smuzhiyun     DevPrivateKeyRec    winPrivateKeyRec;
413*4882a593Smuzhiyun } FbScreenPrivRec, *FbScreenPrivPtr;
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun #define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \
416*4882a593Smuzhiyun 				     dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey()))
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun /* private field of GC */
419*4882a593Smuzhiyun typedef struct {
420*4882a593Smuzhiyun     FbBits and, xor;            /* reduced rop values */
421*4882a593Smuzhiyun     FbBits bgand, bgxor;        /* for stipples */
422*4882a593Smuzhiyun     FbBits fg, bg, pm;          /* expanded and filled */
423*4882a593Smuzhiyun     unsigned int dashLength;    /* total of all dash elements */
424*4882a593Smuzhiyun } FbGCPrivRec, *FbGCPrivPtr;
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun #define fbGetGCPrivateKey(pGC)  (&fbGetScreenPrivate((pGC)->pScreen)->gcPrivateKeyRec)
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun #define fbGetGCPrivate(pGC)	((FbGCPrivPtr)\
429*4882a593Smuzhiyun 				 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey(pGC)))
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun #define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
432*4882a593Smuzhiyun #define fbGetExpose(pGC)	((pGC)->fExpose)
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun #define fbGetScreenPixmap(s)	((PixmapPtr) (s)->devPrivate)
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun #define fbGetWinPrivateKey(pWin)        (&fbGetScreenPrivate(((DrawablePtr) (pWin))->pScreen)->winPrivateKeyRec)
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun #define fbGetWindowPixmap(pWin)	((PixmapPtr)\
439*4882a593Smuzhiyun 				 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey(pWin)))
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun #define __fbPixDrawableX(pPix)	((pPix)->drawable.x)
442*4882a593Smuzhiyun #define __fbPixDrawableY(pPix)	((pPix)->drawable.y)
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun #ifdef COMPOSITE
445*4882a593Smuzhiyun #define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix) - (pPix)->screen_x)
446*4882a593Smuzhiyun #define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix) - (pPix)->screen_y)
447*4882a593Smuzhiyun #else
448*4882a593Smuzhiyun #define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix))
449*4882a593Smuzhiyun #define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix))
450*4882a593Smuzhiyun #endif
451*4882a593Smuzhiyun #define __fbPixOffXPix(pPix)	(__fbPixDrawableX(pPix))
452*4882a593Smuzhiyun #define __fbPixOffYPix(pPix)	(__fbPixDrawableY(pPix))
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun #define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) {			\
455*4882a593Smuzhiyun     if ((pDrawable)->type != DRAWABLE_PIXMAP) { 				\
456*4882a593Smuzhiyun 	(pixmap) = fbGetWindowPixmap(pDrawable);				\
457*4882a593Smuzhiyun 	(xoff) = __fbPixOffXWin(pixmap); 					\
458*4882a593Smuzhiyun 	(yoff) = __fbPixOffYWin(pixmap); 					\
459*4882a593Smuzhiyun     } else { 									\
460*4882a593Smuzhiyun 	(pixmap) = (PixmapPtr) (pDrawable);					\
461*4882a593Smuzhiyun 	(xoff) = __fbPixOffXPix(pixmap); 					\
462*4882a593Smuzhiyun 	(yoff) = __fbPixOffYPix(pixmap); 					\
463*4882a593Smuzhiyun     } 										\
464*4882a593Smuzhiyun     fbPrepareAccess(pDrawable); 						\
465*4882a593Smuzhiyun }
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun #define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) {			\
468*4882a593Smuzhiyun     (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; 			       	\
469*4882a593Smuzhiyun     (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride);	\
470*4882a593Smuzhiyun     (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
471*4882a593Smuzhiyun }
472*4882a593Smuzhiyun 
473*4882a593Smuzhiyun #define fbGetPixmapStipData(pixmap, pointer, stride, bpp) {			\
474*4882a593Smuzhiyun     (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; 			       	\
475*4882a593Smuzhiyun     (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride);	\
476*4882a593Smuzhiyun     (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
477*4882a593Smuzhiyun }
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun #define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 		\
480*4882a593Smuzhiyun     PixmapPtr   _pPix; 								\
481*4882a593Smuzhiyun     fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); 				\
482*4882a593Smuzhiyun     fbGetPixmapBitsData(_pPix, pointer, stride, bpp);				\
483*4882a593Smuzhiyun }
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun #define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 	\
486*4882a593Smuzhiyun     PixmapPtr   _pPix; 								\
487*4882a593Smuzhiyun     fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff);				\
488*4882a593Smuzhiyun     fbGetPixmapStipData(_pPix, pointer, stride, bpp);				\
489*4882a593Smuzhiyun }
490*4882a593Smuzhiyun 
491*4882a593Smuzhiyun /*
492*4882a593Smuzhiyun  * XFree86 empties the root BorderClip when the VT is inactive,
493*4882a593Smuzhiyun  * here's a macro which uses that to disable GetImage and GetSpans
494*4882a593Smuzhiyun  */
495*4882a593Smuzhiyun 
496*4882a593Smuzhiyun #define fbWindowEnabled(pWin) \
497*4882a593Smuzhiyun     RegionNotEmpty(&(pWin)->borderClip)
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun #define fbDrawableEnabled(pDrawable) \
500*4882a593Smuzhiyun     ((pDrawable)->type == DRAWABLE_PIXMAP ? \
501*4882a593Smuzhiyun      TRUE : fbWindowEnabled((WindowPtr) pDrawable))
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun #define FbPowerOfTwo(w)	    (((w) & ((w) - 1)) == 0)
504*4882a593Smuzhiyun /*
505*4882a593Smuzhiyun  * Accelerated tiles are power of 2 width <= FB_UNIT
506*4882a593Smuzhiyun  */
507*4882a593Smuzhiyun #define FbEvenTile(w)	    ((w) <= FB_UNIT && FbPowerOfTwo(w))
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun /*
510*4882a593Smuzhiyun  * fballpriv.c
511*4882a593Smuzhiyun  */
512*4882a593Smuzhiyun extern _X_EXPORT Bool
513*4882a593Smuzhiyun fbAllocatePrivates(ScreenPtr pScreen);
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun /*
516*4882a593Smuzhiyun  * fbarc.c
517*4882a593Smuzhiyun  */
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun extern _X_EXPORT void
520*4882a593Smuzhiyun fbPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs);
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun /*
523*4882a593Smuzhiyun  * fbbits.c
524*4882a593Smuzhiyun  */
525*4882a593Smuzhiyun 
526*4882a593Smuzhiyun extern _X_EXPORT void
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun fbBresSolid8(DrawablePtr pDrawable,
529*4882a593Smuzhiyun              GCPtr pGC,
530*4882a593Smuzhiyun              int dashOffset,
531*4882a593Smuzhiyun              int signdx,
532*4882a593Smuzhiyun              int signdy,
533*4882a593Smuzhiyun              int axis, int x, int y, int e, int e1, int e3, int len);
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun extern _X_EXPORT void
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun fbBresDash8(DrawablePtr pDrawable,
538*4882a593Smuzhiyun             GCPtr pGC,
539*4882a593Smuzhiyun             int dashOffset,
540*4882a593Smuzhiyun             int signdx,
541*4882a593Smuzhiyun             int signdy, int axis, int x, int y, int e, int e1, int e3, int len);
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun extern _X_EXPORT void
544*4882a593Smuzhiyun 
545*4882a593Smuzhiyun fbDots8(FbBits * dst,
546*4882a593Smuzhiyun         FbStride dstStride,
547*4882a593Smuzhiyun         int dstBpp,
548*4882a593Smuzhiyun         BoxPtr pBox,
549*4882a593Smuzhiyun         xPoint * pts,
550*4882a593Smuzhiyun         int npt,
551*4882a593Smuzhiyun         int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
552*4882a593Smuzhiyun 
553*4882a593Smuzhiyun extern _X_EXPORT void
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun fbArc8(FbBits * dst,
556*4882a593Smuzhiyun        FbStride dstStride,
557*4882a593Smuzhiyun        int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun extern _X_EXPORT void
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun fbGlyph8(FbBits * dstLine,
562*4882a593Smuzhiyun          FbStride dstStride,
563*4882a593Smuzhiyun          int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun extern _X_EXPORT void
566*4882a593Smuzhiyun 
567*4882a593Smuzhiyun fbPolyline8(DrawablePtr pDrawable,
568*4882a593Smuzhiyun             GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun extern _X_EXPORT void
571*4882a593Smuzhiyun  fbPolySegment8(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun extern _X_EXPORT void
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun fbBresSolid16(DrawablePtr pDrawable,
576*4882a593Smuzhiyun               GCPtr pGC,
577*4882a593Smuzhiyun               int dashOffset,
578*4882a593Smuzhiyun               int signdx,
579*4882a593Smuzhiyun               int signdy,
580*4882a593Smuzhiyun               int axis, int x, int y, int e, int e1, int e3, int len);
581*4882a593Smuzhiyun 
582*4882a593Smuzhiyun extern _X_EXPORT void
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun fbBresDash16(DrawablePtr pDrawable,
585*4882a593Smuzhiyun              GCPtr pGC,
586*4882a593Smuzhiyun              int dashOffset,
587*4882a593Smuzhiyun              int signdx,
588*4882a593Smuzhiyun              int signdy,
589*4882a593Smuzhiyun              int axis, int x, int y, int e, int e1, int e3, int len);
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun extern _X_EXPORT void
592*4882a593Smuzhiyun 
593*4882a593Smuzhiyun fbDots16(FbBits * dst,
594*4882a593Smuzhiyun          FbStride dstStride,
595*4882a593Smuzhiyun          int dstBpp,
596*4882a593Smuzhiyun          BoxPtr pBox,
597*4882a593Smuzhiyun          xPoint * pts,
598*4882a593Smuzhiyun          int npt,
599*4882a593Smuzhiyun          int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
600*4882a593Smuzhiyun 
601*4882a593Smuzhiyun extern _X_EXPORT void
602*4882a593Smuzhiyun 
603*4882a593Smuzhiyun fbArc16(FbBits * dst,
604*4882a593Smuzhiyun         FbStride dstStride,
605*4882a593Smuzhiyun         int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun extern _X_EXPORT void
608*4882a593Smuzhiyun 
609*4882a593Smuzhiyun fbGlyph16(FbBits * dstLine,
610*4882a593Smuzhiyun           FbStride dstStride,
611*4882a593Smuzhiyun           int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun extern _X_EXPORT void
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun fbPolyline16(DrawablePtr pDrawable,
616*4882a593Smuzhiyun              GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
617*4882a593Smuzhiyun 
618*4882a593Smuzhiyun extern _X_EXPORT void
619*4882a593Smuzhiyun  fbPolySegment16(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
620*4882a593Smuzhiyun 
621*4882a593Smuzhiyun extern _X_EXPORT void
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun fbBresSolid32(DrawablePtr pDrawable,
624*4882a593Smuzhiyun               GCPtr pGC,
625*4882a593Smuzhiyun               int dashOffset,
626*4882a593Smuzhiyun               int signdx,
627*4882a593Smuzhiyun               int signdy,
628*4882a593Smuzhiyun               int axis, int x, int y, int e, int e1, int e3, int len);
629*4882a593Smuzhiyun 
630*4882a593Smuzhiyun extern _X_EXPORT void
631*4882a593Smuzhiyun 
632*4882a593Smuzhiyun fbBresDash32(DrawablePtr pDrawable,
633*4882a593Smuzhiyun              GCPtr pGC,
634*4882a593Smuzhiyun              int dashOffset,
635*4882a593Smuzhiyun              int signdx,
636*4882a593Smuzhiyun              int signdy,
637*4882a593Smuzhiyun              int axis, int x, int y, int e, int e1, int e3, int len);
638*4882a593Smuzhiyun 
639*4882a593Smuzhiyun extern _X_EXPORT void
640*4882a593Smuzhiyun 
641*4882a593Smuzhiyun fbDots32(FbBits * dst,
642*4882a593Smuzhiyun          FbStride dstStride,
643*4882a593Smuzhiyun          int dstBpp,
644*4882a593Smuzhiyun          BoxPtr pBox,
645*4882a593Smuzhiyun          xPoint * pts,
646*4882a593Smuzhiyun          int npt,
647*4882a593Smuzhiyun          int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
648*4882a593Smuzhiyun 
649*4882a593Smuzhiyun extern _X_EXPORT void
650*4882a593Smuzhiyun 
651*4882a593Smuzhiyun fbArc32(FbBits * dst,
652*4882a593Smuzhiyun         FbStride dstStride,
653*4882a593Smuzhiyun         int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
654*4882a593Smuzhiyun 
655*4882a593Smuzhiyun extern _X_EXPORT void
656*4882a593Smuzhiyun 
657*4882a593Smuzhiyun fbGlyph32(FbBits * dstLine,
658*4882a593Smuzhiyun           FbStride dstStride,
659*4882a593Smuzhiyun           int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
660*4882a593Smuzhiyun extern _X_EXPORT void
661*4882a593Smuzhiyun 
662*4882a593Smuzhiyun fbPolyline32(DrawablePtr pDrawable,
663*4882a593Smuzhiyun              GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun extern _X_EXPORT void
666*4882a593Smuzhiyun  fbPolySegment32(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
667*4882a593Smuzhiyun 
668*4882a593Smuzhiyun /*
669*4882a593Smuzhiyun  * fbblt.c
670*4882a593Smuzhiyun  */
671*4882a593Smuzhiyun extern _X_EXPORT void
672*4882a593Smuzhiyun 
673*4882a593Smuzhiyun fbBlt(FbBits * src,
674*4882a593Smuzhiyun       FbStride srcStride,
675*4882a593Smuzhiyun       int srcX,
676*4882a593Smuzhiyun       FbBits * dst,
677*4882a593Smuzhiyun       FbStride dstStride,
678*4882a593Smuzhiyun       int dstX,
679*4882a593Smuzhiyun       int width,
680*4882a593Smuzhiyun       int height, int alu, FbBits pm, int bpp, Bool reverse, Bool upsidedown);
681*4882a593Smuzhiyun 
682*4882a593Smuzhiyun extern _X_EXPORT void
683*4882a593Smuzhiyun  fbBltStip(FbStip * src, FbStride srcStride,    /* in FbStip units, not FbBits units */
684*4882a593Smuzhiyun            int srcX, FbStip * dst, FbStride dstStride,  /* in FbStip units, not FbBits units */
685*4882a593Smuzhiyun            int dstX, int width, int height, int alu, FbBits pm, int bpp);
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun /*
688*4882a593Smuzhiyun  * fbbltone.c
689*4882a593Smuzhiyun  */
690*4882a593Smuzhiyun extern _X_EXPORT void
691*4882a593Smuzhiyun 
692*4882a593Smuzhiyun fbBltOne(FbStip * src,
693*4882a593Smuzhiyun          FbStride srcStride,
694*4882a593Smuzhiyun          int srcX,
695*4882a593Smuzhiyun          FbBits * dst,
696*4882a593Smuzhiyun          FbStride dstStride,
697*4882a593Smuzhiyun          int dstX,
698*4882a593Smuzhiyun          int dstBpp,
699*4882a593Smuzhiyun          int width,
700*4882a593Smuzhiyun          int height, FbBits fgand, FbBits fbxor, FbBits bgand, FbBits bgxor);
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun extern _X_EXPORT void
703*4882a593Smuzhiyun 
704*4882a593Smuzhiyun fbBltPlane(FbBits * src,
705*4882a593Smuzhiyun            FbStride srcStride,
706*4882a593Smuzhiyun            int srcX,
707*4882a593Smuzhiyun            int srcBpp,
708*4882a593Smuzhiyun            FbStip * dst,
709*4882a593Smuzhiyun            FbStride dstStride,
710*4882a593Smuzhiyun            int dstX,
711*4882a593Smuzhiyun            int width,
712*4882a593Smuzhiyun            int height,
713*4882a593Smuzhiyun            FbStip fgand,
714*4882a593Smuzhiyun            FbStip fgxor, FbStip bgand, FbStip bgxor, Pixel planeMask);
715*4882a593Smuzhiyun 
716*4882a593Smuzhiyun /*
717*4882a593Smuzhiyun  * fbcmap_mi.c
718*4882a593Smuzhiyun  */
719*4882a593Smuzhiyun extern _X_EXPORT int
720*4882a593Smuzhiyun  fbListInstalledColormaps(ScreenPtr pScreen, Colormap * pmaps);
721*4882a593Smuzhiyun 
722*4882a593Smuzhiyun extern _X_EXPORT void
723*4882a593Smuzhiyun  fbInstallColormap(ColormapPtr pmap);
724*4882a593Smuzhiyun 
725*4882a593Smuzhiyun extern _X_EXPORT void
726*4882a593Smuzhiyun  fbUninstallColormap(ColormapPtr pmap);
727*4882a593Smuzhiyun 
728*4882a593Smuzhiyun extern _X_EXPORT void
729*4882a593Smuzhiyun 
730*4882a593Smuzhiyun fbResolveColor(unsigned short *pred,
731*4882a593Smuzhiyun                unsigned short *pgreen,
732*4882a593Smuzhiyun                unsigned short *pblue, VisualPtr pVisual);
733*4882a593Smuzhiyun 
734*4882a593Smuzhiyun extern _X_EXPORT Bool
735*4882a593Smuzhiyun  fbInitializeColormap(ColormapPtr pmap);
736*4882a593Smuzhiyun 
737*4882a593Smuzhiyun extern _X_EXPORT int
738*4882a593Smuzhiyun 
739*4882a593Smuzhiyun fbExpandDirectColors(ColormapPtr pmap,
740*4882a593Smuzhiyun                      int ndef, xColorItem * indefs, xColorItem * outdefs);
741*4882a593Smuzhiyun 
742*4882a593Smuzhiyun extern _X_EXPORT Bool
743*4882a593Smuzhiyun  fbCreateDefColormap(ScreenPtr pScreen);
744*4882a593Smuzhiyun 
745*4882a593Smuzhiyun extern _X_EXPORT void
746*4882a593Smuzhiyun  fbClearVisualTypes(void);
747*4882a593Smuzhiyun 
748*4882a593Smuzhiyun extern _X_EXPORT Bool
749*4882a593Smuzhiyun  fbSetVisualTypes(int depth, int visuals, int bitsPerRGB);
750*4882a593Smuzhiyun 
751*4882a593Smuzhiyun extern _X_EXPORT Bool
752*4882a593Smuzhiyun fbSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB,
753*4882a593Smuzhiyun                          Pixel redMask, Pixel greenMask, Pixel blueMask);
754*4882a593Smuzhiyun 
755*4882a593Smuzhiyun extern _X_EXPORT Bool
756*4882a593Smuzhiyun 
757*4882a593Smuzhiyun fbInitVisuals(VisualPtr * visualp,
758*4882a593Smuzhiyun               DepthPtr * depthp,
759*4882a593Smuzhiyun               int *nvisualp,
760*4882a593Smuzhiyun               int *ndepthp,
761*4882a593Smuzhiyun               int *rootDepthp,
762*4882a593Smuzhiyun               VisualID * defaultVisp, unsigned long sizes, int bitsPerRGB);
763*4882a593Smuzhiyun 
764*4882a593Smuzhiyun /*
765*4882a593Smuzhiyun  * fbcopy.c
766*4882a593Smuzhiyun  */
767*4882a593Smuzhiyun 
768*4882a593Smuzhiyun extern _X_EXPORT void
769*4882a593Smuzhiyun 
770*4882a593Smuzhiyun fbCopyNtoN(DrawablePtr pSrcDrawable,
771*4882a593Smuzhiyun            DrawablePtr pDstDrawable,
772*4882a593Smuzhiyun            GCPtr pGC,
773*4882a593Smuzhiyun            BoxPtr pbox,
774*4882a593Smuzhiyun            int nbox,
775*4882a593Smuzhiyun            int dx,
776*4882a593Smuzhiyun            int dy,
777*4882a593Smuzhiyun            Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
778*4882a593Smuzhiyun 
779*4882a593Smuzhiyun extern _X_EXPORT void
780*4882a593Smuzhiyun 
781*4882a593Smuzhiyun fbCopy1toN(DrawablePtr pSrcDrawable,
782*4882a593Smuzhiyun            DrawablePtr pDstDrawable,
783*4882a593Smuzhiyun            GCPtr pGC,
784*4882a593Smuzhiyun            BoxPtr pbox,
785*4882a593Smuzhiyun            int nbox,
786*4882a593Smuzhiyun            int dx,
787*4882a593Smuzhiyun            int dy,
788*4882a593Smuzhiyun            Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
789*4882a593Smuzhiyun 
790*4882a593Smuzhiyun extern _X_EXPORT void
791*4882a593Smuzhiyun 
792*4882a593Smuzhiyun fbCopyNto1(DrawablePtr pSrcDrawable,
793*4882a593Smuzhiyun            DrawablePtr pDstDrawable,
794*4882a593Smuzhiyun            GCPtr pGC,
795*4882a593Smuzhiyun            BoxPtr pbox,
796*4882a593Smuzhiyun            int nbox,
797*4882a593Smuzhiyun            int dx,
798*4882a593Smuzhiyun            int dy,
799*4882a593Smuzhiyun            Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
800*4882a593Smuzhiyun 
801*4882a593Smuzhiyun extern _X_EXPORT RegionPtr
802*4882a593Smuzhiyun 
803*4882a593Smuzhiyun fbCopyArea(DrawablePtr pSrcDrawable,
804*4882a593Smuzhiyun            DrawablePtr pDstDrawable,
805*4882a593Smuzhiyun            GCPtr pGC,
806*4882a593Smuzhiyun            int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut);
807*4882a593Smuzhiyun 
808*4882a593Smuzhiyun extern _X_EXPORT RegionPtr
809*4882a593Smuzhiyun 
810*4882a593Smuzhiyun fbCopyPlane(DrawablePtr pSrcDrawable,
811*4882a593Smuzhiyun             DrawablePtr pDstDrawable,
812*4882a593Smuzhiyun             GCPtr pGC,
813*4882a593Smuzhiyun             int xIn,
814*4882a593Smuzhiyun             int yIn,
815*4882a593Smuzhiyun             int widthSrc,
816*4882a593Smuzhiyun             int heightSrc, int xOut, int yOut, unsigned long bitplane);
817*4882a593Smuzhiyun 
818*4882a593Smuzhiyun /*
819*4882a593Smuzhiyun  * fbfill.c
820*4882a593Smuzhiyun  */
821*4882a593Smuzhiyun extern _X_EXPORT void
822*4882a593Smuzhiyun  fbFill(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int width, int height);
823*4882a593Smuzhiyun 
824*4882a593Smuzhiyun extern _X_EXPORT void
825*4882a593Smuzhiyun 
826*4882a593Smuzhiyun fbSolidBoxClipped(DrawablePtr pDrawable,
827*4882a593Smuzhiyun                   RegionPtr pClip,
828*4882a593Smuzhiyun                   int xa, int ya, int xb, int yb, FbBits and, FbBits xor);
829*4882a593Smuzhiyun 
830*4882a593Smuzhiyun /*
831*4882a593Smuzhiyun  * fbfillrect.c
832*4882a593Smuzhiyun  */
833*4882a593Smuzhiyun extern _X_EXPORT void
834*4882a593Smuzhiyun 
835*4882a593Smuzhiyun fbPolyFillRect(DrawablePtr pDrawable,
836*4882a593Smuzhiyun                GCPtr pGC, int nrectInit, xRectangle *prectInit);
837*4882a593Smuzhiyun 
838*4882a593Smuzhiyun #define fbPolyFillArc miPolyFillArc
839*4882a593Smuzhiyun 
840*4882a593Smuzhiyun #define fbFillPolygon miFillPolygon
841*4882a593Smuzhiyun 
842*4882a593Smuzhiyun /*
843*4882a593Smuzhiyun  * fbfillsp.c
844*4882a593Smuzhiyun  */
845*4882a593Smuzhiyun extern _X_EXPORT void
846*4882a593Smuzhiyun 
847*4882a593Smuzhiyun fbFillSpans(DrawablePtr pDrawable,
848*4882a593Smuzhiyun             GCPtr pGC,
849*4882a593Smuzhiyun             int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted);
850*4882a593Smuzhiyun 
851*4882a593Smuzhiyun /*
852*4882a593Smuzhiyun  * fbgc.c
853*4882a593Smuzhiyun  */
854*4882a593Smuzhiyun 
855*4882a593Smuzhiyun extern _X_EXPORT Bool
856*4882a593Smuzhiyun  fbCreateGC(GCPtr pGC);
857*4882a593Smuzhiyun 
858*4882a593Smuzhiyun extern _X_EXPORT void
859*4882a593Smuzhiyun  fbPadPixmap(PixmapPtr pPixmap);
860*4882a593Smuzhiyun 
861*4882a593Smuzhiyun extern _X_EXPORT void
862*4882a593Smuzhiyun  fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
863*4882a593Smuzhiyun 
864*4882a593Smuzhiyun /*
865*4882a593Smuzhiyun  * fbgetsp.c
866*4882a593Smuzhiyun  */
867*4882a593Smuzhiyun extern _X_EXPORT void
868*4882a593Smuzhiyun 
869*4882a593Smuzhiyun fbGetSpans(DrawablePtr pDrawable,
870*4882a593Smuzhiyun            int wMax,
871*4882a593Smuzhiyun            DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart);
872*4882a593Smuzhiyun 
873*4882a593Smuzhiyun /*
874*4882a593Smuzhiyun  * fbglyph.c
875*4882a593Smuzhiyun  */
876*4882a593Smuzhiyun 
877*4882a593Smuzhiyun extern _X_EXPORT void
878*4882a593Smuzhiyun 
879*4882a593Smuzhiyun fbPolyGlyphBlt(DrawablePtr pDrawable,
880*4882a593Smuzhiyun                GCPtr pGC,
881*4882a593Smuzhiyun                int x,
882*4882a593Smuzhiyun                int y,
883*4882a593Smuzhiyun                unsigned int nglyph, CharInfoPtr * ppci, void *pglyphBase);
884*4882a593Smuzhiyun 
885*4882a593Smuzhiyun extern _X_EXPORT void
886*4882a593Smuzhiyun 
887*4882a593Smuzhiyun fbImageGlyphBlt(DrawablePtr pDrawable,
888*4882a593Smuzhiyun                 GCPtr pGC,
889*4882a593Smuzhiyun                 int x,
890*4882a593Smuzhiyun                 int y,
891*4882a593Smuzhiyun                 unsigned int nglyph, CharInfoPtr * ppci, void *pglyphBase);
892*4882a593Smuzhiyun 
893*4882a593Smuzhiyun /*
894*4882a593Smuzhiyun  * fbimage.c
895*4882a593Smuzhiyun  */
896*4882a593Smuzhiyun 
897*4882a593Smuzhiyun extern _X_EXPORT void
898*4882a593Smuzhiyun 
899*4882a593Smuzhiyun fbPutImage(DrawablePtr pDrawable,
900*4882a593Smuzhiyun            GCPtr pGC,
901*4882a593Smuzhiyun            int depth,
902*4882a593Smuzhiyun            int x, int y, int w, int h, int leftPad, int format, char *pImage);
903*4882a593Smuzhiyun 
904*4882a593Smuzhiyun extern _X_EXPORT void
905*4882a593Smuzhiyun 
906*4882a593Smuzhiyun fbPutZImage(DrawablePtr pDrawable,
907*4882a593Smuzhiyun             RegionPtr pClip,
908*4882a593Smuzhiyun             int alu,
909*4882a593Smuzhiyun             FbBits pm,
910*4882a593Smuzhiyun             int x,
911*4882a593Smuzhiyun             int y, int width, int height, FbStip * src, FbStride srcStride);
912*4882a593Smuzhiyun 
913*4882a593Smuzhiyun extern _X_EXPORT void
914*4882a593Smuzhiyun 
915*4882a593Smuzhiyun fbPutXYImage(DrawablePtr pDrawable,
916*4882a593Smuzhiyun              RegionPtr pClip,
917*4882a593Smuzhiyun              FbBits fg,
918*4882a593Smuzhiyun              FbBits bg,
919*4882a593Smuzhiyun              FbBits pm,
920*4882a593Smuzhiyun              int alu,
921*4882a593Smuzhiyun              Bool opaque,
922*4882a593Smuzhiyun              int x,
923*4882a593Smuzhiyun              int y,
924*4882a593Smuzhiyun              int width, int height, FbStip * src, FbStride srcStride, int srcX);
925*4882a593Smuzhiyun 
926*4882a593Smuzhiyun extern _X_EXPORT void
927*4882a593Smuzhiyun 
928*4882a593Smuzhiyun fbGetImage(DrawablePtr pDrawable,
929*4882a593Smuzhiyun            int x,
930*4882a593Smuzhiyun            int y,
931*4882a593Smuzhiyun            int w, int h, unsigned int format, unsigned long planeMask, char *d);
932*4882a593Smuzhiyun /*
933*4882a593Smuzhiyun  * fbline.c
934*4882a593Smuzhiyun  */
935*4882a593Smuzhiyun 
936*4882a593Smuzhiyun extern _X_EXPORT void
937*4882a593Smuzhiyun fbPolyLine(DrawablePtr pDrawable,
938*4882a593Smuzhiyun            GCPtr pGC, int mode, int npt, DDXPointPtr ppt);
939*4882a593Smuzhiyun 
940*4882a593Smuzhiyun extern _X_EXPORT void
941*4882a593Smuzhiyun  fbFixCoordModePrevious(int npt, DDXPointPtr ppt);
942*4882a593Smuzhiyun 
943*4882a593Smuzhiyun extern _X_EXPORT void
944*4882a593Smuzhiyun  fbPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
945*4882a593Smuzhiyun 
946*4882a593Smuzhiyun #define fbPolyRectangle	miPolyRectangle
947*4882a593Smuzhiyun 
948*4882a593Smuzhiyun /*
949*4882a593Smuzhiyun  * fbpict.c
950*4882a593Smuzhiyun  */
951*4882a593Smuzhiyun 
952*4882a593Smuzhiyun extern _X_EXPORT Bool
953*4882a593Smuzhiyun  fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
954*4882a593Smuzhiyun 
955*4882a593Smuzhiyun extern _X_EXPORT void
956*4882a593Smuzhiyun fbDestroyGlyphCache(void);
957*4882a593Smuzhiyun 
958*4882a593Smuzhiyun /*
959*4882a593Smuzhiyun  * fbpixmap.c
960*4882a593Smuzhiyun  */
961*4882a593Smuzhiyun 
962*4882a593Smuzhiyun extern _X_EXPORT PixmapPtr
963*4882a593Smuzhiyun fbCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
964*4882a593Smuzhiyun                unsigned usage_hint);
965*4882a593Smuzhiyun 
966*4882a593Smuzhiyun extern _X_EXPORT Bool
967*4882a593Smuzhiyun  fbDestroyPixmap(PixmapPtr pPixmap);
968*4882a593Smuzhiyun 
969*4882a593Smuzhiyun extern _X_EXPORT RegionPtr
970*4882a593Smuzhiyun  fbPixmapToRegion(PixmapPtr pPix);
971*4882a593Smuzhiyun 
972*4882a593Smuzhiyun /*
973*4882a593Smuzhiyun  * fbpoint.c
974*4882a593Smuzhiyun  */
975*4882a593Smuzhiyun 
976*4882a593Smuzhiyun extern _X_EXPORT void
977*4882a593Smuzhiyun 
978*4882a593Smuzhiyun fbPolyPoint(DrawablePtr pDrawable,
979*4882a593Smuzhiyun             GCPtr pGC, int mode, int npt, xPoint * pptInit);
980*4882a593Smuzhiyun 
981*4882a593Smuzhiyun /*
982*4882a593Smuzhiyun  * fbpush.c
983*4882a593Smuzhiyun  */
984*4882a593Smuzhiyun 
985*4882a593Smuzhiyun extern _X_EXPORT void
986*4882a593Smuzhiyun 
987*4882a593Smuzhiyun fbPushImage(DrawablePtr pDrawable,
988*4882a593Smuzhiyun             GCPtr pGC,
989*4882a593Smuzhiyun             FbStip * src,
990*4882a593Smuzhiyun             FbStride srcStride, int srcX, int x, int y, int width, int height);
991*4882a593Smuzhiyun 
992*4882a593Smuzhiyun extern _X_EXPORT void
993*4882a593Smuzhiyun 
994*4882a593Smuzhiyun fbPushPixels(GCPtr pGC,
995*4882a593Smuzhiyun              PixmapPtr pBitmap,
996*4882a593Smuzhiyun              DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg);
997*4882a593Smuzhiyun 
998*4882a593Smuzhiyun /*
999*4882a593Smuzhiyun  * fbscreen.c
1000*4882a593Smuzhiyun  */
1001*4882a593Smuzhiyun 
1002*4882a593Smuzhiyun extern _X_EXPORT Bool
1003*4882a593Smuzhiyun  fbCloseScreen(ScreenPtr pScreen);
1004*4882a593Smuzhiyun 
1005*4882a593Smuzhiyun extern _X_EXPORT Bool
1006*4882a593Smuzhiyun  fbRealizeFont(ScreenPtr pScreen, FontPtr pFont);
1007*4882a593Smuzhiyun 
1008*4882a593Smuzhiyun extern _X_EXPORT Bool
1009*4882a593Smuzhiyun  fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
1010*4882a593Smuzhiyun 
1011*4882a593Smuzhiyun extern _X_EXPORT void
1012*4882a593Smuzhiyun 
1013*4882a593Smuzhiyun fbQueryBestSize(int class,
1014*4882a593Smuzhiyun                 unsigned short *width, unsigned short *height,
1015*4882a593Smuzhiyun                 ScreenPtr pScreen);
1016*4882a593Smuzhiyun 
1017*4882a593Smuzhiyun extern _X_EXPORT PixmapPtr
1018*4882a593Smuzhiyun  _fbGetWindowPixmap(WindowPtr pWindow);
1019*4882a593Smuzhiyun 
1020*4882a593Smuzhiyun extern _X_EXPORT void
1021*4882a593Smuzhiyun  _fbSetWindowPixmap(WindowPtr pWindow, PixmapPtr pPixmap);
1022*4882a593Smuzhiyun 
1023*4882a593Smuzhiyun extern _X_EXPORT Bool
1024*4882a593Smuzhiyun  fbSetupScreen(ScreenPtr pScreen, void *pbits,        /* pointer to screen bitmap */
1025*4882a593Smuzhiyun                int xsize,       /* in pixels */
1026*4882a593Smuzhiyun                int ysize, int dpix,     /* dots per inch */
1027*4882a593Smuzhiyun                int dpiy, int width,     /* pixel width of frame buffer */
1028*4882a593Smuzhiyun                int bpp);        /* bits per pixel of frame buffer */
1029*4882a593Smuzhiyun 
1030*4882a593Smuzhiyun #ifdef FB_ACCESS_WRAPPER
1031*4882a593Smuzhiyun extern _X_EXPORT Bool
1032*4882a593Smuzhiyun wfbFinishScreenInit(ScreenPtr pScreen,
1033*4882a593Smuzhiyun                     void *pbits,
1034*4882a593Smuzhiyun                     int xsize,
1035*4882a593Smuzhiyun                     int ysize,
1036*4882a593Smuzhiyun                     int dpix,
1037*4882a593Smuzhiyun                     int dpiy,
1038*4882a593Smuzhiyun                     int width,
1039*4882a593Smuzhiyun                     int bpp,
1040*4882a593Smuzhiyun                     SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
1041*4882a593Smuzhiyun 
1042*4882a593Smuzhiyun extern _X_EXPORT Bool
1043*4882a593Smuzhiyun wfbScreenInit(ScreenPtr pScreen,
1044*4882a593Smuzhiyun               void *pbits,
1045*4882a593Smuzhiyun               int xsize,
1046*4882a593Smuzhiyun               int ysize,
1047*4882a593Smuzhiyun               int dpix,
1048*4882a593Smuzhiyun               int dpiy,
1049*4882a593Smuzhiyun               int width,
1050*4882a593Smuzhiyun               int bpp,
1051*4882a593Smuzhiyun               SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
1052*4882a593Smuzhiyun #endif
1053*4882a593Smuzhiyun 
1054*4882a593Smuzhiyun extern _X_EXPORT Bool
1055*4882a593Smuzhiyun fbFinishScreenInit(ScreenPtr pScreen,
1056*4882a593Smuzhiyun                    void *pbits,
1057*4882a593Smuzhiyun                    int xsize,
1058*4882a593Smuzhiyun                    int ysize, int dpix, int dpiy, int width, int bpp);
1059*4882a593Smuzhiyun 
1060*4882a593Smuzhiyun extern _X_EXPORT Bool
1061*4882a593Smuzhiyun 
1062*4882a593Smuzhiyun fbScreenInit(ScreenPtr pScreen,
1063*4882a593Smuzhiyun              void *pbits,
1064*4882a593Smuzhiyun              int xsize, int ysize, int dpix, int dpiy, int width, int bpp);
1065*4882a593Smuzhiyun 
1066*4882a593Smuzhiyun /*
1067*4882a593Smuzhiyun  * fbseg.c
1068*4882a593Smuzhiyun  */
1069*4882a593Smuzhiyun typedef void FbBres(DrawablePtr pDrawable,
1070*4882a593Smuzhiyun                     GCPtr pGC,
1071*4882a593Smuzhiyun                     int dashOffset,
1072*4882a593Smuzhiyun                     int signdx,
1073*4882a593Smuzhiyun                     int signdy,
1074*4882a593Smuzhiyun                     int axis, int x, int y, int e, int e1, int e3, int len);
1075*4882a593Smuzhiyun 
1076*4882a593Smuzhiyun extern _X_EXPORT void
1077*4882a593Smuzhiyun fbSegment(DrawablePtr pDrawable,
1078*4882a593Smuzhiyun           GCPtr pGC,
1079*4882a593Smuzhiyun           int xa, int ya, int xb, int yb, Bool drawLast, int *dashOffset);
1080*4882a593Smuzhiyun 
1081*4882a593Smuzhiyun /*
1082*4882a593Smuzhiyun  * fbsetsp.c
1083*4882a593Smuzhiyun  */
1084*4882a593Smuzhiyun 
1085*4882a593Smuzhiyun extern _X_EXPORT void
1086*4882a593Smuzhiyun fbSetSpans(DrawablePtr pDrawable,
1087*4882a593Smuzhiyun            GCPtr pGC,
1088*4882a593Smuzhiyun            char *src, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
1089*4882a593Smuzhiyun 
1090*4882a593Smuzhiyun /*
1091*4882a593Smuzhiyun  * fbsolid.c
1092*4882a593Smuzhiyun  */
1093*4882a593Smuzhiyun 
1094*4882a593Smuzhiyun extern _X_EXPORT void
1095*4882a593Smuzhiyun 
1096*4882a593Smuzhiyun fbSolid(FbBits * dst,
1097*4882a593Smuzhiyun         FbStride dstStride,
1098*4882a593Smuzhiyun         int dstX, int bpp, int width, int height, FbBits and, FbBits xor);
1099*4882a593Smuzhiyun 
1100*4882a593Smuzhiyun /*
1101*4882a593Smuzhiyun  * fbutil.c
1102*4882a593Smuzhiyun  */
1103*4882a593Smuzhiyun extern _X_EXPORT FbBits fbReplicatePixel(Pixel p, int bpp);
1104*4882a593Smuzhiyun 
1105*4882a593Smuzhiyun #ifdef FB_ACCESS_WRAPPER
1106*4882a593Smuzhiyun extern _X_EXPORT ReadMemoryProcPtr wfbReadMemory;
1107*4882a593Smuzhiyun extern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
1108*4882a593Smuzhiyun #endif
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun /*
1111*4882a593Smuzhiyun  * fbwindow.c
1112*4882a593Smuzhiyun  */
1113*4882a593Smuzhiyun 
1114*4882a593Smuzhiyun extern _X_EXPORT Bool
1115*4882a593Smuzhiyun  fbCreateWindow(WindowPtr pWin);
1116*4882a593Smuzhiyun 
1117*4882a593Smuzhiyun extern _X_EXPORT Bool
1118*4882a593Smuzhiyun  fbDestroyWindow(WindowPtr pWin);
1119*4882a593Smuzhiyun 
1120*4882a593Smuzhiyun extern _X_EXPORT Bool
1121*4882a593Smuzhiyun  fbRealizeWindow(WindowPtr pWindow);
1122*4882a593Smuzhiyun 
1123*4882a593Smuzhiyun extern _X_EXPORT Bool
1124*4882a593Smuzhiyun  fbPositionWindow(WindowPtr pWin, int x, int y);
1125*4882a593Smuzhiyun 
1126*4882a593Smuzhiyun extern _X_EXPORT Bool
1127*4882a593Smuzhiyun  fbUnrealizeWindow(WindowPtr pWindow);
1128*4882a593Smuzhiyun 
1129*4882a593Smuzhiyun extern _X_EXPORT void
1130*4882a593Smuzhiyun 
1131*4882a593Smuzhiyun fbCopyWindowProc(DrawablePtr pSrcDrawable,
1132*4882a593Smuzhiyun                  DrawablePtr pDstDrawable,
1133*4882a593Smuzhiyun                  GCPtr pGC,
1134*4882a593Smuzhiyun                  BoxPtr pbox,
1135*4882a593Smuzhiyun                  int nbox,
1136*4882a593Smuzhiyun                  int dx,
1137*4882a593Smuzhiyun                  int dy,
1138*4882a593Smuzhiyun                  Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1139*4882a593Smuzhiyun 
1140*4882a593Smuzhiyun extern _X_EXPORT void
1141*4882a593Smuzhiyun  fbCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
1142*4882a593Smuzhiyun 
1143*4882a593Smuzhiyun extern _X_EXPORT Bool
1144*4882a593Smuzhiyun  fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
1145*4882a593Smuzhiyun 
1146*4882a593Smuzhiyun extern _X_EXPORT void
1147*4882a593Smuzhiyun 
1148*4882a593Smuzhiyun fbFillRegionSolid(DrawablePtr pDrawable,
1149*4882a593Smuzhiyun                   RegionPtr pRegion, FbBits and, FbBits xor);
1150*4882a593Smuzhiyun 
1151*4882a593Smuzhiyun extern _X_EXPORT pixman_image_t *image_from_pict(PicturePtr pict,
1152*4882a593Smuzhiyun                                                  Bool has_clip,
1153*4882a593Smuzhiyun                                                  int *xoff, int *yoff);
1154*4882a593Smuzhiyun 
1155*4882a593Smuzhiyun extern _X_EXPORT void free_pixman_pict(PicturePtr, pixman_image_t *);
1156*4882a593Smuzhiyun 
1157*4882a593Smuzhiyun #endif                          /* _FB_H_ */
1158