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