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 103typedef CARD32 FbBits; 104#else 105#error "Unsupported FB_SHIFT" 106#endif 107 108#if LOG2_BITMAP_PAD == FB_SHIFT 109typedef FbBits FbStip; 110#endif 111 112typedef int FbStride; 113 114#ifdef FB_DEBUG 115extern _X_EXPORT void fbValidateDrawable(DrawablePtr d); 116extern _X_EXPORT void fbInitializeDrawable(DrawablePtr d); 117extern _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 374extern _X_EXPORT const GCOps fbGCOps; 375extern _X_EXPORT const GCFuncs fbGCFuncs; 376 377/* Framebuffer access wrapper */ 378typedef FbBits(*ReadMemoryProcPtr) (const void *src, int size); 379typedef void (*WriteMemoryProcPtr) (void *dst, FbBits value, int size); 380typedef void (*SetupWrapProcPtr) (ReadMemoryProcPtr * pRead, 381 WriteMemoryProcPtr * pWrite, 382 DrawablePtr pDraw); 383typedef 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 402extern _X_EXPORT DevPrivateKey 403fbGetScreenPrivateKey(void); 404 405/* private field of a screen */ 406typedef 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 */ 419typedef 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 */ 512extern _X_EXPORT Bool 513fbAllocatePrivates(ScreenPtr pScreen); 514 515/* 516 * fbarc.c 517 */ 518 519extern _X_EXPORT void 520fbPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs); 521 522/* 523 * fbbits.c 524 */ 525 526extern _X_EXPORT void 527 528fbBresSolid8(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 535extern _X_EXPORT void 536 537fbBresDash8(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 543extern _X_EXPORT void 544 545fbDots8(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 553extern _X_EXPORT void 554 555fbArc8(FbBits * dst, 556 FbStride dstStride, 557 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor); 558 559extern _X_EXPORT void 560 561fbGlyph8(FbBits * dstLine, 562 FbStride dstStride, 563 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift); 564 565extern _X_EXPORT void 566 567fbPolyline8(DrawablePtr pDrawable, 568 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig); 569 570extern _X_EXPORT void 571 fbPolySegment8(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); 572 573extern _X_EXPORT void 574 575fbBresSolid16(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 582extern _X_EXPORT void 583 584fbBresDash16(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 591extern _X_EXPORT void 592 593fbDots16(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 601extern _X_EXPORT void 602 603fbArc16(FbBits * dst, 604 FbStride dstStride, 605 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor); 606 607extern _X_EXPORT void 608 609fbGlyph16(FbBits * dstLine, 610 FbStride dstStride, 611 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift); 612 613extern _X_EXPORT void 614 615fbPolyline16(DrawablePtr pDrawable, 616 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig); 617 618extern _X_EXPORT void 619 fbPolySegment16(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); 620 621extern _X_EXPORT void 622 623fbBresSolid32(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 630extern _X_EXPORT void 631 632fbBresDash32(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 639extern _X_EXPORT void 640 641fbDots32(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 649extern _X_EXPORT void 650 651fbArc32(FbBits * dst, 652 FbStride dstStride, 653 int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor); 654 655extern _X_EXPORT void 656 657fbGlyph32(FbBits * dstLine, 658 FbStride dstStride, 659 int dstBpp, FbStip * stipple, FbBits fg, int height, int shift); 660extern _X_EXPORT void 661 662fbPolyline32(DrawablePtr pDrawable, 663 GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig); 664 665extern _X_EXPORT void 666 fbPolySegment32(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); 667 668/* 669 * fbblt.c 670 */ 671extern _X_EXPORT void 672 673fbBlt(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 682extern _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 */ 690extern _X_EXPORT void 691 692fbBltOne(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 702extern _X_EXPORT void 703 704fbBltPlane(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 */ 719extern _X_EXPORT int 720 fbListInstalledColormaps(ScreenPtr pScreen, Colormap * pmaps); 721 722extern _X_EXPORT void 723 fbInstallColormap(ColormapPtr pmap); 724 725extern _X_EXPORT void 726 fbUninstallColormap(ColormapPtr pmap); 727 728extern _X_EXPORT void 729 730fbResolveColor(unsigned short *pred, 731 unsigned short *pgreen, 732 unsigned short *pblue, VisualPtr pVisual); 733 734extern _X_EXPORT Bool 735 fbInitializeColormap(ColormapPtr pmap); 736 737extern _X_EXPORT Bool 738 mfbCreateColormap(ColormapPtr pmap); 739 740extern _X_EXPORT int 741 742fbExpandDirectColors(ColormapPtr pmap, 743 int ndef, xColorItem * indefs, xColorItem * outdefs); 744 745extern _X_EXPORT Bool 746 fbCreateDefColormap(ScreenPtr pScreen); 747 748extern _X_EXPORT void 749 fbClearVisualTypes(void); 750 751extern _X_EXPORT Bool 752 fbSetVisualTypes(int depth, int visuals, int bitsPerRGB); 753 754extern _X_EXPORT Bool 755fbSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB, 756 Pixel redMask, Pixel greenMask, Pixel blueMask); 757 758extern _X_EXPORT Bool 759 760fbInitVisuals(VisualPtr * visualp, 761 DepthPtr * depthp, 762 int *nvisualp, 763 int *ndepthp, 764 int *rootDepthp, 765 VisualID * defaultVisp, unsigned long sizes, int bitsPerRGB); 766 767/* 768 * fbcopy.c 769 */ 770 771extern _X_EXPORT void 772 773fbCopyNtoN(DrawablePtr pSrcDrawable, 774 DrawablePtr pDstDrawable, 775 GCPtr pGC, 776 BoxPtr pbox, 777 int nbox, 778 int dx, 779 int dy, 780 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); 781 782extern _X_EXPORT void 783 784fbCopy1toN(DrawablePtr pSrcDrawable, 785 DrawablePtr pDstDrawable, 786 GCPtr pGC, 787 BoxPtr pbox, 788 int nbox, 789 int dx, 790 int dy, 791 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); 792 793extern _X_EXPORT void 794 795fbCopyNto1(DrawablePtr pSrcDrawable, 796 DrawablePtr pDstDrawable, 797 GCPtr pGC, 798 BoxPtr pbox, 799 int nbox, 800 int dx, 801 int dy, 802 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); 803 804extern _X_EXPORT RegionPtr 805 806fbCopyArea(DrawablePtr pSrcDrawable, 807 DrawablePtr pDstDrawable, 808 GCPtr pGC, 809 int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut); 810 811extern _X_EXPORT RegionPtr 812 813fbCopyPlane(DrawablePtr pSrcDrawable, 814 DrawablePtr pDstDrawable, 815 GCPtr pGC, 816 int xIn, 817 int yIn, 818 int widthSrc, 819 int heightSrc, int xOut, int yOut, unsigned long bitplane); 820 821/* 822 * fbfill.c 823 */ 824extern _X_EXPORT void 825 fbFill(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int width, int height); 826 827extern _X_EXPORT void 828 829fbSolidBoxClipped(DrawablePtr pDrawable, 830 RegionPtr pClip, 831 int xa, int ya, int xb, int yb, FbBits and, FbBits xor); 832 833/* 834 * fbfillrect.c 835 */ 836extern _X_EXPORT void 837 838fbPolyFillRect(DrawablePtr pDrawable, 839 GCPtr pGC, int nrectInit, xRectangle *prectInit); 840 841#define fbPolyFillArc miPolyFillArc 842 843#define fbFillPolygon miFillPolygon 844 845/* 846 * fbfillsp.c 847 */ 848extern _X_EXPORT void 849 850fbFillSpans(DrawablePtr pDrawable, 851 GCPtr pGC, 852 int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted); 853 854/* 855 * fbgc.c 856 */ 857 858extern _X_EXPORT Bool 859 fbCreateGC(GCPtr pGC); 860 861extern _X_EXPORT void 862 fbPadPixmap(PixmapPtr pPixmap); 863 864extern _X_EXPORT void 865 fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); 866 867/* 868 * fbgetsp.c 869 */ 870extern _X_EXPORT void 871 872fbGetSpans(DrawablePtr pDrawable, 873 int wMax, 874 DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart); 875 876/* 877 * fbglyph.c 878 */ 879 880extern _X_EXPORT void 881 882fbPolyGlyphBlt(DrawablePtr pDrawable, 883 GCPtr pGC, 884 int x, 885 int y, 886 unsigned int nglyph, CharInfoPtr * ppci, void *pglyphBase); 887 888extern _X_EXPORT void 889 890fbImageGlyphBlt(DrawablePtr pDrawable, 891 GCPtr pGC, 892 int x, 893 int y, 894 unsigned int nglyph, CharInfoPtr * ppci, void *pglyphBase); 895 896/* 897 * fbimage.c 898 */ 899 900extern _X_EXPORT void 901 902fbPutImage(DrawablePtr pDrawable, 903 GCPtr pGC, 904 int depth, 905 int x, int y, int w, int h, int leftPad, int format, char *pImage); 906 907extern _X_EXPORT void 908 909fbPutZImage(DrawablePtr pDrawable, 910 RegionPtr pClip, 911 int alu, 912 FbBits pm, 913 int x, 914 int y, int width, int height, FbStip * src, FbStride srcStride); 915 916extern _X_EXPORT void 917 918fbPutXYImage(DrawablePtr pDrawable, 919 RegionPtr pClip, 920 FbBits fg, 921 FbBits bg, 922 FbBits pm, 923 int alu, 924 Bool opaque, 925 int x, 926 int y, 927 int width, int height, FbStip * src, FbStride srcStride, int srcX); 928 929extern _X_EXPORT void 930 931fbGetImage(DrawablePtr pDrawable, 932 int x, 933 int y, 934 int w, int h, unsigned int format, unsigned long planeMask, char *d); 935/* 936 * fbline.c 937 */ 938 939extern _X_EXPORT void 940fbPolyLine(DrawablePtr pDrawable, 941 GCPtr pGC, int mode, int npt, DDXPointPtr ppt); 942 943extern _X_EXPORT void 944 fbFixCoordModePrevious(int npt, DDXPointPtr ppt); 945 946extern _X_EXPORT void 947 fbPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); 948 949#define fbPolyRectangle miPolyRectangle 950 951/* 952 * fbpict.c 953 */ 954 955extern _X_EXPORT Bool 956 fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); 957 958extern _X_EXPORT void 959fbDestroyGlyphCache(void); 960 961/* 962 * fbpixmap.c 963 */ 964 965extern _X_EXPORT PixmapPtr 966fbCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, 967 unsigned usage_hint); 968 969extern _X_EXPORT Bool 970 fbDestroyPixmap(PixmapPtr pPixmap); 971 972extern _X_EXPORT RegionPtr 973 fbPixmapToRegion(PixmapPtr pPix); 974 975/* 976 * fbpoint.c 977 */ 978 979extern _X_EXPORT void 980 981fbPolyPoint(DrawablePtr pDrawable, 982 GCPtr pGC, int mode, int npt, xPoint * pptInit); 983 984/* 985 * fbpush.c 986 */ 987 988extern _X_EXPORT void 989 990fbPushImage(DrawablePtr pDrawable, 991 GCPtr pGC, 992 FbStip * src, 993 FbStride srcStride, int srcX, int x, int y, int width, int height); 994 995extern _X_EXPORT void 996 997fbPushPixels(GCPtr pGC, 998 PixmapPtr pBitmap, 999 DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg); 1000 1001/* 1002 * fbscreen.c 1003 */ 1004 1005extern _X_EXPORT Bool 1006 fbCloseScreen(ScreenPtr pScreen); 1007 1008extern _X_EXPORT Bool 1009 fbRealizeFont(ScreenPtr pScreen, FontPtr pFont); 1010 1011extern _X_EXPORT Bool 1012 fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont); 1013 1014extern _X_EXPORT void 1015 1016fbQueryBestSize(int class, 1017 unsigned short *width, unsigned short *height, 1018 ScreenPtr pScreen); 1019 1020extern _X_EXPORT PixmapPtr 1021 _fbGetWindowPixmap(WindowPtr pWindow); 1022 1023extern _X_EXPORT void 1024 _fbSetWindowPixmap(WindowPtr pWindow, PixmapPtr pPixmap); 1025 1026extern _X_EXPORT Bool 1027 fbSetupScreen(ScreenPtr pScreen, void *pbits, /* pointer to screen bitmap */ 1028 int xsize, /* in pixels */ 1029 int ysize, int dpix, /* dots per inch */ 1030 int dpiy, int width, /* pixel width of frame buffer */ 1031 int bpp); /* bits per pixel of frame buffer */ 1032 1033#ifdef FB_ACCESS_WRAPPER 1034extern _X_EXPORT Bool 1035wfbFinishScreenInit(ScreenPtr pScreen, 1036 void *pbits, 1037 int xsize, 1038 int ysize, 1039 int dpix, 1040 int dpiy, 1041 int width, 1042 int bpp, 1043 SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap); 1044 1045extern _X_EXPORT Bool 1046wfbScreenInit(ScreenPtr pScreen, 1047 void *pbits, 1048 int xsize, 1049 int ysize, 1050 int dpix, 1051 int dpiy, 1052 int width, 1053 int bpp, 1054 SetupWrapProcPtr setupWrap, FinishWrapProcPtr finishWrap); 1055#endif 1056 1057extern _X_EXPORT Bool 1058fbFinishScreenInit(ScreenPtr pScreen, 1059 void *pbits, 1060 int xsize, 1061 int ysize, int dpix, int dpiy, int width, int bpp); 1062 1063extern _X_EXPORT Bool 1064 1065fbScreenInit(ScreenPtr pScreen, 1066 void *pbits, 1067 int xsize, int ysize, int dpix, int dpiy, int width, int bpp); 1068 1069/* 1070 * fbseg.c 1071 */ 1072typedef void FbBres(DrawablePtr pDrawable, 1073 GCPtr pGC, 1074 int dashOffset, 1075 int signdx, 1076 int signdy, 1077 int axis, int x, int y, int e, int e1, int e3, int len); 1078 1079extern _X_EXPORT void 1080fbSegment(DrawablePtr pDrawable, 1081 GCPtr pGC, 1082 int xa, int ya, int xb, int yb, Bool drawLast, int *dashOffset); 1083 1084/* 1085 * fbsetsp.c 1086 */ 1087 1088extern _X_EXPORT void 1089fbSetSpans(DrawablePtr pDrawable, 1090 GCPtr pGC, 1091 char *src, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted); 1092 1093/* 1094 * fbsolid.c 1095 */ 1096 1097extern _X_EXPORT void 1098 1099fbSolid(FbBits * dst, 1100 FbStride dstStride, 1101 int dstX, int bpp, int width, int height, FbBits and, FbBits xor); 1102 1103/* 1104 * fbutil.c 1105 */ 1106extern _X_EXPORT FbBits fbReplicatePixel(Pixel p, int bpp); 1107 1108#ifdef FB_ACCESS_WRAPPER 1109extern _X_EXPORT ReadMemoryProcPtr wfbReadMemory; 1110extern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory; 1111#endif 1112 1113/* 1114 * fbtile.c 1115 */ 1116 1117extern _X_EXPORT void 1118 1119fbEvenTile(FbBits * dst, 1120 FbStride dstStride, 1121 int dstX, 1122 int width, 1123 int height, 1124 FbBits * tile, 1125 FbStride tileStride, 1126 int tileHeight, int alu, FbBits pm, int xRot, int yRot); 1127 1128extern _X_EXPORT void 1129 1130fbOddTile(FbBits * dst, 1131 FbStride dstStride, 1132 int dstX, 1133 int width, 1134 int height, 1135 FbBits * tile, 1136 FbStride tileStride, 1137 int tileWidth, 1138 int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot); 1139 1140extern _X_EXPORT void 1141 1142fbTile(FbBits * dst, 1143 FbStride dstStride, 1144 int dstX, 1145 int width, 1146 int height, 1147 FbBits * tile, 1148 FbStride tileStride, 1149 int tileWidth, 1150 int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot); 1151 1152/* 1153 * fbwindow.c 1154 */ 1155 1156extern _X_EXPORT Bool 1157 fbCreateWindow(WindowPtr pWin); 1158 1159extern _X_EXPORT Bool 1160 fbDestroyWindow(WindowPtr pWin); 1161 1162extern _X_EXPORT Bool 1163 fbRealizeWindow(WindowPtr pWindow); 1164 1165extern _X_EXPORT Bool 1166 fbPositionWindow(WindowPtr pWin, int x, int y); 1167 1168extern _X_EXPORT Bool 1169 fbUnrealizeWindow(WindowPtr pWindow); 1170 1171extern _X_EXPORT void 1172 1173fbCopyWindowProc(DrawablePtr pSrcDrawable, 1174 DrawablePtr pDstDrawable, 1175 GCPtr pGC, 1176 BoxPtr pbox, 1177 int nbox, 1178 int dx, 1179 int dy, 1180 Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); 1181 1182extern _X_EXPORT void 1183 fbCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); 1184 1185extern _X_EXPORT Bool 1186 fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask); 1187 1188extern _X_EXPORT void 1189 1190fbFillRegionSolid(DrawablePtr pDrawable, 1191 RegionPtr pRegion, FbBits and, FbBits xor); 1192 1193extern _X_EXPORT pixman_image_t *image_from_pict(PicturePtr pict, 1194 Bool has_clip, 1195 int *xoff, int *yoff); 1196 1197extern _X_EXPORT void free_pixman_pict(PicturePtr, pixman_image_t *); 1198 1199#endif /* _FB_H_ */ 1200