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"
43 #include "picturestr.h"
45 #ifdef FB_ACCESS_WRAPPER
47 #include "wfbrename.h"
48 #define FBPREFIX(x) wfb##x
49 #define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr))))
50 #define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr))))
52 #define MEMCPY_WRAPPED(dst, src, size) do { \
54 CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src); \
55 for(_i = 0; _i < size; _i++) { \
56 WRITE(_dst +_i, READ(_src + _i)); \
60 #define MEMSET_WRAPPED(dst, val, size) do { \
62 CARD8 *_dst = (CARD8*)(dst); \
63 for(_i = 0; _i < size; _i++) { \
64 WRITE(_dst +_i, (val)); \
70 #define FBPREFIX(x) fb##x
71 #define WRITE(ptr, val) (*(ptr) = (val))
72 #define READ(ptr) (*(ptr))
73 #define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size))
74 #define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size))
79 * This single define controls the basic size of data manipulated
80 * by this software; it must be log2(sizeof (FbBits) * 8)
84 #define FB_SHIFT LOG2_BITMAP_PAD
87 #if FB_SHIFT < LOG2_BITMAP_PAD
88 error FB_SHIFT must be >= LOG2_BITMAP_PAD
90 #define FB_UNIT (1 << FB_SHIFT)
91 #define FB_HALFUNIT (1 << (FB_SHIFT-1))
92 #define FB_MASK (FB_UNIT - 1)
93 #define FB_ALLONES ((FbBits) -1)
94 #if GLYPHPADBYTES != 4
95 #error "GLYPHPADBYTES must be 4"
97 /* for driver compat - intel UXA needs the second one at least */
100 #define FB_STIP_SHIFT LOG2_BITMAP_PAD
101 #define FB_STIP_UNIT (1 << FB_STIP_SHIFT)
102 #define FB_STIP_MASK (FB_STIP_UNIT - 1)
103 #define FB_STIP_ALLONES ((FbStip) -1)
104 #define FB_STIP_ODDSTRIDE(s) (((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0)
105 #define FB_STIP_ODDPTR(p) ((((long) (p)) & (FB_MASK >> 3)) != 0)
106 #define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT)))
107 #define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT)))
108 #define FbFullMask(n) ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1))
111 typedef unsigned __int64 FbBits;
113 #if defined(__alpha__) || defined(__alpha) || \
114 defined(ia64) || defined(__ia64__) || \
115 defined(__sparc64__) || defined(_LP64) || \
116 defined(__s390x__) || \
117 defined(amd64) || defined (__amd64__) || \
118 defined (__powerpc64__)
119 typedef unsigned long FbBits;
121 typedef unsigned long long FbBits;
127 typedef CARD32 FbBits;
131 typedef CARD16 FbBits;
134 #if LOG2_BITMAP_PAD == FB_SHIFT
135 typedef FbBits FbStip;
137 #if LOG2_BITMAP_PAD == 5
138 typedef CARD32 FbStip;
142 typedef int FbStride;
145 extern _X_EXPORT void fbValidateDrawable(DrawablePtr d);
146 extern _X_EXPORT void fbInitializeDrawable(DrawablePtr d);
147 extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data);
149 #define FB_HEAD_BITS (FbStip) (0xbaadf00d)
150 #define FB_TAIL_BITS (FbStip) (0xbaddf0ad)
152 #define fbValidateDrawable(d)
153 #define fdInitializeDrawable(d)
158 #if BITMAP_BIT_ORDER == LSBFirst
159 #define FbScrLeft(x,n) ((x) >> (n))
160 #define FbScrRight(x,n) ((x) << (n))
161 /* #define FbLeftBits(x,n) ((x) & ((((FbBits) 1) << (n)) - 1)) */
162 #define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1))
163 #define FbStipMoveLsb(x,s,n) (FbStipRight (x,(s)-(n)))
164 #define FbPatternOffsetBits 0
166 #define FbScrLeft(x,n) ((x) << (n))
167 #define FbScrRight(x,n) ((x) >> (n))
168 /* #define FbLeftBits(x,n) ((x) >> (FB_UNIT - (n))) */
169 #define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n)))
170 #define FbStipMoveLsb(x,s,n) (x)
171 #define FbPatternOffsetBits (sizeof (FbBits) - 1)
176 #define FbStipLeft(x,n) FbScrLeft(x,n)
177 #define FbStipRight(x,n) FbScrRight(x,n)
179 #define FbRotLeft(x,n) FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0)
180 #define FbRotRight(x,n) FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0)
182 #define FbRotStipLeft(x,n) FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0)
183 #define FbRotStipRight(x,n) FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0)
185 #define FbLeftMask(x) ( ((x) & FB_MASK) ? \
186 FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0)
187 #define FbRightMask(x) ( ((FB_UNIT - (x)) & FB_MASK) ? \
188 FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0)
190 #define FbLeftStipMask(x) ( ((x) & FB_STIP_MASK) ? \
191 FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0)
192 #define FbRightStipMask(x) ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \
193 FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0)
195 #define FbBitsMask(x,w) (FbScrRight(FB_ALLONES,(x) & FB_MASK) & \
196 FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK))
198 #define FbStipMask(x,w) (FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \
199 FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK))
201 #define FbMaskBits(x,w,l,n,r) { \
203 r = FbRightMask((x)+n); \
206 n -= FB_UNIT - ((x) & FB_MASK); \
216 #define FbByteMaskInvalid 0x10
218 #define FbPatternOffset(o,t) ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1)))
220 #define FbPtrOffset(p,o,t) ((t *) ((CARD8 *) (p) + (o)))
221 #define FbSelectPatternPart(xor,o,t) ((xor) >> (FbPatternOffset (o,t) << 3))
222 #define FbStorePart(dst,off,t,xor) (WRITE(FbPtrOffset(dst,off,t), \
223 FbSelectPart(xor,off,t)))
225 #define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t)
228 #define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \
232 r = FbRightMask((x)+n); \
234 /* compute right byte length */ \
235 if ((copy) && (((x) + n) & 7) == 0) { \
236 rb = (((x) + n) & FB_MASK) >> 3; \
238 rb = FbByteMaskInvalid; \
243 /* compute left byte length */ \
244 if ((copy) && ((x) & 7) == 0) { \
245 lb = ((x) & FB_MASK) >> 3; \
247 lb = FbByteMaskInvalid; \
249 /* subtract out the portion painted by leftMask */ \
250 n -= FB_UNIT - ((x) & FB_MASK); \
252 if (lb != FbByteMaskInvalid) { \
253 if (rb == FbByteMaskInvalid) { \
254 lb = FbByteMaskInvalid; \
256 lb |= (rb - lb) << (FB_SHIFT - 3); \
269 #define FbDoLeftMaskByteRRop6Cases(dst,xor) \
270 case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \
271 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
273 case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \
274 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
275 FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
277 case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \
278 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
279 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
281 case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \
282 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
283 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
284 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
286 case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \
287 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
288 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
289 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
291 case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \
292 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
293 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
294 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
295 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
297 case (sizeof (FbBits) - 7): \
298 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \
299 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
300 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
302 case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \
303 FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \
305 case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \
306 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
308 case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \
309 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
310 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
312 case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \
313 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
314 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
316 case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \
317 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
318 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
319 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
321 case (sizeof (FbBits) - 6): \
322 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \
323 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
325 case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \
326 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
328 case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \
329 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
330 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
332 case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \
333 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
334 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
336 case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \
337 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
338 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
339 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
341 case (sizeof (FbBits) - 5): \
342 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \
343 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
345 case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \
346 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \
348 case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \
349 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
351 case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \
352 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \
353 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
355 case (sizeof (FbBits) - 4): \
356 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \
359 #define FbDoRightMaskByteRRop6Cases(dst,xor) \
361 FbStorePart(dst,0,CARD32,xor); \
364 FbStorePart(dst,0,CARD32,xor); \
365 FbStorePart(dst,4,CARD8,xor); \
368 FbStorePart(dst,0,CARD32,xor); \
369 FbStorePart(dst,4,CARD16,xor); \
372 FbStorePart(dst,0,CARD32,xor); \
373 FbStorePart(dst,4,CARD16,xor); \
374 FbStorePart(dst,6,CARD8,xor); \
377 #define FbDoLeftMaskByteRRop6Cases(dst,xor)
378 #define FbDoRightMaskByteRRop6Cases(dst,xor)
381 #define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \
383 FbDoLeftMaskByteRRop6Cases(dst,xor) \
384 case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \
385 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
387 case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \
388 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
389 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
391 case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \
392 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \
394 case sizeof (FbBits) - 3: \
395 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \
396 case sizeof (FbBits) - 2: \
397 FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \
399 case sizeof (FbBits) - 1: \
400 FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \
403 WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \
408 #define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \
411 FbStorePart(dst,0,CARD8,xor); \
414 FbStorePart(dst,0,CARD16,xor); \
417 FbStorePart(dst,0,CARD16,xor); \
418 FbStorePart(dst,2,CARD8,xor); \
420 FbDoRightMaskByteRRop6Cases(dst,xor) \
422 WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \
426 #define FbMaskStip(x,w,l,n,r) { \
428 r = FbRightStipMask((x)+n); \
429 l = FbLeftStipMask(x); \
431 n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \
438 n >>= FB_STIP_SHIFT; \
442 * These macros are used to transparently stipple
443 * in copy mode; the expected usage is with 'n' constant
444 * so all of the conditional parts collapse into a minimal
445 * sequence of partial word writes
447 * 'n' is the bytemask of which bytes to store, 'a' is the address
448 * of the FbBits base unit, 'o' is the offset within that unit
450 * The term "lane" comes from the hardware term "byte-lane" which
453 #define FbLaneCase1(n,a,o) \
455 WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor); \
458 #define FbLaneCase2(n,a,o) \
460 WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor); \
462 FbLaneCase1((n)&1,a,o) \
463 FbLaneCase1((n)>>1,a,(o)+1) \
466 #define FbLaneCase4(n,a,o) \
468 WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor); \
470 FbLaneCase2((n)&3,a,o) \
471 FbLaneCase2((n)>>2,a,(o)+2) \
474 #define FbLaneCase8(n,a,o) \
475 if ((n) == 0x0ff) { \
476 *(FbBits *) ((a)+(o)) = fgxor; \
478 FbLaneCase4((n)&15,a,o) \
479 FbLaneCase4((n)>>4,a,(o)+4) \
483 #define FbLaneCase(n,a) FbLaneCase8(n,(CARD8 *) (a),0)
487 #define FbLaneCase(n,a) FbLaneCase4(n,(CARD8 *) (a),0)
490 /* Rotate a filled pixel value to the specified alignement */
491 #define FbRot24(p,b) (FbScrRight(p,b) | FbScrLeft(p,24-(b)))
492 #define FbRot24Stip(p,b) (FbStipRight(p,b) | FbStipLeft(p,24-(b)))
494 /* step a filled pixel value to the next/previous FB_UNIT alignment */
495 #define FbNext24Pix(p) (FbRot24(p,(24-FB_UNIT%24)))
496 #define FbPrev24Pix(p) (FbRot24(p,FB_UNIT%24))
497 #define FbNext24Stip(p) (FbRot24(p,(24-FB_STIP_UNIT%24)))
498 #define FbPrev24Stip(p) (FbRot24(p,FB_STIP_UNIT%24))
500 /* step a rotation value to the next/previous rotation value */
502 #define FbNext24Rot(r) ((r) == 16 ? 0 : (r) + 8)
503 #define FbPrev24Rot(r) ((r) == 0 ? 16 : (r) - 8)
505 #if IMAGE_BYTE_ORDER == MSBFirst
506 #define FbFirst24Rot(x) (((x) + 8) % 24)
508 #define FbFirst24Rot(x) ((x) % 24)
514 #define FbNext24Rot(r) ((r) == 0 ? 16 : (r) - 8)
515 #define FbPrev24Rot(r) ((r) == 16 ? 0 : (r) + 8)
517 #if IMAGE_BYTE_ORDER == MSBFirst
518 #define FbFirst24Rot(x) (((x) + 16) % 24)
520 #define FbFirst24Rot(x) ((x) % 24)
524 #define FbNext24RotStip(r) ((r) == 0 ? 16 : (r) - 8)
525 #define FbPrev24RotStip(r) ((r) == 16 ? 0 : (r) + 8)
527 /* Whether 24-bit specific code is needed for this filled pixel value */
528 #define FbCheck24Pix(p) ((p) == FbNext24Pix(p))
530 /* Macros for dealing with dashing */
532 #define FbDashDeclare \
533 unsigned char *__dash, *__firstDash, *__lastDash
535 #define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) { \
537 __firstDash = (pGC)->dash; \
538 __lastDash = __firstDash + (pGC)->numInDashList; \
539 (dashOffset) %= (pPriv)->dashLength; \
541 __dash = __firstDash; \
542 while ((dashOffset) >= ((dashlen) = *__dash)) \
544 (dashOffset) -= (dashlen); \
546 if (++__dash == __lastDash) \
547 __dash = __firstDash; \
549 (dashlen) -= (dashOffset); \
552 #define FbDashNext(dashlen) { \
553 if (++__dash == __lastDash) \
554 __dash = __firstDash; \
555 (dashlen) = *__dash; \
558 /* as numInDashList is always even, this case can skip a test */
560 #define FbDashNextEven(dashlen) { \
561 (dashlen) = *++__dash; \
564 #define FbDashNextOdd(dashlen) FbDashNext(dashlen)
566 #define FbDashStep(dashlen,even) { \
567 if (!--(dashlen)) { \
568 FbDashNext(dashlen); \
573 extern _X_EXPORT const GCOps fbGCOps;
574 extern _X_EXPORT const GCFuncs fbGCFuncs;
576 /* Framebuffer access wrapper */
577 typedef FbBits(*ReadMemoryProcPtr) (const void *src, int size);
578 typedef void (*WriteMemoryProcPtr) (void *dst, FbBits value, int size);
579 typedef void (*SetupWrapProcPtr) (ReadMemoryProcPtr * pRead,
580 WriteMemoryProcPtr * pWrite,
582 typedef void (*FinishWrapProcPtr) (DrawablePtr pDraw);
584 #ifdef FB_ACCESS_WRAPPER
586 #define fbPrepareAccess(pDraw) \
587 fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \
591 #define fbFinishAccess(pDraw) \
592 fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw)
596 #define fbPrepareAccess(pPix)
597 #define fbFinishAccess(pDraw)
601 extern _X_EXPORT DevPrivateKey
602 fbGetScreenPrivateKey(void);
604 /* private field of a screen */
606 unsigned char win32bpp; /* window bpp for 32-bpp images */
607 unsigned char pix32bpp; /* pixmap bpp for 32-bpp images */
608 #ifdef FB_ACCESS_WRAPPER
609 SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */
610 FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */
612 DevPrivateKeyRec gcPrivateKeyRec;
613 DevPrivateKeyRec winPrivateKeyRec;
614 } FbScreenPrivRec, *FbScreenPrivPtr;
616 #define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \
617 dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey()))
619 /* private field of GC */
621 FbBits and, xor; /* reduced rop values */
622 FbBits bgand, bgxor; /* for stipples */
623 FbBits fg, bg, pm; /* expanded and filled */
624 unsigned int dashLength; /* total of all dash elements */
625 unsigned char evenStipple; /* stipple is even */
626 unsigned char bpp; /* current drawable bpp */
627 } FbGCPrivRec, *FbGCPrivPtr;
629 #define fbGetGCPrivateKey(pGC) (&fbGetScreenPrivate((pGC)->pScreen)->gcPrivateKeyRec)
631 #define fbGetGCPrivate(pGC) ((FbGCPrivPtr)\
632 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey(pGC)))
634 #define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip)
635 #define fbGetExpose(pGC) ((pGC)->fExpose)
636 #define fbGetFreeCompClip(pGC) ((pGC)->freeCompClip)
637 #define fbGetRotatedPixmap(pGC) ((pGC)->pRotatedPixmap)
639 #define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate)
641 #define fbGetWinPrivateKey(pWin) (&fbGetScreenPrivate(((DrawablePtr) (pWin))->pScreen)->winPrivateKeyRec)
643 #define fbGetWindowPixmap(pWin) ((PixmapPtr)\
644 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey(pWin)))
647 #define __fbPixDrawableX(pPix) ((pPix)->drawable.x)
648 #define __fbPixDrawableY(pPix) ((pPix)->drawable.y)
650 #define __fbPixDrawableX(pPix) 0
651 #define __fbPixDrawableY(pPix) 0
655 #define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix) - (pPix)->screen_x)
656 #define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix) - (pPix)->screen_y)
658 #define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix))
659 #define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix))
661 #define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix))
662 #define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix))
664 #define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) { \
665 if ((pDrawable)->type != DRAWABLE_PIXMAP) { \
666 (pixmap) = fbGetWindowPixmap(pDrawable); \
667 (xoff) = __fbPixOffXWin(pixmap); \
668 (yoff) = __fbPixOffYWin(pixmap); \
670 (pixmap) = (PixmapPtr) (pDrawable); \
671 (xoff) = __fbPixOffXPix(pixmap); \
672 (yoff) = __fbPixOffYPix(pixmap); \
674 fbPrepareAccess(pDrawable); \
677 #define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) { \
678 (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; \
679 (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride); \
680 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \
683 #define fbGetPixmapStipData(pixmap, pointer, stride, bpp) { \
684 (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; \
685 (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride); \
686 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \
689 #define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
691 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \
692 fbGetPixmapBitsData(_pPix, pointer, stride, bpp); \
695 #define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
697 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \
698 fbGetPixmapStipData(_pPix, pointer, stride, bpp); \
702 * XFree86 empties the root BorderClip when the VT is inactive,
703 * here's a macro which uses that to disable GetImage and GetSpans
706 #define fbWindowEnabled(pWin) \
707 RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip)
709 #define fbDrawableEnabled(pDrawable) \
710 ((pDrawable)->type == DRAWABLE_PIXMAP ? \
711 TRUE : fbWindowEnabled((WindowPtr) pDrawable))
713 #define FbPowerOfTwo(w) (((w) & ((w) - 1)) == 0)
715 * Accelerated tiles are power of 2 width <= FB_UNIT
717 #define FbEvenTile(w) ((w) <= FB_UNIT && FbPowerOfTwo(w))
719 * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp
720 * with dstBpp a power of 2 as well
722 #define FbEvenStip(w,bpp) ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp))
727 extern _X_EXPORT void
729 fb24_32GetSpans(DrawablePtr pDrawable,
731 DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart);
733 extern _X_EXPORT void
735 fb24_32SetSpans(DrawablePtr pDrawable,
738 DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
740 extern _X_EXPORT void
742 fb24_32PutZImage(DrawablePtr pDrawable,
747 int y, int width, int height, CARD8 *src, FbStride srcStride);
749 extern _X_EXPORT void
751 fb24_32GetImage(DrawablePtr pDrawable,
755 int h, unsigned int format, unsigned long planeMask, char *d);
757 extern _X_EXPORT void
759 fb24_32CopyMtoN(DrawablePtr pSrcDrawable,
760 DrawablePtr pDstDrawable,
766 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
768 extern _X_EXPORT PixmapPtr
769 fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel);
771 extern _X_EXPORT Bool
772 fb24_32CreateScreenResources(ScreenPtr pScreen);
774 extern _X_EXPORT Bool
776 fb24_32ModifyPixmapHeader(PixmapPtr pPixmap,
780 int bitsPerPixel, int devKind, pointer pPixData);
785 extern _X_EXPORT Bool
786 fbAllocatePrivates(ScreenPtr pScreen);
792 extern _X_EXPORT void
793 fbPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs);
799 extern _X_EXPORT void
801 fbBresSolid8(DrawablePtr pDrawable,
806 int axis, int x, int y, int e, int e1, int e3, int len);
808 extern _X_EXPORT void
810 fbBresDash8(DrawablePtr pDrawable,
814 int signdy, int axis, int x, int y, int e, int e1, int e3, int len);
816 extern _X_EXPORT void
818 fbDots8(FbBits * dst,
824 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
826 extern _X_EXPORT void
830 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
832 extern _X_EXPORT void
834 fbGlyph8(FbBits * dstLine,
836 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
838 extern _X_EXPORT void
840 fbPolyline8(DrawablePtr pDrawable,
841 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
843 extern _X_EXPORT void
844 fbPolySegment8(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
846 extern _X_EXPORT void
848 fbBresSolid16(DrawablePtr pDrawable,
853 int axis, int x, int y, int e, int e1, int e3, int len);
855 extern _X_EXPORT void
857 fbBresDash16(DrawablePtr pDrawable,
862 int axis, int x, int y, int e, int e1, int e3, int len);
864 extern _X_EXPORT void
866 fbDots16(FbBits * dst,
872 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
874 extern _X_EXPORT void
876 fbArc16(FbBits * dst,
878 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
880 extern _X_EXPORT void
882 fbGlyph16(FbBits * dstLine,
884 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
886 extern _X_EXPORT void
888 fbPolyline16(DrawablePtr pDrawable,
889 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
891 extern _X_EXPORT void
892 fbPolySegment16(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
894 extern _X_EXPORT void
896 fbBresSolid24(DrawablePtr pDrawable,
901 int axis, int x, int y, int e, int e1, int e3, int len);
903 extern _X_EXPORT void
905 fbBresDash24(DrawablePtr pDrawable,
910 int axis, int x, int y, int e, int e1, int e3, int len);
912 extern _X_EXPORT void
914 fbDots24(FbBits * dst,
920 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
922 extern _X_EXPORT void
924 fbArc24(FbBits * dst,
926 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
928 extern _X_EXPORT void
930 fbGlyph24(FbBits * dstLine,
932 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
934 extern _X_EXPORT void
936 fbPolyline24(DrawablePtr pDrawable,
937 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
939 extern _X_EXPORT void
940 fbPolySegment24(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
942 extern _X_EXPORT void
944 fbBresSolid32(DrawablePtr pDrawable,
949 int axis, int x, int y, int e, int e1, int e3, int len);
951 extern _X_EXPORT void
953 fbBresDash32(DrawablePtr pDrawable,
958 int axis, int x, int y, int e, int e1, int e3, int len);
960 extern _X_EXPORT void
962 fbDots32(FbBits * dst,
968 int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor);
970 extern _X_EXPORT void
972 fbArc32(FbBits * dst,
974 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor);
976 extern _X_EXPORT void
978 fbGlyph32(FbBits * dstLine,
980 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift);
981 extern _X_EXPORT void
983 fbPolyline32(DrawablePtr pDrawable,
984 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig);
986 extern _X_EXPORT void
987 fbPolySegment32(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
992 extern _X_EXPORT void
1001 int height, int alu, FbBits pm, int bpp, Bool reverse, Bool upsidedown);
1003 extern _X_EXPORT void
1005 fbBlt24(FbBits * srcLine,
1012 int height, int alu, FbBits pm, Bool reverse, Bool upsidedown);
1014 extern _X_EXPORT void
1015 fbBltStip(FbStip * src, FbStride srcStride, /* in FbStip units, not FbBits units */
1016 int srcX, FbStip * dst, FbStride dstStride, /* in FbStip units, not FbBits units */
1017 int dstX, int width, int height, int alu, FbBits pm, int bpp);
1022 extern _X_EXPORT void
1024 fbBltOne(FbStip * src,
1032 int height, FbBits fgand, FbBits fbxor, FbBits bgand, FbBits bgxor);
1034 extern _X_EXPORT void
1035 fbBltOne24(FbStip * src, FbStride srcStride, /* FbStip units per scanline */
1036 int srcX, /* bit position of source */
1037 FbBits * dst, FbStride dstStride, /* FbBits units per scanline */
1038 int dstX, /* bit position of dest */
1039 int dstBpp, /* bits per destination unit */
1040 int width, /* width in bits of destination */
1041 int height, /* height in scanlines */
1042 FbBits fgand, /* rrop values */
1043 FbBits fgxor, FbBits bgand, FbBits bgxor);
1045 extern _X_EXPORT void
1047 fbBltPlane(FbBits * src,
1057 FbStip fgxor, FbStip bgand, FbStip bgxor, Pixel planeMask);
1062 extern _X_EXPORT int
1063 fbListInstalledColormaps(ScreenPtr pScreen, Colormap * pmaps);
1065 extern _X_EXPORT void
1066 fbInstallColormap(ColormapPtr pmap);
1068 extern _X_EXPORT void
1069 fbUninstallColormap(ColormapPtr pmap);
1071 extern _X_EXPORT void
1073 fbResolveColor(unsigned short *pred,
1074 unsigned short *pgreen,
1075 unsigned short *pblue, VisualPtr pVisual);
1077 extern _X_EXPORT Bool
1078 fbInitializeColormap(ColormapPtr pmap);
1080 extern _X_EXPORT int
1082 fbExpandDirectColors(ColormapPtr pmap,
1083 int ndef, xColorItem * indefs, xColorItem * outdefs);
1085 extern _X_EXPORT Bool
1086 fbCreateDefColormap(ScreenPtr pScreen);
1088 extern _X_EXPORT void
1089 fbClearVisualTypes(void);
1091 extern _X_EXPORT Bool
1092 fbHasVisualTypes(int depth);
1094 extern _X_EXPORT Bool
1095 fbSetVisualTypes(int depth, int visuals, int bitsPerRGB);
1097 extern _X_EXPORT Bool
1099 fbSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB,
1100 Pixel redMask, Pixel greenMask, Pixel blueMask);
1102 extern _X_EXPORT Bool
1104 fbInitVisuals(VisualPtr * visualp,
1109 VisualID * defaultVisp, unsigned long sizes, int bitsPerRGB);
1115 /* Compatibility definition, to be removed at next ABI change. */
1116 typedef void (*fbCopyProc) (DrawablePtr pSrcDrawable,
1117 DrawablePtr pDstDrawable,
1124 Bool upsidedown, Pixel bitplane, void *closure);
1126 extern _X_EXPORT void
1128 fbCopyNtoN(DrawablePtr pSrcDrawable,
1129 DrawablePtr pDstDrawable,
1135 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1137 /* Compatibility wrapper, to be removed at next ABI change. */
1138 extern _X_EXPORT void
1140 fbCopyRegion(DrawablePtr pSrcDrawable,
1141 DrawablePtr pDstDrawable,
1143 RegionPtr pDstRegion,
1145 int dy, fbCopyProc copyProc, Pixel bitPlane, void *closure);
1147 /* Compatibility wrapper, to be removed at next ABI change. */
1148 extern _X_EXPORT RegionPtr
1150 fbDoCopy(DrawablePtr pSrcDrawable,
1151 DrawablePtr pDstDrawable,
1158 int yOut, fbCopyProc copyProc, Pixel bitplane, void *closure);
1160 extern _X_EXPORT void
1162 fbCopy1toN(DrawablePtr pSrcDrawable,
1163 DrawablePtr pDstDrawable,
1169 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1171 extern _X_EXPORT void
1173 fbCopyNto1(DrawablePtr pSrcDrawable,
1174 DrawablePtr pDstDrawable,
1180 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1182 extern _X_EXPORT RegionPtr
1184 fbCopyArea(DrawablePtr pSrcDrawable,
1185 DrawablePtr pDstDrawable,
1187 int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut);
1189 extern _X_EXPORT RegionPtr
1191 fbCopyPlane(DrawablePtr pSrcDrawable,
1192 DrawablePtr pDstDrawable,
1197 int heightSrc, int xOut, int yOut, unsigned long bitplane);
1202 extern _X_EXPORT void
1203 fbFill(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int width, int height);
1205 extern _X_EXPORT void
1207 fbSolidBoxClipped(DrawablePtr pDrawable,
1209 int xa, int ya, int xb, int yb, FbBits and, FbBits xor);
1214 extern _X_EXPORT void
1216 fbPolyFillRect(DrawablePtr pDrawable,
1217 GCPtr pGC, int nrectInit, xRectangle *prectInit);
1219 #define fbPolyFillArc miPolyFillArc
1221 #define fbFillPolygon miFillPolygon
1226 extern _X_EXPORT void
1228 fbFillSpans(DrawablePtr pDrawable,
1230 int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted);
1236 extern _X_EXPORT Bool
1237 fbCreateGC(GCPtr pGC);
1239 extern _X_EXPORT void
1240 fbPadPixmap(PixmapPtr pPixmap);
1242 extern _X_EXPORT void
1243 fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
1248 extern _X_EXPORT void
1250 fbGetSpans(DrawablePtr pDrawable,
1252 DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart);
1258 extern _X_EXPORT Bool
1259 fbGlyphIn(RegionPtr pRegion, int x, int y, int width, int height);
1261 extern _X_EXPORT void
1263 fbPolyGlyphBlt(DrawablePtr pDrawable,
1267 unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase);
1269 extern _X_EXPORT void
1271 fbImageGlyphBlt(DrawablePtr pDrawable,
1275 unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase);
1281 extern _X_EXPORT void
1283 fbPutImage(DrawablePtr pDrawable,
1286 int x, int y, int w, int h, int leftPad, int format, char *pImage);
1288 extern _X_EXPORT void
1290 fbPutZImage(DrawablePtr pDrawable,
1295 int y, int width, int height, FbStip * src, FbStride srcStride);
1297 extern _X_EXPORT void
1299 fbPutXYImage(DrawablePtr pDrawable,
1308 int width, int height, FbStip * src, FbStride srcStride, int srcX);
1310 extern _X_EXPORT void
1312 fbGetImage(DrawablePtr pDrawable,
1315 int w, int h, unsigned int format, unsigned long planeMask, char *d);
1320 extern _X_EXPORT void
1322 fbZeroLine(DrawablePtr pDrawable,
1323 GCPtr pGC, int mode, int npt, DDXPointPtr ppt);
1325 extern _X_EXPORT void
1326 fbZeroSegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSegs);
1328 extern _X_EXPORT void
1330 fbPolyLine(DrawablePtr pDrawable,
1331 GCPtr pGC, int mode, int npt, DDXPointPtr ppt);
1333 extern _X_EXPORT void
1334 fbFixCoordModePrevious(int npt, DDXPointPtr ppt);
1336 extern _X_EXPORT void
1337 fbPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg);
1339 #define fbPolyRectangle miPolyRectangle
1345 extern _X_EXPORT Bool
1346 fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
1352 extern _X_EXPORT PixmapPtr
1354 fbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp,
1355 unsigned usage_hint);
1357 extern _X_EXPORT PixmapPtr
1359 fbCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
1360 unsigned usage_hint);
1362 extern _X_EXPORT Bool
1363 fbDestroyPixmap(PixmapPtr pPixmap);
1365 extern _X_EXPORT RegionPtr
1366 fbPixmapToRegion(PixmapPtr pPix);
1372 extern _X_EXPORT void
1374 fbDots(FbBits * dstOrig,
1380 int xorg, int yorg, int xoff, int yoff, FbBits andOrig, FbBits xorOrig);
1382 extern _X_EXPORT void
1384 fbPolyPoint(DrawablePtr pDrawable,
1385 GCPtr pGC, int mode, int npt, xPoint * pptInit);
1390 extern _X_EXPORT void
1392 fbPushPattern(DrawablePtr pDrawable,
1396 int srcX, int x, int y, int width, int height);
1398 extern _X_EXPORT void
1400 fbPushFill(DrawablePtr pDrawable,
1403 FbStride srcStride, int srcX, int x, int y, int width, int height);
1405 extern _X_EXPORT void
1407 fbPushImage(DrawablePtr pDrawable,
1410 FbStride srcStride, int srcX, int x, int y, int width, int height);
1412 extern _X_EXPORT void
1414 fbPushPixels(GCPtr pGC,
1416 DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg);
1422 extern _X_EXPORT Bool
1423 fbCloseScreen(ScreenPtr pScreen);
1425 extern _X_EXPORT Bool
1426 fbRealizeFont(ScreenPtr pScreen, FontPtr pFont);
1428 extern _X_EXPORT Bool
1429 fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
1431 extern _X_EXPORT void
1433 fbQueryBestSize(int class,
1434 unsigned short *width, unsigned short *height,
1437 extern _X_EXPORT PixmapPtr
1438 _fbGetWindowPixmap(WindowPtr pWindow);
1440 extern _X_EXPORT void
1441 _fbSetWindowPixmap(WindowPtr pWindow, PixmapPtr pPixmap);
1443 extern _X_EXPORT Bool
1444 fbSetupScreen(ScreenPtr pScreen, pointer pbits, /* pointer to screen bitmap */
1445 int xsize, /* in pixels */
1446 int ysize, int dpix, /* dots per inch */
1447 int dpiy, int width, /* pixel width of frame buffer */
1448 int bpp); /* bits per pixel of frame buffer */
1450 extern _X_EXPORT Bool
1452 wfbFinishScreenInit(ScreenPtr pScreen,
1460 SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
1462 extern _X_EXPORT Bool
1464 wfbScreenInit(ScreenPtr pScreen,
1472 SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap);
1474 extern _X_EXPORT Bool
1476 fbFinishScreenInit(ScreenPtr pScreen,
1479 int ysize, int dpix, int dpiy, int width, int bpp);
1481 extern _X_EXPORT Bool
1483 fbScreenInit(ScreenPtr pScreen,
1485 int xsize, int ysize, int dpix, int dpiy, int width, int bpp);
1490 typedef void FbBres(DrawablePtr pDrawable,
1495 int axis, int x, int y, int e, int e1, int e3, int len);
1497 extern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash;
1503 extern _X_EXPORT void
1505 fbSetSpans(DrawablePtr pDrawable,
1507 char *src, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted);
1509 extern _X_EXPORT FbBres *fbSelectBres(DrawablePtr pDrawable, GCPtr pGC);
1511 extern _X_EXPORT void
1513 fbBres(DrawablePtr pDrawable,
1517 int signdy, int axis, int x, int y, int e, int e1, int e3, int len);
1519 extern _X_EXPORT void
1521 fbSegment(DrawablePtr pDrawable,
1523 int xa, int ya, int xb, int yb, Bool drawLast, int *dashOffset);
1529 extern _X_EXPORT void
1531 fbSolid(FbBits * dst,
1533 int dstX, int bpp, int width, int height, FbBits and, FbBits xor);
1535 extern _X_EXPORT void
1537 fbSolid24(FbBits * dst,
1539 int dstX, int width, int height, FbBits and, FbBits xor);
1545 extern _X_EXPORT void
1546 fbTransparentSpan(FbBits * dst, FbBits stip, FbBits fgxor, int n);
1548 extern _X_EXPORT void
1550 fbEvenStipple(FbBits * dst,
1557 FbStride stipStride,
1560 FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
1562 extern _X_EXPORT void
1564 fbOddStipple(FbBits * dst,
1571 FbStride stipStride,
1575 FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
1577 extern _X_EXPORT void
1579 fbStipple(FbBits * dst,
1586 FbStride stipStride,
1591 FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot);
1597 extern _X_EXPORT void
1599 fbEvenTile(FbBits * dst,
1605 FbStride tileStride,
1606 int tileHeight, int alu, FbBits pm, int xRot, int yRot);
1608 extern _X_EXPORT void
1610 fbOddTile(FbBits * dst,
1616 FbStride tileStride,
1618 int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot);
1620 extern _X_EXPORT void
1622 fbTile(FbBits * dst,
1628 FbStride tileStride,
1630 int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot);
1635 extern _X_EXPORT FbBits fbReplicatePixel(Pixel p, int bpp);
1637 extern _X_EXPORT void
1638 fbReduceRasterOp(int rop, FbBits fg, FbBits pm, FbBits * andp, FbBits * xorp);
1640 #ifdef FB_ACCESS_WRAPPER
1641 extern _X_EXPORT ReadMemoryProcPtr wfbReadMemory;
1642 extern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
1649 extern _X_EXPORT Bool
1650 fbCreateWindow(WindowPtr pWin);
1652 extern _X_EXPORT Bool
1653 fbDestroyWindow(WindowPtr pWin);
1655 extern _X_EXPORT Bool
1656 fbMapWindow(WindowPtr pWindow);
1658 extern _X_EXPORT Bool
1659 fbPositionWindow(WindowPtr pWin, int x, int y);
1661 extern _X_EXPORT Bool
1662 fbUnmapWindow(WindowPtr pWindow);
1664 extern _X_EXPORT void
1666 fbCopyWindowProc(DrawablePtr pSrcDrawable,
1667 DrawablePtr pDstDrawable,
1673 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure);
1675 extern _X_EXPORT void
1676 fbCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
1678 extern _X_EXPORT Bool
1679 fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
1681 extern _X_EXPORT void
1683 fbFillRegionSolid(DrawablePtr pDrawable,
1684 RegionPtr pRegion, FbBits and, FbBits xor);
1686 extern _X_EXPORT pixman_image_t *image_from_pict(PicturePtr pict,
1688 int *xoff, int *yoff);
1690 extern _X_EXPORT void free_pixman_pict(PicturePtr, pixman_image_t *);