fb.h revision 706f2543
1/*
2 *
3 * Copyright © 1998 Keith Packard
4 *
5 * Permission to use, copy, modify, distribute, and sell this software and its
6 * documentation for any purpose is hereby granted without fee, provided that
7 * the above copyright notice appear in all copies and that both that
8 * copyright notice and this permission notice appear in supporting
9 * documentation, and that the name of Keith Packard not be used in
10 * advertising or publicity pertaining to distribution of the software without
11 * specific, written prior permission.  Keith Packard makes no
12 * representations about the suitability of this software for any purpose.  It
13 * is provided "as is" without express or implied warranty.
14 *
15 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21 * PERFORMANCE OF THIS SOFTWARE.
22 */
23
24
25#ifndef _FB_H_
26#define _FB_H_
27
28#include <X11/X.h>
29#include <pixman.h>
30
31#include "scrnintstr.h"
32#include "pixmap.h"
33#include "pixmapstr.h"
34#include "region.h"
35#include "gcstruct.h"
36#include "colormap.h"
37#include "miscstruct.h"
38#include "servermd.h"
39#include "windowstr.h"
40#include "privates.h"
41#include "mi.h"
42#include "migc.h"
43#include "mibstore.h"
44#include "picturestr.h"
45
46#ifdef FB_ACCESS_WRAPPER
47
48#include "wfbrename.h"
49#define FBPREFIX(x) wfb##x
50#define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr))))
51#define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr))))
52
53#define MEMCPY_WRAPPED(dst, src, size) do {                       \
54    size_t _i;                                                    \
55    CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src);           \
56    for(_i = 0; _i < size; _i++) {                                \
57        WRITE(_dst +_i, READ(_src + _i));                         \
58    }                                                             \
59} while(0)
60
61#define MEMSET_WRAPPED(dst, val, size) do {                       \
62    size_t _i;                                                    \
63    CARD8 *_dst = (CARD8*)(dst);                                  \
64    for(_i = 0; _i < size; _i++) {                                \
65        WRITE(_dst +_i, (val));                                   \
66    }                                                             \
67} while(0)
68
69#else
70
71#define FBPREFIX(x) fb##x
72#define WRITE(ptr, val) (*(ptr) = (val))
73#define READ(ptr) (*(ptr))
74#define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size))
75#define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size))
76
77#endif
78
79/*
80 * This single define controls the basic size of data manipulated
81 * by this software; it must be log2(sizeof (FbBits) * 8)
82 */
83
84#ifndef FB_SHIFT
85#define FB_SHIFT    LOG2_BITMAP_PAD
86#endif
87
88#if FB_SHIFT < LOG2_BITMAP_PAD
89    error FB_SHIFT must be >= LOG2_BITMAP_PAD
90#endif
91
92#define FB_UNIT	    (1 << FB_SHIFT)
93#define FB_HALFUNIT (1 << (FB_SHIFT-1))
94#define FB_MASK	    (FB_UNIT - 1)
95#define FB_ALLONES  ((FbBits) -1)
96
97#if GLYPHPADBYTES != 4
98#error "GLYPHPADBYTES must be 4"
99#endif
100/* whether to bother to include 24bpp support */
101#ifndef FBNO24BIT
102#define FB_24BIT
103#endif
104
105/*
106 * Unless otherwise instructed, fb includes code to advertise 24bpp
107 * windows with 32bpp image format for application compatibility
108 */
109
110#ifdef FB_24BIT
111#ifndef FBNO24_32
112#define FB_24_32BIT
113#endif
114#endif
115
116#define FB_STIP_SHIFT	LOG2_BITMAP_PAD
117#define FB_STIP_UNIT	(1 << FB_STIP_SHIFT)
118#define FB_STIP_MASK	(FB_STIP_UNIT - 1)
119#define FB_STIP_ALLONES	((FbStip) -1)
120
121#define FB_STIP_ODDSTRIDE(s)	(((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0)
122#define FB_STIP_ODDPTR(p)	((((long) (p)) & (FB_MASK >> 3)) != 0)
123
124#define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
125#define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
126
127#define FbFullMask(n)   ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
128
129#if FB_SHIFT == 6
130# ifdef WIN32
131typedef unsigned __int64    FbBits;
132# else
133#  if defined(__alpha__) || defined(__alpha) || \
134      defined(ia64) || defined(__ia64__) || \
135      defined(__sparc64__) || defined(_LP64) || \
136      defined(__s390x__) || \
137      defined(amd64) || defined (__amd64__) || \
138      defined (__powerpc64__)
139typedef unsigned long	    FbBits;
140#  else
141typedef unsigned long long  FbBits;
142#  endif
143# endif
144#endif
145
146#if FB_SHIFT == 5
147typedef CARD32		    FbBits;
148#endif
149
150#if FB_SHIFT == 4
151typedef CARD16		    FbBits;
152#endif
153
154#if LOG2_BITMAP_PAD == FB_SHIFT
155typedef FbBits		    FbStip;
156#else
157# if LOG2_BITMAP_PAD == 5
158typedef CARD32		    FbStip;
159# endif
160#endif
161
162typedef int		    FbStride;
163
164
165#ifdef FB_DEBUG
166extern _X_EXPORT void fbValidateDrawable(DrawablePtr d);
167extern _X_EXPORT void fbInitializeDrawable(DrawablePtr d);
168extern _X_EXPORT void fbSetBits (FbStip *bits, int stride, FbStip data);
169#define FB_HEAD_BITS   (FbStip) (0xbaadf00d)
170#define FB_TAIL_BITS   (FbStip) (0xbaddf0ad)
171#else
172#define fbValidateDrawable(d)
173#define fdInitializeDrawable(d)
174#endif
175
176#include "fbrop.h"
177
178#if BITMAP_BIT_ORDER == LSBFirst
179#define FbScrLeft(x,n)	((x) >> (n))
180#define FbScrRight(x,n)	((x) << (n))
181/* #define FbLeftBits(x,n)	((x) & ((((FbBits) 1) << (n)) - 1)) */
182#define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1))
183#define FbStipMoveLsb(x,s,n)	(FbStipRight (x,(s)-(n)))
184#define FbPatternOffsetBits	0
185#else
186#define FbScrLeft(x,n)	((x) << (n))
187#define FbScrRight(x,n)	((x) >> (n))
188/* #define FbLeftBits(x,n)	((x) >> (FB_UNIT - (n))) */
189#define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n)))
190#define FbStipMoveLsb(x,s,n)	(x)
191#define FbPatternOffsetBits	(sizeof (FbBits) - 1)
192#endif
193
194#include "micoord.h"
195
196#define FbStipLeft(x,n)	FbScrLeft(x,n)
197#define FbStipRight(x,n) FbScrRight(x,n)
198
199#define FbRotLeft(x,n)	FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0)
200#define FbRotRight(x,n)	FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0)
201
202#define FbRotStipLeft(x,n)  FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0)
203#define FbRotStipRight(x,n)  FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0)
204
205#define FbLeftMask(x)	    ( ((x) & FB_MASK) ? \
206			     FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0)
207#define FbRightMask(x)	    ( ((FB_UNIT - (x)) & FB_MASK) ? \
208			     FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0)
209
210#define FbLeftStipMask(x)   ( ((x) & FB_STIP_MASK) ? \
211			     FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0)
212#define FbRightStipMask(x)  ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
213			     FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)
214
215#define FbBitsMask(x,w)	(FbScrRight(FB_ALLONES,(x) & FB_MASK) & \
216			 FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK))
217
218#define FbStipMask(x,w)	(FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
219			 FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
220
221
222#define FbMaskBits(x,w,l,n,r) { \
223    n = (w); \
224    r = FbRightMask((x)+n); \
225    l = FbLeftMask(x); \
226    if (l) { \
227	n -= FB_UNIT - ((x) & FB_MASK); \
228	if (n < 0) { \
229	    n = 0; \
230	    l &= r; \
231	    r = 0; \
232	} \
233    } \
234    n >>= FB_SHIFT; \
235}
236
237#ifdef FBNOPIXADDR
238#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) FbMaskBits(x,w,l,n,r)
239#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
240    *dst = FbDoMaskRRop(*dst,and,xor,l); \
241}
242#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
243    *dst = FbDoMaskRRop(*dst,and,xor,r); \
244}
245#else
246
247#define FbByteMaskInvalid   0x10
248
249#define FbPatternOffset(o,t)  ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
250
251#define FbPtrOffset(p,o,t)		((t *) ((CARD8 *) (p) + (o)))
252#define FbSelectPatternPart(xor,o,t)	((xor) >> (FbPatternOffset (o,t) << 3))
253#define FbStorePart(dst,off,t,xor)	(WRITE(FbPtrOffset(dst,off,t), \
254					 FbSelectPart(xor,off,t)))
255#ifndef FbSelectPart
256#define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t)
257#endif
258
259#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \
260    n = (w); \
261    lb = 0; \
262    rb = 0; \
263    r = FbRightMask((x)+n); \
264    if (r) { \
265	/* compute right byte length */ \
266	if ((copy) && (((x) + n) & 7) == 0) { \
267	    rb = (((x) + n) & FB_MASK) >> 3; \
268	} else { \
269	    rb = FbByteMaskInvalid; \
270	} \
271    } \
272    l = FbLeftMask(x); \
273    if (l) { \
274	/* compute left byte length */ \
275	if ((copy) && ((x) & 7) == 0) { \
276	    lb = ((x) & FB_MASK) >> 3; \
277	} else { \
278	    lb = FbByteMaskInvalid; \
279	} \
280	/* subtract out the portion painted by leftMask */ \
281	n -= FB_UNIT - ((x) & FB_MASK); \
282	if (n < 0) { \
283	    if (lb != FbByteMaskInvalid) { \
284		if (rb == FbByteMaskInvalid) { \
285		    lb = FbByteMaskInvalid; \
286		} else if (rb) { \
287		    lb |= (rb - lb) << (FB_SHIFT - 3); \
288		    rb = 0; \
289		} \
290	    } \
291	    n = 0; \
292	    l &= r; \
293	    r = 0; \
294	}\
295    } \
296    n >>= FB_SHIFT; \
297}
298
299#if FB_SHIFT == 6
300#define FbDoLeftMaskByteRRop6Cases(dst,xor) \
301    case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \
302	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
303	break; \
304    case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \
305	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
306	FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
307	break; \
308    case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \
309	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
310	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
311	break; \
312    case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \
313	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
314	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
315	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
316	break; \
317    case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \
318	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
319	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
320	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
321	break; \
322    case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \
323	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
324	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
325	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
326	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
327	break; \
328    case (sizeof (FbBits) - 7): \
329	FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
330	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
331	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
332	break; \
333    case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \
334	FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
335	break; \
336    case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \
337	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
338	break; \
339    case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \
340	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
341	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
342	break; \
343    case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \
344	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
345	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
346	break; \
347    case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \
348	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
349	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
350	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
351	break; \
352    case (sizeof (FbBits) - 6): \
353	FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
354	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
355	break; \
356    case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \
357	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
358	break; \
359    case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \
360	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
361	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
362	break; \
363    case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \
364	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
365	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
366	break; \
367    case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \
368	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
369	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
370	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
371	break; \
372    case (sizeof (FbBits) - 5): \
373	FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
374	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
375	break; \
376    case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \
377	FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
378	break; \
379    case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \
380	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
381	break; \
382    case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \
383	FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
384	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
385	break; \
386    case (sizeof (FbBits) - 4): \
387	FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
388	break;
389
390#define FbDoRightMaskByteRRop6Cases(dst,xor) \
391    case 4: \
392	FbStorePart(dst,0,CARD32,xor); \
393	break; \
394    case 5: \
395	FbStorePart(dst,0,CARD32,xor); \
396	FbStorePart(dst,4,CARD8,xor); \
397	break; \
398    case 6: \
399	FbStorePart(dst,0,CARD32,xor); \
400	FbStorePart(dst,4,CARD16,xor); \
401	break; \
402    case 7: \
403	FbStorePart(dst,0,CARD32,xor); \
404	FbStorePart(dst,4,CARD16,xor); \
405	FbStorePart(dst,6,CARD8,xor); \
406	break;
407#else
408#define FbDoLeftMaskByteRRop6Cases(dst,xor)
409#define FbDoRightMaskByteRRop6Cases(dst,xor)
410#endif
411
412#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
413    switch (lb) { \
414    FbDoLeftMaskByteRRop6Cases(dst,xor) \
415    case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
416	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
417	break; \
418    case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \
419	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
420	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
421	break; \
422    case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \
423	FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
424	break; \
425    case sizeof (FbBits) - 3: \
426	FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
427    case sizeof (FbBits) - 2: \
428	FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \
429	break; \
430    case sizeof (FbBits) - 1: \
431	FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \
432	break; \
433    default: \
434	WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \
435	break; \
436    } \
437}
438
439
440#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
441    switch (rb) { \
442    case 1: \
443	FbStorePart(dst,0,CARD8,xor); \
444	break; \
445    case 2: \
446	FbStorePart(dst,0,CARD16,xor); \
447	break; \
448    case 3: \
449	FbStorePart(dst,0,CARD16,xor); \
450	FbStorePart(dst,2,CARD8,xor); \
451	break; \
452    FbDoRightMaskByteRRop6Cases(dst,xor) \
453    default: \
454	WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
455    } \
456}
457#endif
458
459#define FbMaskStip(x,w,l,n,r) { \
460    n = (w); \
461    r = FbRightStipMask((x)+n); \
462    l = FbLeftStipMask(x); \
463    if (l) { \
464	n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \
465	if (n < 0) { \
466	    n = 0; \
467	    l &= r; \
468	    r = 0; \
469	} \
470    } \
471    n >>= FB_STIP_SHIFT; \
472}
473
474/*
475 * These macros are used to transparently stipple
476 * in copy mode; the expected usage is with 'n' constant
477 * so all of the conditional parts collapse into a minimal
478 * sequence of partial word writes
479 *
480 * 'n' is the bytemask of which bytes to store, 'a' is the address
481 * of the FbBits base unit, 'o' is the offset within that unit
482 *
483 * The term "lane" comes from the hardware term "byte-lane" which
484 */
485
486#define FbLaneCase1(n,a,o)						\
487    if ((n) == 0x01) {							\
488	WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor);		\
489    }
490
491#define FbLaneCase2(n,a,o)						\
492    if ((n) == 0x03) {							\
493	WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor);	\
494    } else {								\
495	FbLaneCase1((n)&1,a,o)						\
496	FbLaneCase1((n)>>1,a,(o)+1)					\
497    }
498
499#define FbLaneCase4(n,a,o)						\
500    if ((n) == 0x0f) {							\
501	WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor);	\
502    } else {								\
503	FbLaneCase2((n)&3,a,o)						\
504	FbLaneCase2((n)>>2,a,(o)+2)					\
505    }
506
507#define FbLaneCase8(n,a,o)						\
508    if ((n) == 0x0ff) {							\
509	*(FbBits *) ((a)+(o)) = fgxor;					\
510    } else {								\
511	FbLaneCase4((n)&15,a,o)						\
512	FbLaneCase4((n)>>4,a,(o)+4)					\
513    }
514
515#if FB_SHIFT == 6
516#define FbLaneCase(n,a)   FbLaneCase8(n,(CARD8 *) (a),0)
517#endif
518
519#if FB_SHIFT == 5
520#define FbLaneCase(n,a)   FbLaneCase4(n,(CARD8 *) (a),0)
521#endif
522
523/* Rotate a filled pixel value to the specified alignement */
524#define FbRot24(p,b)	    (FbScrRight(p,b) | FbScrLeft(p,24-(b)))
525#define FbRot24Stip(p,b)    (FbStipRight(p,b) | FbStipLeft(p,24-(b)))
526
527/* step a filled pixel value to the next/previous FB_UNIT alignment */
528#define FbNext24Pix(p)	(FbRot24(p,(24-FB_UNIT%24)))
529#define FbPrev24Pix(p)	(FbRot24(p,FB_UNIT%24))
530#define FbNext24Stip(p)	(FbRot24(p,(24-FB_STIP_UNIT%24)))
531#define FbPrev24Stip(p)	(FbRot24(p,FB_STIP_UNIT%24))
532
533/* step a rotation value to the next/previous rotation value */
534#if FB_UNIT == 64
535#define FbNext24Rot(r)        ((r) == 16 ? 0 : (r) + 8)
536#define FbPrev24Rot(r)        ((r) == 0 ? 16 : (r) - 8)
537
538#if IMAGE_BYTE_ORDER == MSBFirst
539#define FbFirst24Rot(x)		(((x) + 8) % 24)
540#else
541#define FbFirst24Rot(x)		((x) % 24)
542#endif
543
544#endif
545
546#if FB_UNIT == 32
547#define FbNext24Rot(r)        ((r) == 0 ? 16 : (r) - 8)
548#define FbPrev24Rot(r)        ((r) == 16 ? 0 : (r) + 8)
549
550#if IMAGE_BYTE_ORDER == MSBFirst
551#define FbFirst24Rot(x)		(((x) + 16) % 24)
552#else
553#define FbFirst24Rot(x)		((x) % 24)
554#endif
555#endif
556
557#define FbNext24RotStip(r)        ((r) == 0 ? 16 : (r) - 8)
558#define FbPrev24RotStip(r)        ((r) == 16 ? 0 : (r) + 8)
559
560/* Whether 24-bit specific code is needed for this filled pixel value */
561#define FbCheck24Pix(p)	((p) == FbNext24Pix(p))
562
563/* Macros for dealing with dashing */
564
565#define FbDashDeclare	\
566    unsigned char	*__dash, *__firstDash, *__lastDash
567
568#define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) {	    \
569    (even) = TRUE;					    \
570    __firstDash = (pGC)->dash;				    \
571    __lastDash = __firstDash + (pGC)->numInDashList;	    \
572    (dashOffset) %= (pPriv)->dashLength;		    \
573							    \
574    __dash = __firstDash;				    \
575    while ((dashOffset) >= ((dashlen) = *__dash))	    \
576    {							    \
577	(dashOffset) -= (dashlen);			    \
578	(even) = 1-(even);				    \
579	if (++__dash == __lastDash)			    \
580	    __dash = __firstDash;			    \
581    }							    \
582    (dashlen) -= (dashOffset);				    \
583}
584
585#define FbDashNext(dashlen) {				    \
586    if (++__dash == __lastDash)				    \
587	__dash = __firstDash;				    \
588    (dashlen) = *__dash;				    \
589}
590
591/* as numInDashList is always even, this case can skip a test */
592
593#define FbDashNextEven(dashlen) {			    \
594    (dashlen) = *++__dash;				    \
595}
596
597#define FbDashNextOdd(dashlen)	FbDashNext(dashlen)
598
599#define FbDashStep(dashlen,even) {			    \
600    if (!--(dashlen)) {					    \
601	FbDashNext(dashlen);				    \
602	(even) = 1-(even);				    \
603    }							    \
604}
605
606extern _X_EXPORT DevPrivateKey
607fbGetGCPrivateKey (void);
608
609extern _X_EXPORT DevPrivateKey
610fbGetWinPrivateKey (void);
611
612extern _X_EXPORT const GCOps	fbGCOps;
613extern _X_EXPORT const GCFuncs	fbGCFuncs;
614
615#ifdef FB_24_32BIT
616#define FB_SCREEN_PRIVATE
617#endif
618
619/* Framebuffer access wrapper */
620typedef FbBits (*ReadMemoryProcPtr)(const void *src, int size);
621typedef void (*WriteMemoryProcPtr)(void *dst, FbBits value, int size);
622typedef void (*SetupWrapProcPtr)(ReadMemoryProcPtr  *pRead,
623                                 WriteMemoryProcPtr *pWrite,
624                                 DrawablePtr         pDraw);
625typedef void (*FinishWrapProcPtr)(DrawablePtr pDraw);
626
627#ifdef FB_ACCESS_WRAPPER
628
629#define fbPrepareAccess(pDraw) \
630	fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \
631		&wfbReadMemory, \
632		&wfbWriteMemory, \
633		(pDraw))
634#define fbFinishAccess(pDraw) \
635	fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw)
636
637#else
638
639#define fbPrepareAccess(pPix)
640#define fbFinishAccess(pDraw)
641
642#endif
643
644
645#ifdef FB_SCREEN_PRIVATE
646extern _X_EXPORT DevPrivateKey
647fbGetScreenPrivateKey(void);
648
649/* private field of a screen */
650typedef struct {
651    unsigned char	win32bpp;	/* window bpp for 32-bpp images */
652    unsigned char	pix32bpp;	/* pixmap bpp for 32-bpp images */
653#ifdef FB_ACCESS_WRAPPER
654    SetupWrapProcPtr	setupWrap;	/* driver hook to set pixmap access wrapping */
655    FinishWrapProcPtr	finishWrap;	/* driver hook to clean up pixmap access wrapping */
656#endif
657} FbScreenPrivRec, *FbScreenPrivPtr;
658
659#define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \
660				     dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey()))
661#endif
662
663/* private field of GC */
664typedef struct {
665    FbBits		and, xor;	/* reduced rop values */
666    FbBits		bgand, bgxor;	/* for stipples */
667    FbBits		fg, bg, pm;	/* expanded and filled */
668    unsigned int	dashLength;	/* total of all dash elements */
669    unsigned char    	evenStipple;	/* stipple is even */
670    unsigned char    	bpp;		/* current drawable bpp */
671} FbGCPrivRec, *FbGCPrivPtr;
672
673#define fbGetGCPrivate(pGC)	((FbGCPrivPtr)\
674				 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey()))
675
676#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
677#define fbGetExpose(pGC)	((pGC)->fExpose)
678#define fbGetFreeCompClip(pGC)	((pGC)->freeCompClip)
679#define fbGetRotatedPixmap(pGC)	((pGC)->pRotatedPixmap)
680
681#define fbGetScreenPixmap(s)	((PixmapPtr) (s)->devPrivate)
682#define fbGetWindowPixmap(pWin)	((PixmapPtr)\
683				 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey()))
684
685#ifdef ROOTLESS
686#define __fbPixDrawableX(pPix)	((pPix)->drawable.x)
687#define __fbPixDrawableY(pPix)	((pPix)->drawable.y)
688#else
689#define __fbPixDrawableX(pPix)	0
690#define __fbPixDrawableY(pPix)	0
691#endif
692
693#ifdef COMPOSITE
694#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix) - (pPix)->screen_x)
695#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix) - (pPix)->screen_y)
696#else
697#define __fbPixOffXWin(pPix)	(__fbPixDrawableX(pPix))
698#define __fbPixOffYWin(pPix)	(__fbPixDrawableY(pPix))
699#endif
700#define __fbPixOffXPix(pPix)	(__fbPixDrawableX(pPix))
701#define __fbPixOffYPix(pPix)	(__fbPixDrawableY(pPix))
702
703#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) {			\
704    if ((pDrawable)->type != DRAWABLE_PIXMAP) { 				\
705	(pixmap) = fbGetWindowPixmap(pDrawable);				\
706	(xoff) = __fbPixOffXWin(pixmap); 					\
707	(yoff) = __fbPixOffYWin(pixmap); 					\
708    } else { 									\
709	(pixmap) = (PixmapPtr) (pDrawable);					\
710	(xoff) = __fbPixOffXPix(pixmap); 					\
711	(yoff) = __fbPixOffYPix(pixmap); 					\
712    } 										\
713    fbPrepareAccess(pDrawable); 						\
714}
715
716#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) {			\
717    (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; 			       	\
718    (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride);	\
719    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
720}
721
722#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) {			\
723    (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; 			       	\
724    (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride);	\
725    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
726}
727
728#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 		\
729    PixmapPtr   _pPix; 								\
730    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); 				\
731    fbGetPixmapBitsData(_pPix, pointer, stride, bpp);				\
732}
733
734#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 	\
735    PixmapPtr   _pPix; 								\
736    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff);				\
737    fbGetPixmapStipData(_pPix, pointer, stride, bpp);				\
738}
739
740/*
741 * XFree86 empties the root BorderClip when the VT is inactive,
742 * here's a macro which uses that to disable GetImage and GetSpans
743 */
744
745#define fbWindowEnabled(pWin) \
746    RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip)
747
748#define fbDrawableEnabled(pDrawable) \
749    ((pDrawable)->type == DRAWABLE_PIXMAP ? \
750     TRUE : fbWindowEnabled((WindowPtr) pDrawable))
751
752#define FbPowerOfTwo(w)	    (((w) & ((w) - 1)) == 0)
753/*
754 * Accelerated tiles are power of 2 width <= FB_UNIT
755 */
756#define FbEvenTile(w)	    ((w) <= FB_UNIT && FbPowerOfTwo(w))
757/*
758 * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp
759 * with dstBpp a power of 2 as well
760 */
761#define FbEvenStip(w,bpp)   ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp))
762
763/*
764 * fb24_32.c
765 */
766extern _X_EXPORT void
767fb24_32GetSpans(DrawablePtr	pDrawable,
768		int		wMax,
769		DDXPointPtr	ppt,
770		int		*pwidth,
771		int		nspans,
772		char		*pchardstStart);
773
774extern _X_EXPORT void
775fb24_32SetSpans (DrawablePtr	    pDrawable,
776		 GCPtr		    pGC,
777		 char		    *src,
778		 DDXPointPtr	    ppt,
779		 int		    *pwidth,
780		 int		    nspans,
781		 int		    fSorted);
782
783extern _X_EXPORT void
784fb24_32PutZImage (DrawablePtr	pDrawable,
785		  RegionPtr	pClip,
786		  int		alu,
787		  FbBits	pm,
788		  int		x,
789		  int		y,
790		  int		width,
791		  int		height,
792		  CARD8		*src,
793		  FbStride	srcStride);
794
795extern _X_EXPORT void
796fb24_32GetImage (DrawablePtr     pDrawable,
797		 int             x,
798		 int             y,
799		 int             w,
800		 int             h,
801		 unsigned int    format,
802		 unsigned long   planeMask,
803		 char            *d);
804
805extern _X_EXPORT void
806fb24_32CopyMtoN (DrawablePtr pSrcDrawable,
807		 DrawablePtr pDstDrawable,
808		 GCPtr       pGC,
809		 BoxPtr      pbox,
810		 int         nbox,
811		 int         dx,
812		 int         dy,
813		 Bool        reverse,
814		 Bool        upsidedown,
815		 Pixel       bitplane,
816		 void        *closure);
817
818extern _X_EXPORT PixmapPtr
819fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel);
820
821extern _X_EXPORT Bool
822fb24_32CreateScreenResources(ScreenPtr pScreen);
823
824extern _X_EXPORT Bool
825fb24_32ModifyPixmapHeader (PixmapPtr   pPixmap,
826			   int         width,
827			   int         height,
828			   int         depth,
829			   int         bitsPerPixel,
830			   int         devKind,
831			   pointer     pPixData);
832
833/*
834 * fballpriv.c
835 */
836extern _X_EXPORT Bool
837fbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCIndex);
838
839/*
840 * fbarc.c
841 */
842
843extern _X_EXPORT void
844fbPolyArc (DrawablePtr	pDrawable,
845	   GCPtr	pGC,
846	   int		narcs,
847	   xArc		*parcs);
848
849/*
850 * fbbits.c
851 */
852
853extern _X_EXPORT void
854fbBresSolid8(DrawablePtr    pDrawable,
855	     GCPtr	    pGC,
856	     int	    dashOffset,
857	     int	    signdx,
858	     int	    signdy,
859	     int	    axis,
860	     int	    x,
861	     int	    y,
862	     int	    e,
863	     int	    e1,
864	     int	    e3,
865	     int	    len);
866
867extern _X_EXPORT void
868fbBresDash8 (DrawablePtr    pDrawable,
869	     GCPtr	    pGC,
870	     int	    dashOffset,
871	     int	    signdx,
872	     int	    signdy,
873	     int	    axis,
874	     int	    x,
875	     int	    y,
876	     int	    e,
877	     int	    e1,
878	     int	    e3,
879	     int	    len);
880
881extern _X_EXPORT void
882fbDots8 (FbBits	    *dst,
883	 FbStride   dstStride,
884	 int	    dstBpp,
885	 BoxPtr	    pBox,
886	 xPoint	    *pts,
887	 int	    npt,
888	 int	    xorg,
889	 int	    yorg,
890	 int	    xoff,
891	 int	    yoff,
892	 FbBits	    and,
893	 FbBits	    xor);
894
895extern _X_EXPORT void
896fbArc8 (FbBits	    *dst,
897	FbStride    dstStride,
898	int	    dstBpp,
899	xArc	    *arc,
900	int	    dx,
901	int	    dy,
902	FbBits	    and,
903	FbBits	    xor);
904
905extern _X_EXPORT void
906fbGlyph8 (FbBits    *dstLine,
907	  FbStride  dstStride,
908	  int	    dstBpp,
909	  FbStip    *stipple,
910	  FbBits    fg,
911	  int	    height,
912	  int	    shift);
913
914extern _X_EXPORT void
915fbPolyline8 (DrawablePtr    pDrawable,
916	     GCPtr	    pGC,
917	     int	    mode,
918	     int	    npt,
919	     DDXPointPtr    ptsOrig);
920
921extern _X_EXPORT void
922fbPolySegment8 (DrawablePtr pDrawable,
923		GCPtr	    pGC,
924		int	    nseg,
925		xSegment    *pseg);
926
927extern _X_EXPORT void
928fbBresSolid16(DrawablePtr   pDrawable,
929	      GCPtr	    pGC,
930	      int	    dashOffset,
931	      int	    signdx,
932	      int	    signdy,
933	      int	    axis,
934	      int	    x,
935	      int	    y,
936	      int	    e,
937	      int	    e1,
938	      int	    e3,
939	      int	    len);
940
941extern _X_EXPORT void
942fbBresDash16(DrawablePtr    pDrawable,
943	     GCPtr	    pGC,
944	     int	    dashOffset,
945	     int	    signdx,
946	     int	    signdy,
947	     int	    axis,
948	     int	    x,
949	     int	    y,
950	     int	    e,
951	     int	    e1,
952	     int	    e3,
953	     int	    len);
954
955extern _X_EXPORT void
956fbDots16(FbBits	    *dst,
957	 FbStride   dstStride,
958	 int	    dstBpp,
959	 BoxPtr	    pBox,
960	 xPoint	    *pts,
961	 int	    npt,
962	 int	    xorg,
963	 int	    yorg,
964	 int	    xoff,
965	 int	    yoff,
966	 FbBits	    and,
967	 FbBits	    xor);
968
969extern _X_EXPORT void
970fbArc16(FbBits	    *dst,
971	FbStride    dstStride,
972	int	    dstBpp,
973	xArc	    *arc,
974	int	    dx,
975	int	    dy,
976	FbBits	    and,
977	FbBits	    xor);
978
979extern _X_EXPORT void
980fbGlyph16(FbBits    *dstLine,
981	  FbStride  dstStride,
982	  int	    dstBpp,
983	  FbStip    *stipple,
984	  FbBits    fg,
985	  int	    height,
986	  int	    shift);
987
988extern _X_EXPORT void
989fbPolyline16 (DrawablePtr   pDrawable,
990	      GCPtr	    pGC,
991	      int	    mode,
992	      int	    npt,
993	      DDXPointPtr   ptsOrig);
994
995extern _X_EXPORT void
996fbPolySegment16 (DrawablePtr	pDrawable,
997		 GCPtr		pGC,
998		 int		nseg,
999		 xSegment	*pseg);
1000
1001
1002extern _X_EXPORT void
1003fbBresSolid24(DrawablePtr   pDrawable,
1004	      GCPtr	    pGC,
1005	      int	    dashOffset,
1006	      int	    signdx,
1007	      int	    signdy,
1008	      int	    axis,
1009	      int	    x,
1010	      int	    y,
1011	      int	    e,
1012	      int	    e1,
1013	      int	    e3,
1014	      int	    len);
1015
1016extern _X_EXPORT void
1017fbBresDash24(DrawablePtr    pDrawable,
1018	     GCPtr	    pGC,
1019	     int	    dashOffset,
1020	     int	    signdx,
1021	     int	    signdy,
1022	     int	    axis,
1023	     int	    x,
1024	     int	    y,
1025	     int	    e,
1026	     int	    e1,
1027	     int	    e3,
1028	     int	    len);
1029
1030extern _X_EXPORT void
1031fbDots24(FbBits	    *dst,
1032	 FbStride   dstStride,
1033	 int	    dstBpp,
1034	 BoxPtr	    pBox,
1035	 xPoint	    *pts,
1036	 int	    npt,
1037	 int	    xorg,
1038	 int	    yorg,
1039	 int	    xoff,
1040	 int	    yoff,
1041	 FbBits	    and,
1042	 FbBits	    xor);
1043
1044extern _X_EXPORT void
1045fbArc24(FbBits	    *dst,
1046	FbStride    dstStride,
1047	int	    dstBpp,
1048	xArc	    *arc,
1049	int	    dx,
1050	int	    dy,
1051	FbBits	    and,
1052	FbBits	    xor);
1053
1054extern _X_EXPORT void
1055fbGlyph24(FbBits    *dstLine,
1056	  FbStride  dstStride,
1057	  int	    dstBpp,
1058	  FbStip    *stipple,
1059	  FbBits    fg,
1060	  int	    height,
1061	  int	    shift);
1062
1063extern _X_EXPORT void
1064fbPolyline24 (DrawablePtr   pDrawable,
1065	      GCPtr	    pGC,
1066	      int	    mode,
1067	      int	    npt,
1068	      DDXPointPtr   ptsOrig);
1069
1070extern _X_EXPORT void
1071fbPolySegment24 (DrawablePtr	pDrawable,
1072		 GCPtr		pGC,
1073		 int		nseg,
1074		 xSegment	*pseg);
1075
1076
1077extern _X_EXPORT void
1078fbBresSolid32(DrawablePtr   pDrawable,
1079	      GCPtr	    pGC,
1080	      int	    dashOffset,
1081	      int	    signdx,
1082	      int	    signdy,
1083	      int	    axis,
1084	      int	    x,
1085	      int	    y,
1086	      int	    e,
1087	      int	    e1,
1088	      int	    e3,
1089	      int	    len);
1090
1091extern _X_EXPORT void
1092fbBresDash32(DrawablePtr    pDrawable,
1093	     GCPtr	    pGC,
1094	     int	    dashOffset,
1095	     int	    signdx,
1096	     int	    signdy,
1097	     int	    axis,
1098	     int	    x,
1099	     int	    y,
1100	     int	    e,
1101	     int	    e1,
1102	     int	    e3,
1103	     int	    len);
1104
1105extern _X_EXPORT void
1106fbDots32(FbBits	    *dst,
1107	 FbStride   dstStride,
1108	 int	    dstBpp,
1109	 BoxPtr	    pBox,
1110	 xPoint	    *pts,
1111	 int	    npt,
1112	 int	    xorg,
1113	 int	    yorg,
1114	 int	    xoff,
1115	 int	    yoff,
1116	 FbBits	    and,
1117	 FbBits	    xor);
1118
1119extern _X_EXPORT void
1120fbArc32(FbBits	    *dst,
1121	FbStride    dstStride,
1122	int	    dstBpp,
1123	xArc	    *arc,
1124	int	    dx,
1125	int	    dy,
1126	FbBits	    and,
1127	FbBits	    xor);
1128
1129extern _X_EXPORT void
1130fbGlyph32(FbBits    *dstLine,
1131	  FbStride  dstStride,
1132	  int	    dstBpp,
1133	  FbStip    *stipple,
1134	  FbBits    fg,
1135	  int	    height,
1136	  int	    shift);
1137extern _X_EXPORT void
1138fbPolyline32 (DrawablePtr   pDrawable,
1139	      GCPtr	    pGC,
1140	      int	    mode,
1141	      int	    npt,
1142	      DDXPointPtr   ptsOrig);
1143
1144extern _X_EXPORT void
1145fbPolySegment32 (DrawablePtr	pDrawable,
1146		 GCPtr		pGC,
1147		 int		nseg,
1148		 xSegment	*pseg);
1149
1150/*
1151 * fbblt.c
1152 */
1153extern _X_EXPORT void
1154fbBlt (FbBits   *src,
1155       FbStride	srcStride,
1156       int	srcX,
1157
1158       FbBits   *dst,
1159       FbStride dstStride,
1160       int	dstX,
1161
1162       int	width,
1163       int	height,
1164
1165       int	alu,
1166       FbBits	pm,
1167       int	bpp,
1168
1169       Bool	reverse,
1170       Bool	upsidedown);
1171
1172extern _X_EXPORT void
1173fbBlt24 (FbBits	    *srcLine,
1174	 FbStride   srcStride,
1175	 int	    srcX,
1176
1177	 FbBits	    *dstLine,
1178	 FbStride   dstStride,
1179	 int	    dstX,
1180
1181	 int	    width,
1182	 int	    height,
1183
1184	 int	    alu,
1185	 FbBits	    pm,
1186
1187	 Bool	    reverse,
1188	 Bool	    upsidedown);
1189
1190extern _X_EXPORT void
1191fbBltStip (FbStip   *src,
1192	   FbStride srcStride,	    /* in FbStip units, not FbBits units */
1193	   int	    srcX,
1194
1195	   FbStip   *dst,
1196	   FbStride dstStride,	    /* in FbStip units, not FbBits units */
1197	   int	    dstX,
1198
1199	   int	    width,
1200	   int	    height,
1201
1202	   int	    alu,
1203	   FbBits   pm,
1204	   int	    bpp);
1205
1206/*
1207 * fbbltone.c
1208 */
1209extern _X_EXPORT void
1210fbBltOne (FbStip   *src,
1211	  FbStride srcStride,
1212	  int	   srcX,
1213	  FbBits   *dst,
1214	  FbStride dstStride,
1215	  int	   dstX,
1216	  int	   dstBpp,
1217
1218	  int	   width,
1219	  int	   height,
1220
1221	  FbBits   fgand,
1222	  FbBits   fbxor,
1223	  FbBits   bgand,
1224	  FbBits   bgxor);
1225
1226#ifdef FB_24BIT
1227extern _X_EXPORT void
1228fbBltOne24 (FbStip    *src,
1229	  FbStride  srcStride,	    /* FbStip units per scanline */
1230	  int	    srcX,	    /* bit position of source */
1231	  FbBits    *dst,
1232	  FbStride  dstStride,	    /* FbBits units per scanline */
1233	  int	    dstX,	    /* bit position of dest */
1234	  int	    dstBpp,	    /* bits per destination unit */
1235
1236	  int	    width,	    /* width in bits of destination */
1237	  int	    height,	    /* height in scanlines */
1238
1239	  FbBits    fgand,	    /* rrop values */
1240	  FbBits    fgxor,
1241	  FbBits    bgand,
1242	  FbBits    bgxor);
1243#endif
1244
1245extern _X_EXPORT void
1246fbBltPlane (FbBits	    *src,
1247	    FbStride	    srcStride,
1248	    int		    srcX,
1249	    int		    srcBpp,
1250
1251	    FbStip	    *dst,
1252	    FbStride	    dstStride,
1253	    int		    dstX,
1254
1255	    int		    width,
1256	    int		    height,
1257
1258	    FbStip	    fgand,
1259	    FbStip	    fgxor,
1260	    FbStip	    bgand,
1261	    FbStip	    bgxor,
1262	    Pixel	    planeMask);
1263
1264/*
1265 * fbcmap_mi.c
1266 */
1267extern _X_EXPORT int
1268fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps);
1269
1270extern _X_EXPORT void
1271fbInstallColormap(ColormapPtr pmap);
1272
1273extern _X_EXPORT void
1274fbUninstallColormap(ColormapPtr pmap);
1275
1276extern _X_EXPORT void
1277fbResolveColor(unsigned short	*pred,
1278	       unsigned short	*pgreen,
1279	       unsigned short	*pblue,
1280	       VisualPtr	pVisual);
1281
1282extern _X_EXPORT Bool
1283fbInitializeColormap(ColormapPtr pmap);
1284
1285extern _X_EXPORT int
1286fbExpandDirectColors (ColormapPtr   pmap,
1287		      int	    ndef,
1288		      xColorItem    *indefs,
1289		      xColorItem    *outdefs);
1290
1291extern _X_EXPORT Bool
1292fbCreateDefColormap(ScreenPtr pScreen);
1293
1294extern _X_EXPORT void
1295fbClearVisualTypes(void);
1296
1297extern _X_EXPORT Bool
1298fbHasVisualTypes (int depth);
1299
1300extern _X_EXPORT Bool
1301fbSetVisualTypes (int depth, int visuals, int bitsPerRGB);
1302
1303extern _X_EXPORT Bool
1304fbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
1305			  Pixel redMask, Pixel greenMask, Pixel blueMask);
1306
1307extern _X_EXPORT Bool
1308fbInitVisuals (VisualPtr    *visualp,
1309	       DepthPtr	    *depthp,
1310	       int	    *nvisualp,
1311	       int	    *ndepthp,
1312	       int	    *rootDepthp,
1313	       VisualID	    *defaultVisp,
1314	       unsigned long	sizes,
1315	       int	    bitsPerRGB);
1316
1317/*
1318 * fbcopy.c
1319 */
1320
1321/* Compatibility definition, to be removed at next ABI change. */
1322typedef void   (*fbCopyProc) (DrawablePtr  pSrcDrawable,
1323                              DrawablePtr  pDstDrawable,
1324                              GCPtr        pGC,
1325                              BoxPtr       pDstBox,
1326                              int          nbox,
1327                              int          dx,
1328                              int          dy,
1329                              Bool         reverse,
1330                              Bool         upsidedown,
1331                              Pixel        bitplane,
1332                              void         *closure);
1333
1334extern _X_EXPORT void
1335fbCopyNtoN (DrawablePtr	pSrcDrawable,
1336	    DrawablePtr	pDstDrawable,
1337	    GCPtr	pGC,
1338	    BoxPtr	pbox,
1339	    int		nbox,
1340	    int		dx,
1341	    int		dy,
1342	    Bool	reverse,
1343	    Bool	upsidedown,
1344	    Pixel	bitplane,
1345	    void	*closure);
1346
1347/* Compatibility wrapper, to be removed at next ABI change. */
1348extern _X_EXPORT void
1349fbCopyRegion (DrawablePtr   pSrcDrawable,
1350             DrawablePtr   pDstDrawable,
1351             GCPtr         pGC,
1352             RegionPtr     pDstRegion,
1353             int           dx,
1354             int           dy,
1355             fbCopyProc    copyProc,
1356             Pixel         bitPlane,
1357             void          *closure);
1358
1359/* Compatibility wrapper, to be removed at next ABI change. */
1360extern _X_EXPORT RegionPtr
1361fbDoCopy (DrawablePtr  pSrcDrawable,
1362         DrawablePtr   pDstDrawable,
1363         GCPtr         pGC,
1364         int           xIn,
1365         int           yIn,
1366         int           widthSrc,
1367         int           heightSrc,
1368         int           xOut,
1369         int           yOut,
1370         fbCopyProc    copyProc,
1371         Pixel         bitplane,
1372         void          *closure);
1373
1374extern _X_EXPORT void
1375fbCopy1toN (DrawablePtr	pSrcDrawable,
1376	    DrawablePtr	pDstDrawable,
1377	    GCPtr	pGC,
1378	    BoxPtr	pbox,
1379	    int		nbox,
1380	    int		dx,
1381	    int		dy,
1382	    Bool	reverse,
1383	    Bool	upsidedown,
1384	    Pixel	bitplane,
1385	    void	*closure);
1386
1387extern _X_EXPORT void
1388fbCopyNto1 (DrawablePtr	pSrcDrawable,
1389	    DrawablePtr	pDstDrawable,
1390	    GCPtr	pGC,
1391	    BoxPtr	pbox,
1392	    int		nbox,
1393	    int		dx,
1394	    int		dy,
1395	    Bool	reverse,
1396	    Bool	upsidedown,
1397	    Pixel	bitplane,
1398	    void	*closure);
1399
1400extern _X_EXPORT RegionPtr
1401fbCopyArea (DrawablePtr	pSrcDrawable,
1402	    DrawablePtr	pDstDrawable,
1403	    GCPtr	pGC,
1404	    int		xIn,
1405	    int		yIn,
1406	    int		widthSrc,
1407	    int		heightSrc,
1408	    int		xOut,
1409	    int		yOut);
1410
1411extern _X_EXPORT RegionPtr
1412fbCopyPlane (DrawablePtr    pSrcDrawable,
1413	     DrawablePtr    pDstDrawable,
1414	     GCPtr	    pGC,
1415	     int	    xIn,
1416	     int	    yIn,
1417	     int	    widthSrc,
1418	     int	    heightSrc,
1419	     int	    xOut,
1420	     int	    yOut,
1421	     unsigned long  bitplane);
1422
1423/*
1424 * fbfill.c
1425 */
1426extern _X_EXPORT void
1427fbFill (DrawablePtr pDrawable,
1428	GCPtr	    pGC,
1429	int	    x,
1430	int	    y,
1431	int	    width,
1432	int	    height);
1433
1434extern _X_EXPORT void
1435fbSolidBoxClipped (DrawablePtr	pDrawable,
1436		   RegionPtr	pClip,
1437		   int		xa,
1438		   int		ya,
1439		   int		xb,
1440		   int		yb,
1441		   FbBits	and,
1442		   FbBits	xor);
1443
1444/*
1445 * fbfillrect.c
1446 */
1447extern _X_EXPORT void
1448fbPolyFillRect(DrawablePtr  pDrawable,
1449	       GCPtr	    pGC,
1450	       int	    nrectInit,
1451	       xRectangle   *prectInit);
1452
1453#define fbPolyFillArc miPolyFillArc
1454
1455#define fbFillPolygon miFillPolygon
1456
1457/*
1458 * fbfillsp.c
1459 */
1460extern _X_EXPORT void
1461fbFillSpans (DrawablePtr    pDrawable,
1462	     GCPtr	    pGC,
1463	     int	    nInit,
1464	     DDXPointPtr    pptInit,
1465	     int	    *pwidthInit,
1466	     int	    fSorted);
1467
1468
1469/*
1470 * fbgc.c
1471 */
1472
1473extern _X_EXPORT Bool
1474fbCreateGC(GCPtr pGC);
1475
1476extern _X_EXPORT void
1477fbPadPixmap (PixmapPtr pPixmap);
1478
1479extern _X_EXPORT void
1480fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
1481
1482/*
1483 * fbgetsp.c
1484 */
1485extern _X_EXPORT void
1486fbGetSpans(DrawablePtr	pDrawable,
1487	   int		wMax,
1488	   DDXPointPtr	ppt,
1489	   int		*pwidth,
1490	   int		nspans,
1491	   char		*pchardstStart);
1492
1493/*
1494 * fbglyph.c
1495 */
1496
1497extern _X_EXPORT Bool
1498fbGlyphIn (RegionPtr	pRegion,
1499	   int		x,
1500	   int		y,
1501	   int		width,
1502	   int		height);
1503
1504extern _X_EXPORT void
1505fbPolyGlyphBlt (DrawablePtr	pDrawable,
1506		GCPtr		pGC,
1507		int		x,
1508		int		y,
1509		unsigned int	nglyph,
1510		CharInfoPtr	*ppci,
1511		pointer		pglyphBase);
1512
1513extern _X_EXPORT void
1514fbImageGlyphBlt (DrawablePtr	pDrawable,
1515		 GCPtr		pGC,
1516		 int		x,
1517		 int		y,
1518		 unsigned int	nglyph,
1519		 CharInfoPtr	*ppci,
1520		 pointer	pglyphBase);
1521
1522/*
1523 * fbimage.c
1524 */
1525
1526extern _X_EXPORT void
1527fbPutImage (DrawablePtr	pDrawable,
1528	    GCPtr	pGC,
1529	    int		depth,
1530	    int		x,
1531	    int		y,
1532	    int		w,
1533	    int		h,
1534	    int		leftPad,
1535	    int		format,
1536	    char	*pImage);
1537
1538extern _X_EXPORT void
1539fbPutZImage (DrawablePtr	pDrawable,
1540	     RegionPtr		pClip,
1541	     int		alu,
1542	     FbBits		pm,
1543	     int		x,
1544	     int		y,
1545	     int		width,
1546	     int		height,
1547	     FbStip		*src,
1548	     FbStride		srcStride);
1549
1550extern _X_EXPORT void
1551fbPutXYImage (DrawablePtr	pDrawable,
1552	      RegionPtr		pClip,
1553	      FbBits		fg,
1554	      FbBits		bg,
1555	      FbBits		pm,
1556	      int		alu,
1557	      Bool		opaque,
1558
1559	      int		x,
1560	      int		y,
1561	      int		width,
1562	      int		height,
1563
1564	      FbStip		*src,
1565	      FbStride		srcStride,
1566	      int		srcX);
1567
1568extern _X_EXPORT void
1569fbGetImage (DrawablePtr	    pDrawable,
1570	    int		    x,
1571	    int		    y,
1572	    int		    w,
1573	    int		    h,
1574	    unsigned int    format,
1575	    unsigned long   planeMask,
1576	    char	    *d);
1577/*
1578 * fbline.c
1579 */
1580
1581extern _X_EXPORT void
1582fbZeroLine (DrawablePtr	pDrawable,
1583	    GCPtr	pGC,
1584	    int		mode,
1585	    int		npt,
1586	    DDXPointPtr	ppt);
1587
1588extern _X_EXPORT void
1589fbZeroSegment (DrawablePtr  pDrawable,
1590	       GCPtr	    pGC,
1591	       int	    nseg,
1592	       xSegment	    *pSegs);
1593
1594extern _X_EXPORT void
1595fbPolyLine (DrawablePtr	pDrawable,
1596	    GCPtr	pGC,
1597	    int		mode,
1598	    int		npt,
1599	    DDXPointPtr	ppt);
1600
1601extern _X_EXPORT void
1602fbFixCoordModePrevious (int npt,
1603			DDXPointPtr ppt);
1604
1605extern _X_EXPORT void
1606fbPolySegment (DrawablePtr  pDrawable,
1607	       GCPtr	    pGC,
1608	       int	    nseg,
1609	       xSegment	    *pseg);
1610
1611#define fbPolyRectangle	miPolyRectangle
1612
1613/*
1614 * fbpict.c
1615 */
1616
1617extern _X_EXPORT Bool
1618fbPictureInit (ScreenPtr pScreen,
1619	       PictFormatPtr formats,
1620	       int nformats);
1621
1622/*
1623 * fbpixmap.c
1624 */
1625
1626extern _X_EXPORT PixmapPtr
1627fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
1628		   unsigned usage_hint);
1629
1630extern _X_EXPORT PixmapPtr
1631fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
1632		unsigned usage_hint);
1633
1634extern _X_EXPORT Bool
1635fbDestroyPixmap (PixmapPtr pPixmap);
1636
1637extern _X_EXPORT RegionPtr
1638fbPixmapToRegion(PixmapPtr pPix);
1639
1640/*
1641 * fbpoint.c
1642 */
1643
1644extern _X_EXPORT void
1645fbDots (FbBits	    *dstOrig,
1646	FbStride    dstStride,
1647	int	    dstBpp,
1648	BoxPtr	    pBox,
1649	xPoint	    *pts,
1650	int	    npt,
1651	int	    xorg,
1652	int	    yorg,
1653	int	    xoff,
1654	int	    yoff,
1655	FbBits	    andOrig,
1656	FbBits	    xorOrig);
1657
1658extern _X_EXPORT void
1659fbPolyPoint (DrawablePtr    pDrawable,
1660	     GCPtr	    pGC,
1661	     int	    mode,
1662	     int	    npt,
1663	     xPoint	    *pptInit);
1664
1665/*
1666 * fbpush.c
1667 */
1668extern _X_EXPORT void
1669fbPushPattern (DrawablePtr  pDrawable,
1670	       GCPtr	    pGC,
1671
1672	       FbStip	    *src,
1673	       FbStride	    srcStride,
1674	       int	    srcX,
1675
1676	       int	    x,
1677	       int	    y,
1678
1679	       int	    width,
1680	       int	    height);
1681
1682extern _X_EXPORT void
1683fbPushFill (DrawablePtr	pDrawable,
1684	    GCPtr	pGC,
1685
1686	    FbStip	*src,
1687	    FbStride	srcStride,
1688	    int		srcX,
1689
1690	    int		x,
1691	    int		y,
1692	    int		width,
1693	    int		height);
1694
1695extern _X_EXPORT void
1696fbPushImage (DrawablePtr    pDrawable,
1697	     GCPtr	    pGC,
1698
1699	     FbStip	    *src,
1700	     FbStride	    srcStride,
1701	     int	    srcX,
1702
1703	     int	    x,
1704	     int	    y,
1705	     int	    width,
1706	     int	    height);
1707
1708extern _X_EXPORT void
1709fbPushPixels (GCPtr	    pGC,
1710	      PixmapPtr	    pBitmap,
1711	      DrawablePtr   pDrawable,
1712	      int	    dx,
1713	      int	    dy,
1714	      int	    xOrg,
1715	      int	    yOrg);
1716
1717
1718/*
1719 * fbscreen.c
1720 */
1721
1722extern _X_EXPORT Bool
1723fbCloseScreen (int indx, ScreenPtr pScreen);
1724
1725extern _X_EXPORT Bool
1726fbRealizeFont(ScreenPtr pScreen, FontPtr pFont);
1727
1728extern _X_EXPORT Bool
1729fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
1730
1731extern _X_EXPORT void
1732fbQueryBestSize (int class,
1733		 unsigned short *width, unsigned short *height,
1734		 ScreenPtr pScreen);
1735
1736extern _X_EXPORT PixmapPtr
1737_fbGetWindowPixmap (WindowPtr pWindow);
1738
1739extern _X_EXPORT void
1740_fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap);
1741
1742extern _X_EXPORT Bool
1743fbSetupScreen(ScreenPtr	pScreen,
1744	      pointer	pbits,		/* pointer to screen bitmap */
1745	      int	xsize, 		/* in pixels */
1746	      int	ysize,
1747	      int	dpix,		/* dots per inch */
1748	      int	dpiy,
1749	      int	width,		/* pixel width of frame buffer */
1750	      int	bpp);		/* bits per pixel of frame buffer */
1751
1752extern _X_EXPORT Bool
1753wfbFinishScreenInit(ScreenPtr	pScreen,
1754		    pointer	pbits,
1755		    int		xsize,
1756		    int		ysize,
1757		    int		dpix,
1758		    int		dpiy,
1759		    int		width,
1760		    int		bpp,
1761		    SetupWrapProcPtr setupWrap,
1762		    FinishWrapProcPtr finishWrap);
1763
1764extern _X_EXPORT Bool
1765wfbScreenInit(ScreenPtr	pScreen,
1766	      pointer	pbits,
1767	      int	xsize,
1768	      int	ysize,
1769	      int	dpix,
1770	      int	dpiy,
1771	      int	width,
1772	      int	bpp,
1773	      SetupWrapProcPtr setupWrap,
1774	      FinishWrapProcPtr finishWrap);
1775
1776extern _X_EXPORT Bool
1777fbFinishScreenInit(ScreenPtr	pScreen,
1778		   pointer	pbits,
1779		   int		xsize,
1780		   int		ysize,
1781		   int		dpix,
1782		   int		dpiy,
1783		   int		width,
1784		   int		bpp);
1785
1786extern _X_EXPORT Bool
1787fbScreenInit(ScreenPtr	pScreen,
1788	     pointer	pbits,
1789	     int	xsize,
1790	     int	ysize,
1791	     int	dpix,
1792	     int	dpiy,
1793	     int	width,
1794	     int	bpp);
1795
1796/*
1797 * fbseg.c
1798 */
1799typedef void	FbBres (DrawablePtr	pDrawable,
1800			GCPtr		pGC,
1801			int		dashOffset,
1802			int		signdx,
1803			int		signdy,
1804			int		axis,
1805			int		x,
1806			int		y,
1807			int		e,
1808			int		e1,
1809			int		e3,
1810			int		len);
1811
1812extern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash;
1813/*
1814 * fbsetsp.c
1815 */
1816
1817extern _X_EXPORT void
1818fbSetSpans (DrawablePtr	    pDrawable,
1819	    GCPtr	    pGC,
1820	    char	    *src,
1821	    DDXPointPtr	    ppt,
1822	    int		    *pwidth,
1823	    int		    nspans,
1824	    int		    fSorted);
1825
1826extern _X_EXPORT FbBres *
1827fbSelectBres (DrawablePtr   pDrawable,
1828	      GCPtr	    pGC);
1829
1830extern _X_EXPORT void
1831fbBres (DrawablePtr	pDrawable,
1832	GCPtr		pGC,
1833	int		dashOffset,
1834	int		signdx,
1835	int		signdy,
1836	int		axis,
1837	int		x,
1838	int		y,
1839	int		e,
1840	int		e1,
1841	int		e3,
1842	int		len);
1843
1844extern _X_EXPORT void
1845fbSegment (DrawablePtr	pDrawable,
1846	   GCPtr	pGC,
1847	   int		xa,
1848	   int		ya,
1849	   int		xb,
1850	   int		yb,
1851	   Bool		drawLast,
1852	   int		*dashOffset);
1853
1854
1855/*
1856 * fbsolid.c
1857 */
1858
1859extern _X_EXPORT void
1860fbSolid (FbBits	    *dst,
1861	 FbStride   dstStride,
1862	 int	    dstX,
1863	 int	    bpp,
1864
1865	 int	    width,
1866	 int	    height,
1867
1868	 FbBits	    and,
1869	 FbBits	    xor);
1870
1871#ifdef FB_24BIT
1872extern _X_EXPORT void
1873fbSolid24 (FbBits   *dst,
1874	   FbStride dstStride,
1875	   int	    dstX,
1876
1877	   int	    width,
1878	   int	    height,
1879
1880	   FbBits   and,
1881	   FbBits   xor);
1882#endif
1883
1884/*
1885 * fbstipple.c
1886 */
1887
1888extern _X_EXPORT void
1889fbTransparentSpan (FbBits   *dst,
1890		   FbBits   stip,
1891		   FbBits   fgxor,
1892		   int	    n);
1893
1894extern _X_EXPORT void
1895fbEvenStipple (FbBits   *dst,
1896	       FbStride dstStride,
1897	       int	dstX,
1898	       int	dstBpp,
1899
1900	       int	width,
1901	       int	height,
1902
1903	       FbStip   *stip,
1904	       FbStride	stipStride,
1905	       int	stipHeight,
1906
1907	       FbBits   fgand,
1908	       FbBits   fgxor,
1909	       FbBits   bgand,
1910	       FbBits   bgxor,
1911
1912	       int	xRot,
1913	       int	yRot);
1914
1915extern _X_EXPORT void
1916fbOddStipple (FbBits	*dst,
1917	      FbStride	dstStride,
1918	      int	dstX,
1919	      int	dstBpp,
1920
1921	      int	width,
1922	      int	height,
1923
1924	      FbStip	*stip,
1925	      FbStride	stipStride,
1926	      int	stipWidth,
1927	      int	stipHeight,
1928
1929	      FbBits	fgand,
1930	      FbBits	fgxor,
1931	      FbBits	bgand,
1932	      FbBits	bgxor,
1933
1934	      int	xRot,
1935	      int	yRot);
1936
1937extern _X_EXPORT void
1938fbStipple (FbBits   *dst,
1939	   FbStride dstStride,
1940	   int	    dstX,
1941	   int	    dstBpp,
1942
1943	   int	    width,
1944	   int	    height,
1945
1946	   FbStip   *stip,
1947	   FbStride stipStride,
1948	   int	    stipWidth,
1949	   int	    stipHeight,
1950	   Bool	    even,
1951
1952	   FbBits   fgand,
1953	   FbBits   fgxor,
1954	   FbBits   bgand,
1955	   FbBits   bgxor,
1956
1957	   int	    xRot,
1958	   int	    yRot);
1959
1960/*
1961 * fbtile.c
1962 */
1963
1964extern _X_EXPORT void
1965fbEvenTile (FbBits	*dst,
1966	    FbStride	dstStride,
1967	    int		dstX,
1968
1969	    int		width,
1970	    int		height,
1971
1972	    FbBits	*tile,
1973	    FbStride	tileStride,
1974	    int		tileHeight,
1975
1976	    int		alu,
1977	    FbBits	pm,
1978	    int		xRot,
1979	    int		yRot);
1980
1981extern _X_EXPORT void
1982fbOddTile (FbBits	*dst,
1983	   FbStride	dstStride,
1984	   int		dstX,
1985
1986	   int		width,
1987	   int		height,
1988
1989	   FbBits	*tile,
1990	   FbStride	tileStride,
1991	   int		tileWidth,
1992	   int		tileHeight,
1993
1994	   int		alu,
1995	   FbBits	pm,
1996	   int		bpp,
1997
1998	   int		xRot,
1999	   int		yRot);
2000
2001extern _X_EXPORT void
2002fbTile (FbBits	    *dst,
2003	FbStride    dstStride,
2004	int	    dstX,
2005
2006	int	    width,
2007	int	    height,
2008
2009	FbBits	    *tile,
2010	FbStride    tileStride,
2011	int	    tileWidth,
2012	int	    tileHeight,
2013
2014	int	    alu,
2015	FbBits	    pm,
2016	int	    bpp,
2017
2018	int	    xRot,
2019	int	    yRot);
2020
2021/*
2022 * fbutil.c
2023 */
2024extern _X_EXPORT FbBits
2025fbReplicatePixel (Pixel p, int bpp);
2026
2027extern _X_EXPORT void
2028fbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp);
2029
2030#ifdef FB_ACCESS_WRAPPER
2031extern _X_EXPORT ReadMemoryProcPtr wfbReadMemory;
2032extern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
2033#endif
2034
2035/*
2036 * fbwindow.c
2037 */
2038
2039extern _X_EXPORT Bool
2040fbCreateWindow(WindowPtr pWin);
2041
2042extern _X_EXPORT Bool
2043fbDestroyWindow(WindowPtr pWin);
2044
2045extern _X_EXPORT Bool
2046fbMapWindow(WindowPtr pWindow);
2047
2048extern _X_EXPORT Bool
2049fbPositionWindow(WindowPtr pWin, int x, int y);
2050
2051extern _X_EXPORT Bool
2052fbUnmapWindow(WindowPtr pWindow);
2053
2054extern _X_EXPORT void
2055fbCopyWindowProc (DrawablePtr	pSrcDrawable,
2056		  DrawablePtr	pDstDrawable,
2057		  GCPtr		pGC,
2058		  BoxPtr	pbox,
2059		  int		nbox,
2060		  int		dx,
2061		  int		dy,
2062		  Bool		reverse,
2063		  Bool		upsidedown,
2064		  Pixel		bitplane,
2065		  void		*closure);
2066
2067extern _X_EXPORT void
2068fbCopyWindow(WindowPtr	    pWin,
2069	     DDXPointRec    ptOldOrg,
2070	     RegionPtr	    prgnSrc);
2071
2072extern _X_EXPORT Bool
2073fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
2074
2075extern _X_EXPORT void
2076fbFillRegionSolid (DrawablePtr	pDrawable,
2077		   RegionPtr	pRegion,
2078		   FbBits	and,
2079		   FbBits	xor);
2080
2081extern _X_EXPORT pixman_image_t *
2082image_from_pict (PicturePtr	pict,
2083		 Bool		has_clip,
2084		 int		*xoff,
2085		 int		*yoff);
2086
2087extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
2088
2089#endif /* _FB_H_ */
2090
2091