3 * Copyright © 1998 Keith Packard
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.
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.
30 #include "scrnintstr.h"
32 #include "pixmapstr.h"
36 #include "miscstruct.h"
38 #include "windowstr.h"
42 #include "picturestr.h"
44 #ifdef FB_ACCESS_WRAPPER
46 #include "wfbrename.h"
47 #define FBPREFIX(x) wfb##x
48 #define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr))))
49 #define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr))))
51 #define MEMCPY_WRAPPED(dst, src, size) do { \
53 CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src); \
54 for(_i = 0; _i < size; _i++) { \
55 WRITE(_dst +_i, READ(_src + _i)); \
59 #define MEMSET_WRAPPED(dst, val, size) do { \
61 CARD8 *_dst = (CARD8*)(dst); \
62 for(_i = 0; _i < size; _i++) { \
63 WRITE(_dst +_i, (val)); \
69 #define FBPREFIX(x) fb##x
70 #define WRITE(ptr, val) (*(ptr) = (val))
71 #define READ(ptr) (*(ptr))
72 #define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size))
73 #define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size))
78 * This single define controls the basic size of data manipulated
79 * by this software; it must be log2(sizeof (FbBits) * 8)
83 #define FB_SHIFT LOG2_BITMAP_PAD
86 #if FB_SHIFT < LOG2_BITMAP_PAD
87 error FB_SHIFT must be >= LOG2_BITMAP_PAD
89 #define FB_UNIT (1 << FB_SHIFT)
90 #define FB_HALFUNIT (1 << (FB_SHIFT-1))
91 #define FB_MASK (FB_UNIT - 1)
92 #define FB_ALLONES ((FbBits) -1)
93 #if GLYPHPADBYTES != 4
94 #error "GLYPHPADBYTES must be 4"
96 /* for driver compat - intel UXA needs the second one at least */
99 #define FB_STIP_SHIFT LOG2_BITMAP_PAD
100 #define FB_STIP_UNIT (1 << FB_STIP_SHIFT)
101 #define FB_STIP_MASK (FB_STIP_UNIT - 1)
102 #define FB_STIP_ALLONES ((FbStip) -1)
103 #define FB_STIP_ODDSTRIDE(s) (((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0)
104 #define FB_STIP_ODDPTR(p) ((((long) (p)) & (FB_MASK >> 3)) != 0)
105 #define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
106 #define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
107 #define FbFullMask(n) ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
110 typedef unsigned __int64 FbBits;
112 #if defined(__alpha__) || defined(__alpha) || \
113 defined(ia64) || defined(__ia64__) || \
114 defined(__sparc64__) || defined(_LP64) || \
115 defined(__s390x__) || \
116 defined(amd64) || defined (__amd64__) || \
117 defined (__powerpc64__)
118 typedef unsigned long FbBits;
120 typedef unsigned long long FbBits;
126 typedef CARD32 FbBits;
130 typedef CARD16 FbBits;
133 #if LOG2_BITMAP_PAD == FB_SHIFT
134 typedef FbBits FbStip;
136 #if LOG2_BITMAP_PAD == 5
137 typedef CARD32 FbStip;
141 typedef int FbStride;
144 extern _X_EXPORT void fbValidateDrawable(DrawablePtr d);
145 extern _X_EXPORT void fbInitializeDrawable(DrawablePtr d);
146 extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
148 #define FB_HEAD_BITS (FbStip) (0xbaadf00d)
149 #define FB_TAIL_BITS (FbStip) (0xbaddf0ad)
151 #define fbValidateDrawable(d)
152 #define fdInitializeDrawable(d)
157 #if BITMAP_BIT_ORDER == LSBFirst
158 #define FbScrLeft(x,n) ((x) >> (n))
159 #define FbScrRight(x,n) ((x) << (n))
160 /* #define FbLeftBits(x,n) ((x) & ((((FbBits) 1) << (n)) - 1)) */
161 #define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1))
162 #define FbStipMoveLsb(x,s,n) (FbStipRight (x,(s)-(n)))
163 #define FbPatternOffsetBits 0
165 #define FbScrLeft(x,n) ((x) << (n))
166 #define FbScrRight(x,n) ((x) >> (n))
167 /* #define FbLeftBits(x,n) ((x) >> (FB_UNIT - (n))) */
168 #define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n)))
169 #define FbStipMoveLsb(x,s,n) (x)
170 #define FbPatternOffsetBits (sizeof (FbBits) - 1)
175 #define FbStipLeft(x,n) FbScrLeft(x,n)
176 #define FbStipRight(x,n) FbScrRight(x,n)
178 #define FbRotLeft(x,n) FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0)
179 #define FbRotRight(x,n) FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0)
181 #define FbRotStipLeft(x,n) FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0)
182 #define FbRotStipRight(x,n) FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0)
184 #define FbLeftMask(x) ( ((x) & FB_MASK) ? \
185 FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0)
186 #define FbRightMask(x) ( ((FB_UNIT - (x)) & FB_MASK) ? \
187 FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0)
189 #define FbLeftStipMask(x) ( ((x) & FB_STIP_MASK) ? \
190 FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0)
191 #define FbRightStipMask(x) ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
192 FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)
194 #define FbBitsMask(x,w) (FbScrRight(FB_ALLONES,(x) & FB_MASK) & \
195 FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK))
197 #define FbStipMask(x,w) (FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
198 FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
200 #define FbMaskBits(x,w,l,n,r) { \
202 r = FbRightMask((x)+n); \
205 n -= FB_UNIT - ((x) & FB_MASK); \
215 #define FbByteMaskInvalid 0x10
217 #define FbPatternOffset(o,t) ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
219 #define FbPtrOffset(p,o,t) ((t *) ((CARD8 *) (p) + (o)))
220 #define FbSelectPatternPart(xor,o,t) ((xor) >> (FbPatternOffset (o,t) << 3))
221 #define FbStorePart(dst,off,t,xor) (WRITE(FbPtrOffset(dst,off,t), \
222 FbSelectPart(xor,off,t)))
224 #define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t)
227 #define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \
231 r = FbRightMask((x)+n); \
233 /* compute right byte length */ \
234 if ((copy) && (((x) + n) & 7) == 0) { \
235 rb = (((x) + n) & FB_MASK) >> 3; \
237 rb = FbByteMaskInvalid; \
242 /* compute left byte length */ \
243 if ((copy) && ((x) & 7) == 0) { \
244 lb = ((x) & FB_MASK) >> 3; \
246 lb = FbByteMaskInvalid; \
248 /* subtract out the portion painted by leftMask */ \
249 n -= FB_UNIT - ((x) & FB_MASK); \
251 if (lb != FbByteMaskInvalid) { \
252 if (rb == FbByteMaskInvalid) { \
253 lb = FbByteMaskInvalid; \
255 lb |= (rb - lb) << (FB_SHIFT - 3); \
268 #define FbDoLeftMaskByteRRop6Cases(dst,xor) \
269 case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \
270 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
272 case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \
273 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
274 FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
276 case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \
277 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
278 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
280 case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \
281 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
282 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
283 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
285 case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \
286 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
287 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
288 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
290 case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \
291 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
292 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
293 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
294 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
296 case (sizeof (FbBits) - 7): \
297 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
298 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
299 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
301 case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \
302 FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
304 case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \
305 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
307 case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \
308 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
309 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
311 case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \
312 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
313 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
315 case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \
316 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
317 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
318 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
320 case (sizeof (FbBits) - 6): \
321 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
322 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
324 case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \
325 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
327 case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \
328 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
329 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
331 case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \
332 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
333 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
335 case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \
336 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
337 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
338 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
340 case (sizeof (FbBits) - 5): \
341 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
342 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
344 case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \
345 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
347 case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \
348 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
350 case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \
351 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
352 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
354 case (sizeof (FbBits) - 4): \
355 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
358 #define FbDoRightMaskByteRRop6Cases(dst,xor) \
360 FbStorePart(dst,0,CARD32,xor); \
363 FbStorePart(dst,0,CARD32,xor); \
364 FbStorePart(dst,4,CARD8,xor); \
367 FbStorePart(dst,0,CARD32,xor); \
368 FbStorePart(dst,4,CARD16,xor); \
371 FbStorePart(dst,0,CARD32,xor); \
372 FbStorePart(dst,4,CARD16,xor); \
373 FbStorePart(dst,6,CARD8,xor); \
376 #define FbDoLeftMaskByteRRop6Cases(dst,xor)
377 #define FbDoRightMaskByteRRop6Cases(dst,xor)
380 #define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
382 FbDoLeftMaskByteRRop6Cases(dst,xor) \
383 case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
384 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
386 case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \
387 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
388 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
390 case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \
391 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
393 case sizeof (FbBits) - 3: \
394 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
395 case sizeof (FbBits) - 2: \
396 FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \
398 case sizeof (FbBits) - 1: \
399 FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \
402 WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \
407 #define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
410 FbStorePart(dst,0,CARD8,xor); \
413 FbStorePart(dst,0,CARD16,xor); \
416 FbStorePart(dst,0,CARD16,xor); \
417 FbStorePart(dst,2,CARD8,xor); \
419 FbDoRightMaskByteRRop6Cases(dst,xor) \
421 WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
425 #define FbMaskStip(x,w,l,n,r) { \
427 r = FbRightStipMask((x)+n); \
428 l = FbLeftStipMask(x); \
430 n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \
437 n >>= FB_STIP_SHIFT; \
441 * These macros are used to transparently stipple
442 * in copy mode; the expected usage is with 'n' constant
443 * so all of the conditional parts collapse into a minimal
444 * sequence of partial word writes
446 * 'n' is the bytemask of which bytes to store, 'a' is the address
447 * of the FbBits base unit, 'o' is the offset within that unit
449 * The term "lane" comes from the hardware term "byte-lane" which
452 #define FbLaneCase1(n,a,o) \
454 WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor); \
457 #define FbLaneCase2(n,a,o) \
459 WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor); \
461 FbLaneCase1((n)&1,a,o) \
462 FbLaneCase1((n)>>1,a,(o)+1) \
465 #define FbLaneCase4(n,a,o) \
467 WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor); \
469 FbLaneCase2((n)&3,a,o) \
470 FbLaneCase2((n)>>2,a,(o)+2) \
473 #define FbLaneCase8(n,a,o) \
474 if ((n) == 0x0ff) { \
475 *(FbBits *) ((a)+(o)) = fgxor; \
477 FbLaneCase4((n)&15,a,o) \
478 FbLaneCase4((n)>>4,a,(o)+4) \
482 #define FbLaneCase(n,a) FbLaneCase8(n,(CARD8 *) (a),0)
486 #define FbLaneCase(n,a) FbLaneCase4(n,(CARD8 *) (a),0)
489 /* Rotate a filled pixel value to the specified alignement */
490 #define FbRot24(p,b) (FbScrRight(p,b) | FbScrLeft(p,24-(b)))
491 #define FbRot24Stip(p,b) (FbStipRight(p,b) | FbStipLeft(p,24-(b)))
493 /* step a filled pixel value to the next/previous FB_UNIT alignment */
494 #define FbNext24Pix(p) (FbRot24(p,(24-FB_UNIT%24)))
495 #define FbPrev24Pix(p) (FbRot24(p,FB_UNIT%24))
496 #define FbNext24Stip(p) (FbRot24(p,(24-FB_STIP_UNIT%24)))
497 #define FbPrev24Stip(p) (FbRot24(p,FB_STIP_UNIT%24))
499 /* step a rotation value to the next/previous rotation value */
501 #define FbNext24Rot(r) ((r) == 16 ? 0 : (r) + 8)
502 #define FbPrev24Rot(r) ((r) == 0 ? 16 : (r) - 8)
504 #if IMAGE_BYTE_ORDER == MSBFirst
505 #define FbFirst24Rot(x) (((x) + 8) % 24)
507 #define FbFirst24Rot(x) ((x) % 24)
513 #define FbNext24Rot(r) ((r) == 0 ? 16 : (r) - 8)
514 #define FbPrev24Rot(r) ((r) == 16 ? 0 : (r) + 8)
516 #if IMAGE_BYTE_ORDER == MSBFirst
517 #define FbFirst24Rot(x) (((x) + 16) % 24)
519 #define FbFirst24Rot(x) ((x) % 24)
523 #define FbNext24RotStip(r) ((r) == 0 ? 16 : (r) - 8)
524 #define FbPrev24RotStip(r) ((r) == 16 ? 0 : (r) + 8)
526 /* Whether 24-bit specific code is needed for this filled pixel value */
527 #define FbCheck24Pix(p) ((p) == FbNext24Pix(p))
529 /* Macros for dealing with dashing */
531 #define FbDashDeclare \
532 unsigned char *__dash, *__firstDash, *__lastDash
534 #define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) { \
536 __firstDash = (pGC)->dash; \
537 __lastDash = __firstDash + (pGC)->numInDashList; \
538 (dashOffset) %= (pPriv)->dashLength; \
540 __dash = __firstDash; \
541 while ((dashOffset) >= ((dashlen) = *__dash)) \
543 (dashOffset) -= (dashlen); \
545 if (++__dash == __lastDash) \
546 __dash = __firstDash; \
548 (dashlen) -= (dashOffset); \
551 #define FbDashNext(dashlen) { \
552 if (++__dash == __lastDash) \
553 __dash = __firstDash; \
554 (dashlen) = *__dash; \
557 /* as numInDashList is always even, this case can skip a test */
559 #define FbDashNextEven(dashlen) { \
560 (dashlen) = *++__dash; \
563 #define FbDashNextOdd(dashlen) FbDashNext(dashlen)
565 #define FbDashStep(dashlen,even) { \
566 if (!--(dashlen)) { \
567 FbDashNext(dashlen); \
572 extern _X_EXPORT const GCOps fbGCOps;
573 extern _X_EXPORT const GCFuncs fbGCFuncs;
575 /* Framebuffer access wrapper */
576 typedef FbBits(*ReadMemoryProcPtr) (const void *src, int size);
577 typedef void (*WriteMemoryProcPtr) (void *dst, FbBits value, int size);
578 typedef void (*SetupWrapProcPtr) (ReadMemoryProcPtr * pRead,
579 WriteMemoryProcPtr * pWrite,
581 typedef void (*FinishWrapProcPtr) (DrawablePtr pDraw);
583 #ifdef FB_ACCESS_WRAPPER
585 #define fbPrepareAccess(pDraw) \
586 fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \
590 #define fbFinishAccess(pDraw) \
591 fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw)
595 #define fbPrepareAccess(pPix)
596 #define fbFinishAccess(pDraw)
600 extern _X_EXPORT DevPrivateKey
601 fbGetScreenPrivateKey(void);
603 /* private field of a screen */
605 unsigned char win32bpp; /* window bpp for 32-bpp images */
606 unsigned char pix32bpp; /* pixmap bpp for 32-bpp images */
607 #ifdef FB_ACCESS_WRAPPER
608 SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */
609 FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */
611 DevPrivateKeyRec gcPrivateKeyRec;
612 DevPrivateKeyRec winPrivateKeyRec;
613 } FbScreenPrivRec, *FbScreenPrivPtr;
615 #define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \
616 dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey()))
618 /* private field of GC */
620 FbBits and, xor; /* reduced rop values */
621 FbBits bgand, bgxor; /* for stipples */
622 FbBits fg, bg, pm; /* expanded and filled */
623 unsigned int dashLength; /* total of all dash elements */
624 unsigned char evenStipple; /* stipple is even */
625 unsigned char bpp; /* current drawable bpp */
626 } FbGCPrivRec, *FbGCPrivPtr;
628 #define fbGetGCPrivateKey(pGC) (&fbGetScreenPrivate((pGC)->pScreen)->gcPrivateKeyRec)
630 #define fbGetGCPrivate(pGC) ((FbGCPrivPtr)\
631 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey(pGC)))
633 #define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
634 #define fbGetExpose(pGC) ((pGC)->fExpose)
635 #define fbGetFreeCompClip(pGC) ((pGC)->freeCompClip)
636 #define fbGetRotatedPixmap(pGC) ((pGC)->pRotatedPixmap)
638 #define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate)
640 #define fbGetWinPrivateKey(pWin) (&fbGetScreenPrivate(((DrawablePtr) (pWin))->pScreen)->winPrivateKeyRec)
642 #define fbGetWindowPixmap(pWin) ((PixmapPtr)\
643 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey(pWin)))
646 #define __fbPixDrawableX(pPix) ((pPix)->drawable.x)
647 #define __fbPixDrawableY(pPix) ((pPix)->drawable.y)
649 #define __fbPixDrawableX(pPix) 0
650 #define __fbPixDrawableY(pPix) 0
654 #define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix) - (pPix)->screen_x)
655 #define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix) - (pPix)->screen_y)
657 #define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix))
658 #define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix))
660 #define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix))
661 #define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix))
663 #define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) { \
664 if ((pDrawable)->type != DRAWABLE_PIXMAP) { \
665 (pixmap) = fbGetWindowPixmap(pDrawable); \
666 (xoff) = __fbPixOffXWin(pixmap); \
667 (yoff) = __fbPixOffYWin(pixmap); \
669 (pixmap) = (PixmapPtr) (pDrawable); \
670 (xoff) = __fbPixOffXPix(pixmap); \
671 (yoff) = __fbPixOffYPix(pixmap); \
673 fbPrepareAccess(pDrawable); \
676 #define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) { \
677 (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; \
678 (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride); \
679 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \
682 #define fbGetPixmapStipData(pixmap, pointer, stride, bpp) { \
683 (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; \
684 (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride); \
685 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \
688 #define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
690 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \
691 fbGetPixmapBitsData(_pPix, pointer, stride, bpp); \
694 #define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
696 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \
697 fbGetPixmapStipData(_pPix, pointer, stride, bpp); \
701 * XFree86 empties the root BorderClip when the VT is inactive,
702 * here's a macro which uses that to disable GetImage and GetSpans
705 #define fbWindowEnabled(pWin) \
706 RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip)
708 #define fbDrawableEnabled(pDrawable) \
709 ((pDrawable)->type == DRAWABLE_PIXMAP ? \
710 TRUE : fbWindowEnabled((WindowPtr) pDrawable))
712 #define FbPowerOfTwo(w) (((w) & ((w) - 1)) == 0)
714 * Accelerated tiles are power of 2 width <= FB_UNIT
716 #define FbEvenTile(w) ((w) <= FB_UNIT && FbPowerOfTwo(w))
718 * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp
719 * with dstBpp a power of 2 as well
721 #define FbEvenStip(w,bpp) ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp))
726 extern _X_EXPORT void
728 fb24_32GetSpans(DrawablePtr pDrawable,
730 DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart);
732 extern _X_EXPORT void
734 fb24_32SetSpans(DrawablePtr pDrawable,
737 DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
739 extern _X_EXPORT void
741 fb24_32PutZImage(DrawablePtr pDrawable,
746 int y, int width, int height, CARD8 *src, FbStride srcStride);
748 extern _X_EXPORT void
750 fb24_32GetImage(DrawablePtr pDrawable,
754 int h, unsigned int format, unsigned long planeMask, char *d);
756 extern _X_EXPORT void
758 fb24_32CopyMtoN(DrawablePtr pSrcDrawable,
759 DrawablePtr pDstDrawable,
765 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
767 extern _X_EXPORT PixmapPtr
768 fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel);
770 extern _X_EXPORT Bool
771 fb24_32CreateScreenResources(ScreenPtr pScreen);
773 extern _X_EXPORT Bool
775 fb24_32ModifyPixmapHeader(PixmapPtr pPixmap,
779 int bitsPerPixel, int devKind, void *pPixData);
784 extern _X_EXPORT Bool
785 fbAllocatePrivates(ScreenPtr pScreen);
791 extern _X_EXPORT void
792 fbPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs);
798 extern _X_EXPORT void
800 fbBresSolid8(DrawablePtr pDrawable,
805 int axis, int x, int y, int e, int e1, int e3, int len);
807 extern _X_EXPORT void
809 fbBresDash8(DrawablePtr pDrawable,
813 int signdy, int axis, int x, int y, int e, int e1, int e3, int len);
815 extern _X_EXPORT void
817 fbDots8(FbBits * dst,
823 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
825 extern _X_EXPORT void
829 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
831 extern _X_EXPORT void
833 fbGlyph8(FbBits * dstLine,
835 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
837 extern _X_EXPORT void
839 fbPolyline8(DrawablePtr pDrawable,
840 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
842 extern _X_EXPORT void
843 fbPolySegment8(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
845 extern _X_EXPORT void
847 fbBresSolid16(DrawablePtr pDrawable,
852 int axis, int x, int y, int e, int e1, int e3, int len);
854 extern _X_EXPORT void
856 fbBresDash16(DrawablePtr pDrawable,
861 int axis, int x, int y, int e, int e1, int e3, int len);
863 extern _X_EXPORT void
865 fbDots16(FbBits * dst,
871 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
873 extern _X_EXPORT void
875 fbArc16(FbBits * dst,
877 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
879 extern _X_EXPORT void
881 fbGlyph16(FbBits * dstLine,
883 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
885 extern _X_EXPORT void
887 fbPolyline16(DrawablePtr pDrawable,
888 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
890 extern _X_EXPORT void
891 fbPolySegment16(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
893 extern _X_EXPORT void
895 fbBresSolid24(DrawablePtr pDrawable,
900 int axis, int x, int y, int e, int e1, int e3, int len);
902 extern _X_EXPORT void
904 fbBresDash24(DrawablePtr pDrawable,
909 int axis, int x, int y, int e, int e1, int e3, int len);
911 extern _X_EXPORT void
913 fbDots24(FbBits * dst,
919 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
921 extern _X_EXPORT void
923 fbArc24(FbBits * dst,
925 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
927 extern _X_EXPORT void
929 fbGlyph24(FbBits * dstLine,
931 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
933 extern _X_EXPORT void
935 fbPolyline24(DrawablePtr pDrawable,
936 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
938 extern _X_EXPORT void
939 fbPolySegment24(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
941 extern _X_EXPORT void
943 fbBresSolid32(DrawablePtr pDrawable,
948 int axis, int x, int y, int e, int e1, int e3, int len);
950 extern _X_EXPORT void
952 fbBresDash32(DrawablePtr pDrawable,
957 int axis, int x, int y, int e, int e1, int e3, int len);
959 extern _X_EXPORT void
961 fbDots32(FbBits * dst,
967 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
969 extern _X_EXPORT void
971 fbArc32(FbBits * dst,
973 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
975 extern _X_EXPORT void
977 fbGlyph32(FbBits * dstLine,
979 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
980 extern _X_EXPORT void
982 fbPolyline32(DrawablePtr pDrawable,
983 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
985 extern _X_EXPORT void
986 fbPolySegment32(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
991 extern _X_EXPORT void
1000 int height, int alu, FbBits pm, int bpp, Bool reverse, Bool upsidedown);
1002 extern _X_EXPORT void
1004 fbBlt24(FbBits * srcLine,
1011 int height, int alu, FbBits pm, Bool reverse, Bool upsidedown);
1013 extern _X_EXPORT void
1014 fbBltStip(FbStip * src, FbStride srcStride, /* in FbStip units, not FbBits units */
1015 int srcX, FbStip * dst, FbStride dstStride, /* in FbStip units, not FbBits units */
1016 int dstX, int width, int height, int alu, FbBits pm, int bpp);
1021 extern _X_EXPORT void
1023 fbBltOne(FbStip * src,
1031 int height, FbBits fgand, FbBits fbxor, FbBits bgand, FbBits bgxor);
1033 extern _X_EXPORT void
1034 fbBltOne24(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
1035 int srcX, /* bit position of source */
1036 FbBits * dst, FbStride dstStride, /* FbBits units per scanline */
1037 int dstX, /* bit position of dest */
1038 int dstBpp, /* bits per destination unit */
1039 int width, /* width in bits of destination */
1040 int height, /* height in scanlines */
1041 FbBits fgand, /* rrop values */
1042 FbBits fgxor, FbBits bgand, FbBits bgxor);
1044 extern _X_EXPORT void
1046 fbBltPlane(FbBits * src,
1056 FbStip fgxor, FbStip bgand, FbStip bgxor, Pixel planeMask);
1061 extern _X_EXPORT int
1062 fbListInstalledColormaps(ScreenPtr pScreen, Colormap * pmaps);
1064 extern _X_EXPORT void
1065 fbInstallColormap(ColormapPtr pmap);
1067 extern _X_EXPORT void
1068 fbUninstallColormap(ColormapPtr pmap);
1070 extern _X_EXPORT void
1072 fbResolveColor(unsigned short *pred,
1073 unsigned short *pgreen,
1074 unsigned short *pblue, VisualPtr pVisual);
1076 extern _X_EXPORT Bool
1077 fbInitializeColormap(ColormapPtr pmap);
1079 extern _X_EXPORT int
1081 fbExpandDirectColors(ColormapPtr pmap,
1082 int ndef, xColorItem * indefs, xColorItem * outdefs);
1084 extern _X_EXPORT Bool
1085 fbCreateDefColormap(ScreenPtr pScreen);
1087 extern _X_EXPORT void
1088 fbClearVisualTypes(void);
1090 extern _X_EXPORT Bool
1091 fbHasVisualTypes(int depth);
1093 extern _X_EXPORT Bool
1094 fbSetVisualTypes(int depth, int visuals, int bitsPerRGB);
1096 extern _X_EXPORT Bool
1098 fbSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB,
1099 Pixel redMask, Pixel greenMask, Pixel blueMask);
1101 extern _X_EXPORT Bool
1103 fbInitVisuals(VisualPtr * visualp,
1108 VisualID * defaultVisp, unsigned long sizes, int bitsPerRGB);
1114 extern _X_EXPORT void
1116 fbCopyNtoN(DrawablePtr pSrcDrawable,
1117 DrawablePtr pDstDrawable,
1123 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1125 extern _X_EXPORT void
1127 fbCopy1toN(DrawablePtr pSrcDrawable,
1128 DrawablePtr pDstDrawable,
1134 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1136 extern _X_EXPORT void
1138 fbCopyNto1(DrawablePtr pSrcDrawable,
1139 DrawablePtr pDstDrawable,
1145 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1147 extern _X_EXPORT RegionPtr
1149 fbCopyArea(DrawablePtr pSrcDrawable,
1150 DrawablePtr pDstDrawable,
1152 int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut);
1154 extern _X_EXPORT RegionPtr
1156 fbCopyPlane(DrawablePtr pSrcDrawable,
1157 DrawablePtr pDstDrawable,
1162 int heightSrc, int xOut, int yOut, unsigned long bitplane);
1167 extern _X_EXPORT void
1168 fbFill(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int width, int height);
1170 extern _X_EXPORT void
1172 fbSolidBoxClipped(DrawablePtr pDrawable,
1174 int xa, int ya, int xb, int yb, FbBits and, FbBits xor);
1179 extern _X_EXPORT void
1181 fbPolyFillRect(DrawablePtr pDrawable,
1182 GCPtr pGC, int nrectInit, xRectangle *prectInit);
1184 #define fbPolyFillArc miPolyFillArc
1186 #define fbFillPolygon miFillPolygon
1191 extern _X_EXPORT void
1193 fbFillSpans(DrawablePtr pDrawable,
1195 int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted);
1201 extern _X_EXPORT Bool
1202 fbCreateGC(GCPtr pGC);
1204 extern _X_EXPORT void
1205 fbPadPixmap(PixmapPtr pPixmap);
1207 extern _X_EXPORT void
1208 fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
1213 extern _X_EXPORT void
1215 fbGetSpans(DrawablePtr pDrawable,
1217 DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart);
1223 extern _X_EXPORT Bool
1224 fbGlyphIn(RegionPtr pRegion, int x, int y, int width, int height);
1226 extern _X_EXPORT void
1228 fbPolyGlyphBlt(DrawablePtr pDrawable,
1232 unsigned int nglyph, CharInfoPtr * ppci, void *pglyphBase);
1234 extern _X_EXPORT void
1236 fbImageGlyphBlt(DrawablePtr pDrawable,
1240 unsigned int nglyph, CharInfoPtr * ppci, void *pglyphBase);
1246 extern _X_EXPORT void
1248 fbPutImage(DrawablePtr pDrawable,
1251 int x, int y, int w, int h, int leftPad, int format, char *pImage);
1253 extern _X_EXPORT void
1255 fbPutZImage(DrawablePtr pDrawable,
1260 int y, int width, int height, FbStip * src, FbStride srcStride);
1262 extern _X_EXPORT void
1264 fbPutXYImage(DrawablePtr pDrawable,
1273 int width, int height, FbStip * src, FbStride srcStride, int srcX);
1275 extern _X_EXPORT void
1277 fbGetImage(DrawablePtr pDrawable,
1280 int w, int h, unsigned int format, unsigned long planeMask, char *d);
1285 extern _X_EXPORT void
1287 fbZeroLine(DrawablePtr pDrawable,
1288 GCPtr pGC, int mode, int npt, DDXPointPtr ppt);
1290 extern _X_EXPORT void
1291 fbZeroSegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSegs);
1293 extern _X_EXPORT void
1295 fbPolyLine(DrawablePtr pDrawable,
1296 GCPtr pGC, int mode, int npt, DDXPointPtr ppt);
1298 extern _X_EXPORT void
1299 fbFixCoordModePrevious(int npt, DDXPointPtr ppt);
1301 extern _X_EXPORT void
1302 fbPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
1304 #define fbPolyRectangle miPolyRectangle
1310 extern _X_EXPORT Bool
1311 fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
1313 extern _X_EXPORT void
1314 fbDestroyGlyphCache(void);
1320 extern _X_EXPORT PixmapPtr
1322 fbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp,
1323 unsigned usage_hint);
1325 extern _X_EXPORT PixmapPtr
1327 fbCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
1328 unsigned usage_hint);
1330 extern _X_EXPORT Bool
1331 fbDestroyPixmap(PixmapPtr pPixmap);
1333 extern _X_EXPORT RegionPtr
1334 fbPixmapToRegion(PixmapPtr pPix);
1340 extern _X_EXPORT void
1342 fbDots(FbBits * dstOrig,
1348 int xorg, int yorg, int xoff, int yoff, FbBits andOrig, FbBits xorOrig);
1350 extern _X_EXPORT void
1352 fbPolyPoint(DrawablePtr pDrawable,
1353 GCPtr pGC, int mode, int npt, xPoint * pptInit);
1358 extern _X_EXPORT void
1360 fbPushPattern(DrawablePtr pDrawable,
1364 int srcX, int x, int y, int width, int height);
1366 extern _X_EXPORT void
1368 fbPushFill(DrawablePtr pDrawable,
1371 FbStride srcStride, int srcX, int x, int y, int width, int height);
1373 extern _X_EXPORT void
1375 fbPushImage(DrawablePtr pDrawable,
1378 FbStride srcStride, int srcX, int x, int y, int width, int height);
1380 extern _X_EXPORT void
1382 fbPushPixels(GCPtr pGC,
1384 DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg);
1390 extern _X_EXPORT Bool
1391 fbCloseScreen(ScreenPtr pScreen);
1393 extern _X_EXPORT Bool
1394 fbRealizeFont(ScreenPtr pScreen, FontPtr pFont);
1396 extern _X_EXPORT Bool
1397 fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
1399 extern _X_EXPORT void
1401 fbQueryBestSize(int class,
1402 unsigned short *width, unsigned short *height,
1405 extern _X_EXPORT PixmapPtr
1406 _fbGetWindowPixmap(WindowPtr pWindow);
1408 extern _X_EXPORT void
1409 _fbSetWindowPixmap(WindowPtr pWindow, PixmapPtr pPixmap);
1411 extern _X_EXPORT Bool
1412 fbSetupScreen(ScreenPtr pScreen, void *pbits, /* pointer to screen bitmap */
1413 int xsize, /* in pixels */
1414 int ysize, int dpix, /* dots per inch */
1415 int dpiy, int width, /* pixel width of frame buffer */
1416 int bpp); /* bits per pixel of frame buffer */
1418 extern _X_EXPORT Bool
1420 wfbFinishScreenInit(ScreenPtr pScreen,
1428 SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
1430 extern _X_EXPORT Bool
1432 wfbScreenInit(ScreenPtr pScreen,
1440 SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
1442 extern _X_EXPORT Bool
1444 fbFinishScreenInit(ScreenPtr pScreen,
1447 int ysize, int dpix, int dpiy, int width, int bpp);
1449 extern _X_EXPORT Bool
1451 fbScreenInit(ScreenPtr pScreen,
1453 int xsize, int ysize, int dpix, int dpiy, int width, int bpp);
1458 typedef void FbBres(DrawablePtr pDrawable,
1463 int axis, int x, int y, int e, int e1, int e3, int len);
1465 extern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash;
1471 extern _X_EXPORT void
1473 fbSetSpans(DrawablePtr pDrawable,
1475 char *src, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
1477 extern _X_EXPORT FbBres *fbSelectBres(DrawablePtr pDrawable, GCPtr pGC);
1479 extern _X_EXPORT void
1481 fbBres(DrawablePtr pDrawable,
1485 int signdy, int axis, int x, int y, int e, int e1, int e3, int len);
1487 extern _X_EXPORT void
1489 fbSegment(DrawablePtr pDrawable,
1491 int xa, int ya, int xb, int yb, Bool drawLast, int *dashOffset);
1497 extern _X_EXPORT void
1499 fbSolid(FbBits * dst,
1501 int dstX, int bpp, int width, int height, FbBits and, FbBits xor);
1503 extern _X_EXPORT void
1505 fbSolid24(FbBits * dst,
1507 int dstX, int width, int height, FbBits and, FbBits xor);
1513 extern _X_EXPORT void
1514 fbTransparentSpan(FbBits * dst, FbBits stip, FbBits fgxor, int n);
1516 extern _X_EXPORT void
1518 fbEvenStipple(FbBits * dst,
1525 FbStride stipStride,
1528 FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
1530 extern _X_EXPORT void
1532 fbOddStipple(FbBits * dst,
1539 FbStride stipStride,
1543 FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
1545 extern _X_EXPORT void
1547 fbStipple(FbBits * dst,
1554 FbStride stipStride,
1559 FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
1565 extern _X_EXPORT void
1567 fbEvenTile(FbBits * dst,
1573 FbStride tileStride,
1574 int tileHeight, int alu, FbBits pm, int xRot, int yRot);
1576 extern _X_EXPORT void
1578 fbOddTile(FbBits * dst,
1584 FbStride tileStride,
1586 int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot);
1588 extern _X_EXPORT void
1590 fbTile(FbBits * dst,
1596 FbStride tileStride,
1598 int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot);
1603 extern _X_EXPORT FbBits fbReplicatePixel(Pixel p, int bpp);
1605 extern _X_EXPORT void
1606 fbReduceRasterOp(int rop, FbBits fg, FbBits pm, FbBits * andp, FbBits * xorp);
1608 #ifdef FB_ACCESS_WRAPPER
1609 extern _X_EXPORT ReadMemoryProcPtr wfbReadMemory;
1610 extern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
1617 extern _X_EXPORT Bool
1618 fbCreateWindow(WindowPtr pWin);
1620 extern _X_EXPORT Bool
1621 fbDestroyWindow(WindowPtr pWin);
1623 extern _X_EXPORT Bool
1624 fbMapWindow(WindowPtr pWindow);
1626 extern _X_EXPORT Bool
1627 fbPositionWindow(WindowPtr pWin, int x, int y);
1629 extern _X_EXPORT Bool
1630 fbUnmapWindow(WindowPtr pWindow);
1632 extern _X_EXPORT void
1634 fbCopyWindowProc(DrawablePtr pSrcDrawable,
1635 DrawablePtr pDstDrawable,
1641 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1643 extern _X_EXPORT void
1644 fbCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
1646 extern _X_EXPORT Bool
1647 fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
1649 extern _X_EXPORT void
1651 fbFillRegionSolid(DrawablePtr pDrawable,
1652 RegionPtr pRegion, FbBits and, FbBits xor);
1654 extern _X_EXPORT pixman_image_t *image_from_pict(PicturePtr pict,
1656 int *xoff, int *yoff);
1658 extern _X_EXPORT void free_pixman_pict(PicturePtr, pixman_image_t *);