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