fb.h revision 6747b715
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 25#ifndef _FB_H_ 26#define _FB_H_ 27 28#include <X11/X.h> 29#include <pixman.h> 30 31#include "scrnintstr.h" 32#include "pixmap.h" 33#include "pixmapstr.h" 34#include "region.h" 35#include "gcstruct.h" 36#include "colormap.h" 37#include "miscstruct.h" 38#include "servermd.h" 39#include "windowstr.h" 40#include "privates.h" 41#include "mi.h" 42#include "migc.h" 43#include "mibstore.h" 44#include "picturestr.h" 45 46#ifdef FB_ACCESS_WRAPPER 47 48#include "wfbrename.h" 49#define FBPREFIX(x) wfb##x 50#define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr)))) 51#define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr)))) 52 53#define MEMCPY_WRAPPED(dst, src, size) do { \ 54 size_t _i; \ 55 CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src); \ 56 for(_i = 0; _i < size; _i++) { \ 57 WRITE(_dst +_i, READ(_src + _i)); \ 58 } \ 59} while(0) 60 61#define MEMSET_WRAPPED(dst, val, size) do { \ 62 size_t _i; \ 63 CARD8 *_dst = (CARD8*)(dst); \ 64 for(_i = 0; _i < size; _i++) { \ 65 WRITE(_dst +_i, (val)); \ 66 } \ 67} while(0) 68 69#else 70 71#define FBPREFIX(x) fb##x 72#define WRITE(ptr, val) (*(ptr) = (val)) 73#define READ(ptr) (*(ptr)) 74#define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size)) 75#define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size)) 76 77#endif 78 79/* 80 * This single define controls the basic size of data manipulated 81 * by this software; it must be log2(sizeof (FbBits) * 8) 82 */ 83 84#ifndef FB_SHIFT 85#define FB_SHIFT LOG2_BITMAP_PAD 86#endif 87 88#if FB_SHIFT < LOG2_BITMAP_PAD 89 error FB_SHIFT must be >= LOG2_BITMAP_PAD 90#endif 91 92#define FB_UNIT (1 << FB_SHIFT) 93#define FB_HALFUNIT (1 << (FB_SHIFT-1)) 94#define FB_MASK (FB_UNIT - 1) 95#define FB_ALLONES ((FbBits) -1) 96 97#if GLYPHPADBYTES != 4 98#error "GLYPHPADBYTES must be 4" 99#endif 100/* whether to bother to include 24bpp support */ 101#ifndef FBNO24BIT 102#define FB_24BIT 103#endif 104 105/* 106 * Unless otherwise instructed, fb includes code to advertise 24bpp 107 * windows with 32bpp image format for application compatibility 108 */ 109 110#ifdef FB_24BIT 111#ifndef FBNO24_32 112#define FB_24_32BIT 113#endif 114#endif 115 116#define FB_STIP_SHIFT LOG2_BITMAP_PAD 117#define FB_STIP_UNIT (1 << FB_STIP_SHIFT) 118#define FB_STIP_MASK (FB_STIP_UNIT - 1) 119#define FB_STIP_ALLONES ((FbStip) -1) 120 121#define FB_STIP_ODDSTRIDE(s) (((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0) 122#define FB_STIP_ODDPTR(p) ((((long) (p)) & (FB_MASK >> 3)) != 0) 123 124#define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT))) 125#define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT))) 126 127#define FbFullMask(n) ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1)) 128 129#if FB_SHIFT == 6 130# ifdef WIN32 131typedef unsigned __int64 FbBits; 132# else 133# if defined(__alpha__) || defined(__alpha) || \ 134 defined(ia64) || defined(__ia64__) || \ 135 defined(__sparc64__) || defined(_LP64) || \ 136 defined(__s390x__) || \ 137 defined(amd64) || defined (__amd64__) || \ 138 defined (__powerpc64__) 139typedef unsigned long FbBits; 140# else 141typedef unsigned long long FbBits; 142# endif 143# endif 144#endif 145 146#if FB_SHIFT == 5 147typedef CARD32 FbBits; 148#endif 149 150#if FB_SHIFT == 4 151typedef CARD16 FbBits; 152#endif 153 154#if LOG2_BITMAP_PAD == FB_SHIFT 155typedef FbBits FbStip; 156#else 157# if LOG2_BITMAP_PAD == 5 158typedef CARD32 FbStip; 159# endif 160#endif 161 162typedef int FbStride; 163 164 165#ifdef FB_DEBUG 166extern _X_EXPORT void fbValidateDrawable(DrawablePtr d); 167extern _X_EXPORT void fbInitializeDrawable(DrawablePtr d); 168extern _X_EXPORT void fbSetBits (FbStip *bits, int stride, FbStip data); 169#define FB_HEAD_BITS (FbStip) (0xbaadf00d) 170#define FB_TAIL_BITS (FbStip) (0xbaddf0ad) 171#else 172#define fbValidateDrawable(d) 173#define fdInitializeDrawable(d) 174#endif 175 176#include "fbrop.h" 177 178#if BITMAP_BIT_ORDER == LSBFirst 179#define FbScrLeft(x,n) ((x) >> (n)) 180#define FbScrRight(x,n) ((x) << (n)) 181/* #define FbLeftBits(x,n) ((x) & ((((FbBits) 1) << (n)) - 1)) */ 182#define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1)) 183#define FbStipMoveLsb(x,s,n) (FbStipRight (x,(s)-(n))) 184#define FbPatternOffsetBits 0 185#else 186#define FbScrLeft(x,n) ((x) << (n)) 187#define FbScrRight(x,n) ((x) >> (n)) 188/* #define FbLeftBits(x,n) ((x) >> (FB_UNIT - (n))) */ 189#define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n))) 190#define FbStipMoveLsb(x,s,n) (x) 191#define FbPatternOffsetBits (sizeof (FbBits) - 1) 192#endif 193 194#include "micoord.h" 195 196#define FbStipLeft(x,n) FbScrLeft(x,n) 197#define FbStipRight(x,n) FbScrRight(x,n) 198 199#define FbRotLeft(x,n) FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0) 200#define FbRotRight(x,n) FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0) 201 202#define FbRotStipLeft(x,n) FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0) 203#define FbRotStipRight(x,n) FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0) 204 205#define FbLeftMask(x) ( ((x) & FB_MASK) ? \ 206 FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0) 207#define FbRightMask(x) ( ((FB_UNIT - (x)) & FB_MASK) ? \ 208 FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0) 209 210#define FbLeftStipMask(x) ( ((x) & FB_STIP_MASK) ? \ 211 FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0) 212#define FbRightStipMask(x) ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \ 213 FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0) 214 215#define FbBitsMask(x,w) (FbScrRight(FB_ALLONES,(x) & FB_MASK) & \ 216 FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK)) 217 218#define FbStipMask(x,w) (FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \ 219 FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK)) 220 221 222#define FbMaskBits(x,w,l,n,r) { \ 223 n = (w); \ 224 r = FbRightMask((x)+n); \ 225 l = FbLeftMask(x); \ 226 if (l) { \ 227 n -= FB_UNIT - ((x) & FB_MASK); \ 228 if (n < 0) { \ 229 n = 0; \ 230 l &= r; \ 231 r = 0; \ 232 } \ 233 } \ 234 n >>= FB_SHIFT; \ 235} 236 237#ifdef FBNOPIXADDR 238#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) FbMaskBits(x,w,l,n,r) 239#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \ 240 *dst = FbDoMaskRRop(*dst,and,xor,l); \ 241} 242#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \ 243 *dst = FbDoMaskRRop(*dst,and,xor,r); \ 244} 245#else 246 247#define FbByteMaskInvalid 0x10 248 249#define FbPatternOffset(o,t) ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1))) 250 251#define FbPtrOffset(p,o,t) ((t *) ((CARD8 *) (p) + (o))) 252#define FbSelectPatternPart(xor,o,t) ((xor) >> (FbPatternOffset (o,t) << 3)) 253#define FbStorePart(dst,off,t,xor) (WRITE(FbPtrOffset(dst,off,t), \ 254 FbSelectPart(xor,off,t))) 255#ifndef FbSelectPart 256#define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t) 257#endif 258 259#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \ 260 n = (w); \ 261 lb = 0; \ 262 rb = 0; \ 263 r = FbRightMask((x)+n); \ 264 if (r) { \ 265 /* compute right byte length */ \ 266 if ((copy) && (((x) + n) & 7) == 0) { \ 267 rb = (((x) + n) & FB_MASK) >> 3; \ 268 } else { \ 269 rb = FbByteMaskInvalid; \ 270 } \ 271 } \ 272 l = FbLeftMask(x); \ 273 if (l) { \ 274 /* compute left byte length */ \ 275 if ((copy) && ((x) & 7) == 0) { \ 276 lb = ((x) & FB_MASK) >> 3; \ 277 } else { \ 278 lb = FbByteMaskInvalid; \ 279 } \ 280 /* subtract out the portion painted by leftMask */ \ 281 n -= FB_UNIT - ((x) & FB_MASK); \ 282 if (n < 0) { \ 283 if (lb != FbByteMaskInvalid) { \ 284 if (rb == FbByteMaskInvalid) { \ 285 lb = FbByteMaskInvalid; \ 286 } else if (rb) { \ 287 lb |= (rb - lb) << (FB_SHIFT - 3); \ 288 rb = 0; \ 289 } \ 290 } \ 291 n = 0; \ 292 l &= r; \ 293 r = 0; \ 294 }\ 295 } \ 296 n >>= FB_SHIFT; \ 297} 298 299#if FB_SHIFT == 6 300#define FbDoLeftMaskByteRRop6Cases(dst,xor) \ 301 case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \ 302 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 303 break; \ 304 case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \ 305 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 306 FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \ 307 break; \ 308 case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \ 309 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 310 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 311 break; \ 312 case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \ 313 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 314 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 315 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 316 break; \ 317 case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \ 318 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 319 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 320 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 321 break; \ 322 case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \ 323 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 324 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 325 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 326 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 327 break; \ 328 case (sizeof (FbBits) - 7): \ 329 FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 330 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 331 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 332 break; \ 333 case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \ 334 FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \ 335 break; \ 336 case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \ 337 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 338 break; \ 339 case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \ 340 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 341 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 342 break; \ 343 case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \ 344 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 345 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 346 break; \ 347 case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \ 348 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 349 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 350 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 351 break; \ 352 case (sizeof (FbBits) - 6): \ 353 FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 354 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 355 break; \ 356 case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \ 357 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 358 break; \ 359 case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \ 360 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 361 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 362 break; \ 363 case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \ 364 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 365 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 366 break; \ 367 case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \ 368 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 369 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 370 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 371 break; \ 372 case (sizeof (FbBits) - 5): \ 373 FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 374 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 375 break; \ 376 case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \ 377 FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 378 break; \ 379 case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \ 380 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 381 break; \ 382 case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \ 383 FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 384 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 385 break; \ 386 case (sizeof (FbBits) - 4): \ 387 FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 388 break; 389 390#define FbDoRightMaskByteRRop6Cases(dst,xor) \ 391 case 4: \ 392 FbStorePart(dst,0,CARD32,xor); \ 393 break; \ 394 case 5: \ 395 FbStorePart(dst,0,CARD32,xor); \ 396 FbStorePart(dst,4,CARD8,xor); \ 397 break; \ 398 case 6: \ 399 FbStorePart(dst,0,CARD32,xor); \ 400 FbStorePart(dst,4,CARD16,xor); \ 401 break; \ 402 case 7: \ 403 FbStorePart(dst,0,CARD32,xor); \ 404 FbStorePart(dst,4,CARD16,xor); \ 405 FbStorePart(dst,6,CARD8,xor); \ 406 break; 407#else 408#define FbDoLeftMaskByteRRop6Cases(dst,xor) 409#define FbDoRightMaskByteRRop6Cases(dst,xor) 410#endif 411 412#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \ 413 switch (lb) { \ 414 FbDoLeftMaskByteRRop6Cases(dst,xor) \ 415 case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \ 416 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ 417 break; \ 418 case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \ 419 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ 420 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 421 break; \ 422 case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \ 423 FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 424 break; \ 425 case sizeof (FbBits) - 3: \ 426 FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ 427 case sizeof (FbBits) - 2: \ 428 FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \ 429 break; \ 430 case sizeof (FbBits) - 1: \ 431 FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \ 432 break; \ 433 default: \ 434 WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \ 435 break; \ 436 } \ 437} 438 439 440#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \ 441 switch (rb) { \ 442 case 1: \ 443 FbStorePart(dst,0,CARD8,xor); \ 444 break; \ 445 case 2: \ 446 FbStorePart(dst,0,CARD16,xor); \ 447 break; \ 448 case 3: \ 449 FbStorePart(dst,0,CARD16,xor); \ 450 FbStorePart(dst,2,CARD8,xor); \ 451 break; \ 452 FbDoRightMaskByteRRop6Cases(dst,xor) \ 453 default: \ 454 WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \ 455 } \ 456} 457#endif 458 459#define FbMaskStip(x,w,l,n,r) { \ 460 n = (w); \ 461 r = FbRightStipMask((x)+n); \ 462 l = FbLeftStipMask(x); \ 463 if (l) { \ 464 n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \ 465 if (n < 0) { \ 466 n = 0; \ 467 l &= r; \ 468 r = 0; \ 469 } \ 470 } \ 471 n >>= FB_STIP_SHIFT; \ 472} 473 474/* 475 * These macros are used to transparently stipple 476 * in copy mode; the expected usage is with 'n' constant 477 * so all of the conditional parts collapse into a minimal 478 * sequence of partial word writes 479 * 480 * 'n' is the bytemask of which bytes to store, 'a' is the address 481 * of the FbBits base unit, 'o' is the offset within that unit 482 * 483 * The term "lane" comes from the hardware term "byte-lane" which 484 */ 485 486#define FbLaneCase1(n,a,o) \ 487 if ((n) == 0x01) { \ 488 WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor); \ 489 } 490 491#define FbLaneCase2(n,a,o) \ 492 if ((n) == 0x03) { \ 493 WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor); \ 494 } else { \ 495 FbLaneCase1((n)&1,a,o) \ 496 FbLaneCase1((n)>>1,a,(o)+1) \ 497 } 498 499#define FbLaneCase4(n,a,o) \ 500 if ((n) == 0x0f) { \ 501 WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor); \ 502 } else { \ 503 FbLaneCase2((n)&3,a,o) \ 504 FbLaneCase2((n)>>2,a,(o)+2) \ 505 } 506 507#define FbLaneCase8(n,a,o) \ 508 if ((n) == 0x0ff) { \ 509 *(FbBits *) ((a)+(o)) = fgxor; \ 510 } else { \ 511 FbLaneCase4((n)&15,a,o) \ 512 FbLaneCase4((n)>>4,a,(o)+4) \ 513 } 514 515#if FB_SHIFT == 6 516#define FbLaneCase(n,a) FbLaneCase8(n,(CARD8 *) (a),0) 517#endif 518 519#if FB_SHIFT == 5 520#define FbLaneCase(n,a) FbLaneCase4(n,(CARD8 *) (a),0) 521#endif 522 523/* Rotate a filled pixel value to the specified alignement */ 524#define FbRot24(p,b) (FbScrRight(p,b) | FbScrLeft(p,24-(b))) 525#define FbRot24Stip(p,b) (FbStipRight(p,b) | FbStipLeft(p,24-(b))) 526 527/* step a filled pixel value to the next/previous FB_UNIT alignment */ 528#define FbNext24Pix(p) (FbRot24(p,(24-FB_UNIT%24))) 529#define FbPrev24Pix(p) (FbRot24(p,FB_UNIT%24)) 530#define FbNext24Stip(p) (FbRot24(p,(24-FB_STIP_UNIT%24))) 531#define FbPrev24Stip(p) (FbRot24(p,FB_STIP_UNIT%24)) 532 533/* step a rotation value to the next/previous rotation value */ 534#if FB_UNIT == 64 535#define FbNext24Rot(r) ((r) == 16 ? 0 : (r) + 8) 536#define FbPrev24Rot(r) ((r) == 0 ? 16 : (r) - 8) 537 538#if IMAGE_BYTE_ORDER == MSBFirst 539#define FbFirst24Rot(x) (((x) + 8) % 24) 540#else 541#define FbFirst24Rot(x) ((x) % 24) 542#endif 543 544#endif 545 546#if FB_UNIT == 32 547#define FbNext24Rot(r) ((r) == 0 ? 16 : (r) - 8) 548#define FbPrev24Rot(r) ((r) == 16 ? 0 : (r) + 8) 549 550#if IMAGE_BYTE_ORDER == MSBFirst 551#define FbFirst24Rot(x) (((x) + 16) % 24) 552#else 553#define FbFirst24Rot(x) ((x) % 24) 554#endif 555#endif 556 557#define FbNext24RotStip(r) ((r) == 0 ? 16 : (r) - 8) 558#define FbPrev24RotStip(r) ((r) == 16 ? 0 : (r) + 8) 559 560/* Whether 24-bit specific code is needed for this filled pixel value */ 561#define FbCheck24Pix(p) ((p) == FbNext24Pix(p)) 562 563/* Macros for dealing with dashing */ 564 565#define FbDashDeclare \ 566 unsigned char *__dash, *__firstDash, *__lastDash 567 568#define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) { \ 569 (even) = TRUE; \ 570 __firstDash = (pGC)->dash; \ 571 __lastDash = __firstDash + (pGC)->numInDashList; \ 572 (dashOffset) %= (pPriv)->dashLength; \ 573 \ 574 __dash = __firstDash; \ 575 while ((dashOffset) >= ((dashlen) = *__dash)) \ 576 { \ 577 (dashOffset) -= (dashlen); \ 578 (even) = 1-(even); \ 579 if (++__dash == __lastDash) \ 580 __dash = __firstDash; \ 581 } \ 582 (dashlen) -= (dashOffset); \ 583} 584 585#define FbDashNext(dashlen) { \ 586 if (++__dash == __lastDash) \ 587 __dash = __firstDash; \ 588 (dashlen) = *__dash; \ 589} 590 591/* as numInDashList is always even, this case can skip a test */ 592 593#define FbDashNextEven(dashlen) { \ 594 (dashlen) = *++__dash; \ 595} 596 597#define FbDashNextOdd(dashlen) FbDashNext(dashlen) 598 599#define FbDashStep(dashlen,even) { \ 600 if (!--(dashlen)) { \ 601 FbDashNext(dashlen); \ 602 (even) = 1-(even); \ 603 } \ 604} 605 606extern _X_EXPORT DevPrivateKey 607fbGetGCPrivateKey (void); 608 609extern _X_EXPORT DevPrivateKey 610fbGetWinPrivateKey (void); 611 612extern _X_EXPORT const GCOps fbGCOps; 613extern _X_EXPORT const GCFuncs fbGCFuncs; 614 615#ifdef FB_24_32BIT 616#define FB_SCREEN_PRIVATE 617#endif 618 619/* Framebuffer access wrapper */ 620typedef FbBits (*ReadMemoryProcPtr)(const void *src, int size); 621typedef void (*WriteMemoryProcPtr)(void *dst, FbBits value, int size); 622typedef void (*SetupWrapProcPtr)(ReadMemoryProcPtr *pRead, 623 WriteMemoryProcPtr *pWrite, 624 DrawablePtr pDraw); 625typedef void (*FinishWrapProcPtr)(DrawablePtr pDraw); 626 627#ifdef FB_ACCESS_WRAPPER 628 629#define fbPrepareAccess(pDraw) \ 630 fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \ 631 &wfbReadMemory, \ 632 &wfbWriteMemory, \ 633 (pDraw)) 634#define fbFinishAccess(pDraw) \ 635 fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw) 636 637#else 638 639#define fbPrepareAccess(pPix) 640#define fbFinishAccess(pDraw) 641 642#endif 643 644 645#ifdef FB_SCREEN_PRIVATE 646extern _X_EXPORT DevPrivateKey 647fbGetScreenPrivateKey(void); 648 649/* private field of a screen */ 650typedef struct { 651 unsigned char win32bpp; /* window bpp for 32-bpp images */ 652 unsigned char pix32bpp; /* pixmap bpp for 32-bpp images */ 653#ifdef FB_ACCESS_WRAPPER 654 SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */ 655 FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */ 656#endif 657} FbScreenPrivRec, *FbScreenPrivPtr; 658 659#define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \ 660 dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey())) 661#endif 662 663/* private field of GC */ 664typedef struct { 665 FbBits and, xor; /* reduced rop values */ 666 FbBits bgand, bgxor; /* for stipples */ 667 FbBits fg, bg, pm; /* expanded and filled */ 668 unsigned int dashLength; /* total of all dash elements */ 669 unsigned char oneRect; /* clip list is single rectangle */ 670 unsigned char evenStipple; /* stipple is even */ 671 unsigned char bpp; /* current drawable bpp */ 672} FbGCPrivRec, *FbGCPrivPtr; 673 674#define fbGetGCPrivate(pGC) ((FbGCPrivPtr)\ 675 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey())) 676 677#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip) 678#define fbGetExpose(pGC) ((pGC)->fExpose) 679#define fbGetFreeCompClip(pGC) ((pGC)->freeCompClip) 680#define fbGetRotatedPixmap(pGC) ((pGC)->pRotatedPixmap) 681 682#define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate) 683#define fbGetWindowPixmap(pWin) ((PixmapPtr)\ 684 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey())) 685 686#ifdef ROOTLESS 687#define __fbPixDrawableX(pPix) ((pPix)->drawable.x) 688#define __fbPixDrawableY(pPix) ((pPix)->drawable.y) 689#else 690#define __fbPixDrawableX(pPix) 0 691#define __fbPixDrawableY(pPix) 0 692#endif 693 694#ifdef COMPOSITE 695#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix) - (pPix)->screen_x) 696#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix) - (pPix)->screen_y) 697#else 698#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix)) 699#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix)) 700#endif 701#define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix)) 702#define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix)) 703 704#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) { \ 705 if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ 706 (pixmap) = fbGetWindowPixmap(pDrawable); \ 707 (xoff) = __fbPixOffXWin(pixmap); \ 708 (yoff) = __fbPixOffYWin(pixmap); \ 709 } else { \ 710 (pixmap) = (PixmapPtr) (pDrawable); \ 711 (xoff) = __fbPixOffXPix(pixmap); \ 712 (yoff) = __fbPixOffYPix(pixmap); \ 713 } \ 714 fbPrepareAccess(pDrawable); \ 715} 716 717#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) { \ 718 (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; \ 719 (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride); \ 720 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ 721} 722 723#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) { \ 724 (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; \ 725 (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride); \ 726 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ 727} 728 729#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ 730 PixmapPtr _pPix; \ 731 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ 732 fbGetPixmapBitsData(_pPix, pointer, stride, bpp); \ 733} 734 735#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ 736 PixmapPtr _pPix; \ 737 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ 738 fbGetPixmapStipData(_pPix, pointer, stride, bpp); \ 739} 740 741/* 742 * XFree86 empties the root BorderClip when the VT is inactive, 743 * here's a macro which uses that to disable GetImage and GetSpans 744 */ 745 746#define fbWindowEnabled(pWin) \ 747 RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip) 748 749#define fbDrawableEnabled(pDrawable) \ 750 ((pDrawable)->type == DRAWABLE_PIXMAP ? \ 751 TRUE : fbWindowEnabled((WindowPtr) pDrawable)) 752 753#define FbPowerOfTwo(w) (((w) & ((w) - 1)) == 0) 754/* 755 * Accelerated tiles are power of 2 width <= FB_UNIT 756 */ 757#define FbEvenTile(w) ((w) <= FB_UNIT && FbPowerOfTwo(w)) 758/* 759 * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp 760 * with dstBpp a power of 2 as well 761 */ 762#define FbEvenStip(w,bpp) ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp)) 763 764/* 765 * fb24_32.c 766 */ 767extern _X_EXPORT void 768fb24_32GetSpans(DrawablePtr pDrawable, 769 int wMax, 770 DDXPointPtr ppt, 771 int *pwidth, 772 int nspans, 773 char *pchardstStart); 774 775extern _X_EXPORT void 776fb24_32SetSpans (DrawablePtr pDrawable, 777 GCPtr pGC, 778 char *src, 779 DDXPointPtr ppt, 780 int *pwidth, 781 int nspans, 782 int fSorted); 783 784extern _X_EXPORT void 785fb24_32PutZImage (DrawablePtr pDrawable, 786 RegionPtr pClip, 787 int alu, 788 FbBits pm, 789 int x, 790 int y, 791 int width, 792 int height, 793 CARD8 *src, 794 FbStride srcStride); 795 796extern _X_EXPORT void 797fb24_32GetImage (DrawablePtr pDrawable, 798 int x, 799 int y, 800 int w, 801 int h, 802 unsigned int format, 803 unsigned long planeMask, 804 char *d); 805 806extern _X_EXPORT void 807fb24_32CopyMtoN (DrawablePtr pSrcDrawable, 808 DrawablePtr pDstDrawable, 809 GCPtr pGC, 810 BoxPtr pbox, 811 int nbox, 812 int dx, 813 int dy, 814 Bool reverse, 815 Bool upsidedown, 816 Pixel bitplane, 817 void *closure); 818 819extern _X_EXPORT PixmapPtr 820fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel); 821 822extern _X_EXPORT Bool 823fb24_32CreateScreenResources(ScreenPtr pScreen); 824 825extern _X_EXPORT Bool 826fb24_32ModifyPixmapHeader (PixmapPtr pPixmap, 827 int width, 828 int height, 829 int depth, 830 int bitsPerPixel, 831 int devKind, 832 pointer pPixData); 833 834/* 835 * fballpriv.c 836 */ 837extern _X_EXPORT Bool 838fbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCIndex); 839 840/* 841 * fbarc.c 842 */ 843 844extern _X_EXPORT void 845fbPolyArc (DrawablePtr pDrawable, 846 GCPtr pGC, 847 int narcs, 848 xArc *parcs); 849 850/* 851 * fbbits.c 852 */ 853 854extern _X_EXPORT void 855fbBresSolid8(DrawablePtr pDrawable, 856 GCPtr pGC, 857 int dashOffset, 858 int signdx, 859 int signdy, 860 int axis, 861 int x, 862 int y, 863 int e, 864 int e1, 865 int e3, 866 int len); 867 868extern _X_EXPORT void 869fbBresDash8 (DrawablePtr pDrawable, 870 GCPtr pGC, 871 int dashOffset, 872 int signdx, 873 int signdy, 874 int axis, 875 int x, 876 int y, 877 int e, 878 int e1, 879 int e3, 880 int len); 881 882extern _X_EXPORT void 883fbDots8 (FbBits *dst, 884 FbStride dstStride, 885 int dstBpp, 886 BoxPtr pBox, 887 xPoint *pts, 888 int npt, 889 int xorg, 890 int yorg, 891 int xoff, 892 int yoff, 893 FbBits and, 894 FbBits xor); 895 896extern _X_EXPORT void 897fbArc8 (FbBits *dst, 898 FbStride dstStride, 899 int dstBpp, 900 xArc *arc, 901 int dx, 902 int dy, 903 FbBits and, 904 FbBits xor); 905 906extern _X_EXPORT void 907fbGlyph8 (FbBits *dstLine, 908 FbStride dstStride, 909 int dstBpp, 910 FbStip *stipple, 911 FbBits fg, 912 int height, 913 int shift); 914 915extern _X_EXPORT void 916fbPolyline8 (DrawablePtr pDrawable, 917 GCPtr pGC, 918 int mode, 919 int npt, 920 DDXPointPtr ptsOrig); 921 922extern _X_EXPORT void 923fbPolySegment8 (DrawablePtr pDrawable, 924 GCPtr pGC, 925 int nseg, 926 xSegment *pseg); 927 928extern _X_EXPORT void 929fbBresSolid16(DrawablePtr pDrawable, 930 GCPtr pGC, 931 int dashOffset, 932 int signdx, 933 int signdy, 934 int axis, 935 int x, 936 int y, 937 int e, 938 int e1, 939 int e3, 940 int len); 941 942extern _X_EXPORT void 943fbBresDash16(DrawablePtr pDrawable, 944 GCPtr pGC, 945 int dashOffset, 946 int signdx, 947 int signdy, 948 int axis, 949 int x, 950 int y, 951 int e, 952 int e1, 953 int e3, 954 int len); 955 956extern _X_EXPORT void 957fbDots16(FbBits *dst, 958 FbStride dstStride, 959 int dstBpp, 960 BoxPtr pBox, 961 xPoint *pts, 962 int npt, 963 int xorg, 964 int yorg, 965 int xoff, 966 int yoff, 967 FbBits and, 968 FbBits xor); 969 970extern _X_EXPORT void 971fbArc16(FbBits *dst, 972 FbStride dstStride, 973 int dstBpp, 974 xArc *arc, 975 int dx, 976 int dy, 977 FbBits and, 978 FbBits xor); 979 980extern _X_EXPORT void 981fbGlyph16(FbBits *dstLine, 982 FbStride dstStride, 983 int dstBpp, 984 FbStip *stipple, 985 FbBits fg, 986 int height, 987 int shift); 988 989extern _X_EXPORT void 990fbPolyline16 (DrawablePtr pDrawable, 991 GCPtr pGC, 992 int mode, 993 int npt, 994 DDXPointPtr ptsOrig); 995 996extern _X_EXPORT void 997fbPolySegment16 (DrawablePtr pDrawable, 998 GCPtr pGC, 999 int nseg, 1000 xSegment *pseg); 1001 1002 1003extern _X_EXPORT void 1004fbBresSolid24(DrawablePtr pDrawable, 1005 GCPtr pGC, 1006 int dashOffset, 1007 int signdx, 1008 int signdy, 1009 int axis, 1010 int x, 1011 int y, 1012 int e, 1013 int e1, 1014 int e3, 1015 int len); 1016 1017extern _X_EXPORT void 1018fbBresDash24(DrawablePtr pDrawable, 1019 GCPtr pGC, 1020 int dashOffset, 1021 int signdx, 1022 int signdy, 1023 int axis, 1024 int x, 1025 int y, 1026 int e, 1027 int e1, 1028 int e3, 1029 int len); 1030 1031extern _X_EXPORT void 1032fbDots24(FbBits *dst, 1033 FbStride dstStride, 1034 int dstBpp, 1035 BoxPtr pBox, 1036 xPoint *pts, 1037 int npt, 1038 int xorg, 1039 int yorg, 1040 int xoff, 1041 int yoff, 1042 FbBits and, 1043 FbBits xor); 1044 1045extern _X_EXPORT void 1046fbArc24(FbBits *dst, 1047 FbStride dstStride, 1048 int dstBpp, 1049 xArc *arc, 1050 int dx, 1051 int dy, 1052 FbBits and, 1053 FbBits xor); 1054 1055extern _X_EXPORT void 1056fbGlyph24(FbBits *dstLine, 1057 FbStride dstStride, 1058 int dstBpp, 1059 FbStip *stipple, 1060 FbBits fg, 1061 int height, 1062 int shift); 1063 1064extern _X_EXPORT void 1065fbPolyline24 (DrawablePtr pDrawable, 1066 GCPtr pGC, 1067 int mode, 1068 int npt, 1069 DDXPointPtr ptsOrig); 1070 1071extern _X_EXPORT void 1072fbPolySegment24 (DrawablePtr pDrawable, 1073 GCPtr pGC, 1074 int nseg, 1075 xSegment *pseg); 1076 1077 1078extern _X_EXPORT void 1079fbBresSolid32(DrawablePtr pDrawable, 1080 GCPtr pGC, 1081 int dashOffset, 1082 int signdx, 1083 int signdy, 1084 int axis, 1085 int x, 1086 int y, 1087 int e, 1088 int e1, 1089 int e3, 1090 int len); 1091 1092extern _X_EXPORT void 1093fbBresDash32(DrawablePtr pDrawable, 1094 GCPtr pGC, 1095 int dashOffset, 1096 int signdx, 1097 int signdy, 1098 int axis, 1099 int x, 1100 int y, 1101 int e, 1102 int e1, 1103 int e3, 1104 int len); 1105 1106extern _X_EXPORT void 1107fbDots32(FbBits *dst, 1108 FbStride dstStride, 1109 int dstBpp, 1110 BoxPtr pBox, 1111 xPoint *pts, 1112 int npt, 1113 int xorg, 1114 int yorg, 1115 int xoff, 1116 int yoff, 1117 FbBits and, 1118 FbBits xor); 1119 1120extern _X_EXPORT void 1121fbArc32(FbBits *dst, 1122 FbStride dstStride, 1123 int dstBpp, 1124 xArc *arc, 1125 int dx, 1126 int dy, 1127 FbBits and, 1128 FbBits xor); 1129 1130extern _X_EXPORT void 1131fbGlyph32(FbBits *dstLine, 1132 FbStride dstStride, 1133 int dstBpp, 1134 FbStip *stipple, 1135 FbBits fg, 1136 int height, 1137 int shift); 1138extern _X_EXPORT void 1139fbPolyline32 (DrawablePtr pDrawable, 1140 GCPtr pGC, 1141 int mode, 1142 int npt, 1143 DDXPointPtr ptsOrig); 1144 1145extern _X_EXPORT void 1146fbPolySegment32 (DrawablePtr pDrawable, 1147 GCPtr pGC, 1148 int nseg, 1149 xSegment *pseg); 1150 1151/* 1152 * fbblt.c 1153 */ 1154extern _X_EXPORT void 1155fbBlt (FbBits *src, 1156 FbStride srcStride, 1157 int srcX, 1158 1159 FbBits *dst, 1160 FbStride dstStride, 1161 int dstX, 1162 1163 int width, 1164 int height, 1165 1166 int alu, 1167 FbBits pm, 1168 int bpp, 1169 1170 Bool reverse, 1171 Bool upsidedown); 1172 1173extern _X_EXPORT void 1174fbBlt24 (FbBits *srcLine, 1175 FbStride srcStride, 1176 int srcX, 1177 1178 FbBits *dstLine, 1179 FbStride dstStride, 1180 int dstX, 1181 1182 int width, 1183 int height, 1184 1185 int alu, 1186 FbBits pm, 1187 1188 Bool reverse, 1189 Bool upsidedown); 1190 1191extern _X_EXPORT void 1192fbBltStip (FbStip *src, 1193 FbStride srcStride, /* in FbStip units, not FbBits units */ 1194 int srcX, 1195 1196 FbStip *dst, 1197 FbStride dstStride, /* in FbStip units, not FbBits units */ 1198 int dstX, 1199 1200 int width, 1201 int height, 1202 1203 int alu, 1204 FbBits pm, 1205 int bpp); 1206 1207/* 1208 * fbbltone.c 1209 */ 1210extern _X_EXPORT void 1211fbBltOne (FbStip *src, 1212 FbStride srcStride, 1213 int srcX, 1214 FbBits *dst, 1215 FbStride dstStride, 1216 int dstX, 1217 int dstBpp, 1218 1219 int width, 1220 int height, 1221 1222 FbBits fgand, 1223 FbBits fbxor, 1224 FbBits bgand, 1225 FbBits bgxor); 1226 1227#ifdef FB_24BIT 1228extern _X_EXPORT void 1229fbBltOne24 (FbStip *src, 1230 FbStride srcStride, /* FbStip units per scanline */ 1231 int srcX, /* bit position of source */ 1232 FbBits *dst, 1233 FbStride dstStride, /* FbBits units per scanline */ 1234 int dstX, /* bit position of dest */ 1235 int dstBpp, /* bits per destination unit */ 1236 1237 int width, /* width in bits of destination */ 1238 int height, /* height in scanlines */ 1239 1240 FbBits fgand, /* rrop values */ 1241 FbBits fgxor, 1242 FbBits bgand, 1243 FbBits bgxor); 1244#endif 1245 1246extern _X_EXPORT void 1247fbBltPlane (FbBits *src, 1248 FbStride srcStride, 1249 int srcX, 1250 int srcBpp, 1251 1252 FbStip *dst, 1253 FbStride dstStride, 1254 int dstX, 1255 1256 int width, 1257 int height, 1258 1259 FbStip fgand, 1260 FbStip fgxor, 1261 FbStip bgand, 1262 FbStip bgxor, 1263 Pixel planeMask); 1264 1265/* 1266 * fbcmap.c 1267 */ 1268extern _X_EXPORT int 1269fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps); 1270 1271extern _X_EXPORT void 1272fbInstallColormap(ColormapPtr pmap); 1273 1274extern _X_EXPORT void 1275fbUninstallColormap(ColormapPtr pmap); 1276 1277extern _X_EXPORT void 1278fbResolveColor(unsigned short *pred, 1279 unsigned short *pgreen, 1280 unsigned short *pblue, 1281 VisualPtr pVisual); 1282 1283extern _X_EXPORT Bool 1284fbInitializeColormap(ColormapPtr pmap); 1285 1286extern _X_EXPORT int 1287fbExpandDirectColors (ColormapPtr pmap, 1288 int ndef, 1289 xColorItem *indefs, 1290 xColorItem *outdefs); 1291 1292extern _X_EXPORT Bool 1293fbCreateDefColormap(ScreenPtr pScreen); 1294 1295extern _X_EXPORT void 1296fbClearVisualTypes(void); 1297 1298extern _X_EXPORT Bool 1299fbHasVisualTypes (int depth); 1300 1301extern _X_EXPORT Bool 1302fbSetVisualTypes (int depth, int visuals, int bitsPerRGB); 1303 1304extern _X_EXPORT Bool 1305fbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB, 1306 Pixel redMask, Pixel greenMask, Pixel blueMask); 1307 1308extern _X_EXPORT Bool 1309fbInitVisuals (VisualPtr *visualp, 1310 DepthPtr *depthp, 1311 int *nvisualp, 1312 int *ndepthp, 1313 int *rootDepthp, 1314 VisualID *defaultVisp, 1315 unsigned long sizes, 1316 int bitsPerRGB); 1317 1318/* 1319 * fbcopy.c 1320 */ 1321 1322/* Compatibility definition, to be removed at next ABI change. */ 1323typedef void (*fbCopyProc) (DrawablePtr pSrcDrawable, 1324 DrawablePtr pDstDrawable, 1325 GCPtr pGC, 1326 BoxPtr pDstBox, 1327 int nbox, 1328 int dx, 1329 int dy, 1330 Bool reverse, 1331 Bool upsidedown, 1332 Pixel bitplane, 1333 void *closure); 1334 1335extern _X_EXPORT void 1336fbCopyNtoN (DrawablePtr pSrcDrawable, 1337 DrawablePtr pDstDrawable, 1338 GCPtr pGC, 1339 BoxPtr pbox, 1340 int nbox, 1341 int dx, 1342 int dy, 1343 Bool reverse, 1344 Bool upsidedown, 1345 Pixel bitplane, 1346 void *closure); 1347 1348/* Compatibility wrapper, to be removed at next ABI change. */ 1349extern _X_EXPORT void 1350fbCopyRegion (DrawablePtr pSrcDrawable, 1351 DrawablePtr pDstDrawable, 1352 GCPtr pGC, 1353 RegionPtr pDstRegion, 1354 int dx, 1355 int dy, 1356 fbCopyProc copyProc, 1357 Pixel bitPlane, 1358 void *closure); 1359 1360/* Compatibility wrapper, to be removed at next ABI change. */ 1361extern _X_EXPORT RegionPtr 1362fbDoCopy (DrawablePtr pSrcDrawable, 1363 DrawablePtr pDstDrawable, 1364 GCPtr pGC, 1365 int xIn, 1366 int yIn, 1367 int widthSrc, 1368 int heightSrc, 1369 int xOut, 1370 int yOut, 1371 fbCopyProc copyProc, 1372 Pixel bitplane, 1373 void *closure); 1374 1375extern _X_EXPORT void 1376fbCopy1toN (DrawablePtr pSrcDrawable, 1377 DrawablePtr pDstDrawable, 1378 GCPtr pGC, 1379 BoxPtr pbox, 1380 int nbox, 1381 int dx, 1382 int dy, 1383 Bool reverse, 1384 Bool upsidedown, 1385 Pixel bitplane, 1386 void *closure); 1387 1388extern _X_EXPORT void 1389fbCopyNto1 (DrawablePtr pSrcDrawable, 1390 DrawablePtr pDstDrawable, 1391 GCPtr pGC, 1392 BoxPtr pbox, 1393 int nbox, 1394 int dx, 1395 int dy, 1396 Bool reverse, 1397 Bool upsidedown, 1398 Pixel bitplane, 1399 void *closure); 1400 1401extern _X_EXPORT RegionPtr 1402fbCopyArea (DrawablePtr pSrcDrawable, 1403 DrawablePtr pDstDrawable, 1404 GCPtr pGC, 1405 int xIn, 1406 int yIn, 1407 int widthSrc, 1408 int heightSrc, 1409 int xOut, 1410 int yOut); 1411 1412extern _X_EXPORT RegionPtr 1413fbCopyPlane (DrawablePtr pSrcDrawable, 1414 DrawablePtr pDstDrawable, 1415 GCPtr pGC, 1416 int xIn, 1417 int yIn, 1418 int widthSrc, 1419 int heightSrc, 1420 int xOut, 1421 int yOut, 1422 unsigned long bitplane); 1423 1424/* 1425 * fbfill.c 1426 */ 1427extern _X_EXPORT void 1428fbFill (DrawablePtr pDrawable, 1429 GCPtr pGC, 1430 int x, 1431 int y, 1432 int width, 1433 int height); 1434 1435extern _X_EXPORT void 1436fbSolidBoxClipped (DrawablePtr pDrawable, 1437 RegionPtr pClip, 1438 int xa, 1439 int ya, 1440 int xb, 1441 int yb, 1442 FbBits and, 1443 FbBits xor); 1444 1445/* 1446 * fbfillrect.c 1447 */ 1448extern _X_EXPORT void 1449fbPolyFillRect(DrawablePtr pDrawable, 1450 GCPtr pGC, 1451 int nrectInit, 1452 xRectangle *prectInit); 1453 1454#define fbPolyFillArc miPolyFillArc 1455 1456#define fbFillPolygon miFillPolygon 1457 1458/* 1459 * fbfillsp.c 1460 */ 1461extern _X_EXPORT void 1462fbFillSpans (DrawablePtr pDrawable, 1463 GCPtr pGC, 1464 int nInit, 1465 DDXPointPtr pptInit, 1466 int *pwidthInit, 1467 int fSorted); 1468 1469 1470/* 1471 * fbgc.c 1472 */ 1473 1474extern _X_EXPORT Bool 1475fbCreateGC(GCPtr pGC); 1476 1477extern _X_EXPORT void 1478fbPadPixmap (PixmapPtr pPixmap); 1479 1480extern _X_EXPORT void 1481fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); 1482 1483/* 1484 * fbgetsp.c 1485 */ 1486extern _X_EXPORT void 1487fbGetSpans(DrawablePtr pDrawable, 1488 int wMax, 1489 DDXPointPtr ppt, 1490 int *pwidth, 1491 int nspans, 1492 char *pchardstStart); 1493 1494/* 1495 * fbglyph.c 1496 */ 1497 1498extern _X_EXPORT Bool 1499fbGlyphIn (RegionPtr pRegion, 1500 int x, 1501 int y, 1502 int width, 1503 int height); 1504 1505extern _X_EXPORT void 1506fbPolyGlyphBlt (DrawablePtr pDrawable, 1507 GCPtr pGC, 1508 int x, 1509 int y, 1510 unsigned int nglyph, 1511 CharInfoPtr *ppci, 1512 pointer pglyphBase); 1513 1514extern _X_EXPORT void 1515fbImageGlyphBlt (DrawablePtr pDrawable, 1516 GCPtr pGC, 1517 int x, 1518 int y, 1519 unsigned int nglyph, 1520 CharInfoPtr *ppci, 1521 pointer pglyphBase); 1522 1523/* 1524 * fbimage.c 1525 */ 1526 1527extern _X_EXPORT void 1528fbPutImage (DrawablePtr pDrawable, 1529 GCPtr pGC, 1530 int depth, 1531 int x, 1532 int y, 1533 int w, 1534 int h, 1535 int leftPad, 1536 int format, 1537 char *pImage); 1538 1539extern _X_EXPORT void 1540fbPutZImage (DrawablePtr pDrawable, 1541 RegionPtr pClip, 1542 int alu, 1543 FbBits pm, 1544 int x, 1545 int y, 1546 int width, 1547 int height, 1548 FbStip *src, 1549 FbStride srcStride); 1550 1551extern _X_EXPORT void 1552fbPutXYImage (DrawablePtr pDrawable, 1553 RegionPtr pClip, 1554 FbBits fg, 1555 FbBits bg, 1556 FbBits pm, 1557 int alu, 1558 Bool opaque, 1559 1560 int x, 1561 int y, 1562 int width, 1563 int height, 1564 1565 FbStip *src, 1566 FbStride srcStride, 1567 int srcX); 1568 1569extern _X_EXPORT void 1570fbGetImage (DrawablePtr pDrawable, 1571 int x, 1572 int y, 1573 int w, 1574 int h, 1575 unsigned int format, 1576 unsigned long planeMask, 1577 char *d); 1578/* 1579 * fbline.c 1580 */ 1581 1582extern _X_EXPORT void 1583fbZeroLine (DrawablePtr pDrawable, 1584 GCPtr pGC, 1585 int mode, 1586 int npt, 1587 DDXPointPtr ppt); 1588 1589extern _X_EXPORT void 1590fbZeroSegment (DrawablePtr pDrawable, 1591 GCPtr pGC, 1592 int nseg, 1593 xSegment *pSegs); 1594 1595extern _X_EXPORT void 1596fbPolyLine (DrawablePtr pDrawable, 1597 GCPtr pGC, 1598 int mode, 1599 int npt, 1600 DDXPointPtr ppt); 1601 1602extern _X_EXPORT void 1603fbFixCoordModePrevious (int npt, 1604 DDXPointPtr ppt); 1605 1606extern _X_EXPORT void 1607fbPolySegment (DrawablePtr pDrawable, 1608 GCPtr pGC, 1609 int nseg, 1610 xSegment *pseg); 1611 1612#define fbPolyRectangle miPolyRectangle 1613 1614/* 1615 * fbpict.c 1616 */ 1617 1618extern _X_EXPORT Bool 1619fbPictureInit (ScreenPtr pScreen, 1620 PictFormatPtr formats, 1621 int nformats); 1622 1623/* 1624 * fbpixmap.c 1625 */ 1626 1627extern _X_EXPORT PixmapPtr 1628fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, 1629 unsigned usage_hint); 1630 1631extern _X_EXPORT PixmapPtr 1632fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, 1633 unsigned usage_hint); 1634 1635extern _X_EXPORT Bool 1636fbDestroyPixmap (PixmapPtr pPixmap); 1637 1638extern _X_EXPORT RegionPtr 1639fbPixmapToRegion(PixmapPtr pPix); 1640 1641/* 1642 * fbpoint.c 1643 */ 1644 1645extern _X_EXPORT void 1646fbDots (FbBits *dstOrig, 1647 FbStride dstStride, 1648 int dstBpp, 1649 BoxPtr pBox, 1650 xPoint *pts, 1651 int npt, 1652 int xorg, 1653 int yorg, 1654 int xoff, 1655 int yoff, 1656 FbBits andOrig, 1657 FbBits xorOrig); 1658 1659extern _X_EXPORT void 1660fbPolyPoint (DrawablePtr pDrawable, 1661 GCPtr pGC, 1662 int mode, 1663 int npt, 1664 xPoint *pptInit); 1665 1666/* 1667 * fbpush.c 1668 */ 1669extern _X_EXPORT void 1670fbPushPattern (DrawablePtr pDrawable, 1671 GCPtr pGC, 1672 1673 FbStip *src, 1674 FbStride srcStride, 1675 int srcX, 1676 1677 int x, 1678 int y, 1679 1680 int width, 1681 int height); 1682 1683extern _X_EXPORT void 1684fbPushFill (DrawablePtr pDrawable, 1685 GCPtr pGC, 1686 1687 FbStip *src, 1688 FbStride srcStride, 1689 int srcX, 1690 1691 int x, 1692 int y, 1693 int width, 1694 int height); 1695 1696extern _X_EXPORT void 1697fbPushImage (DrawablePtr pDrawable, 1698 GCPtr pGC, 1699 1700 FbStip *src, 1701 FbStride srcStride, 1702 int srcX, 1703 1704 int x, 1705 int y, 1706 int width, 1707 int height); 1708 1709extern _X_EXPORT void 1710fbPushPixels (GCPtr pGC, 1711 PixmapPtr pBitmap, 1712 DrawablePtr pDrawable, 1713 int dx, 1714 int dy, 1715 int xOrg, 1716 int yOrg); 1717 1718 1719/* 1720 * fbscreen.c 1721 */ 1722 1723extern _X_EXPORT Bool 1724fbCloseScreen (int indx, ScreenPtr pScreen); 1725 1726extern _X_EXPORT Bool 1727fbRealizeFont(ScreenPtr pScreen, FontPtr pFont); 1728 1729extern _X_EXPORT Bool 1730fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont); 1731 1732extern _X_EXPORT void 1733fbQueryBestSize (int class, 1734 unsigned short *width, unsigned short *height, 1735 ScreenPtr pScreen); 1736 1737extern _X_EXPORT PixmapPtr 1738_fbGetWindowPixmap (WindowPtr pWindow); 1739 1740extern _X_EXPORT void 1741_fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap); 1742 1743extern _X_EXPORT Bool 1744fbSetupScreen(ScreenPtr pScreen, 1745 pointer pbits, /* pointer to screen bitmap */ 1746 int xsize, /* in pixels */ 1747 int ysize, 1748 int dpix, /* dots per inch */ 1749 int dpiy, 1750 int width, /* pixel width of frame buffer */ 1751 int bpp); /* bits per pixel of frame buffer */ 1752 1753extern _X_EXPORT Bool 1754wfbFinishScreenInit(ScreenPtr pScreen, 1755 pointer pbits, 1756 int xsize, 1757 int ysize, 1758 int dpix, 1759 int dpiy, 1760 int width, 1761 int bpp, 1762 SetupWrapProcPtr setupWrap, 1763 FinishWrapProcPtr finishWrap); 1764 1765extern _X_EXPORT Bool 1766wfbScreenInit(ScreenPtr pScreen, 1767 pointer pbits, 1768 int xsize, 1769 int ysize, 1770 int dpix, 1771 int dpiy, 1772 int width, 1773 int bpp, 1774 SetupWrapProcPtr setupWrap, 1775 FinishWrapProcPtr finishWrap); 1776 1777extern _X_EXPORT Bool 1778fbFinishScreenInit(ScreenPtr pScreen, 1779 pointer pbits, 1780 int xsize, 1781 int ysize, 1782 int dpix, 1783 int dpiy, 1784 int width, 1785 int bpp); 1786 1787extern _X_EXPORT Bool 1788fbScreenInit(ScreenPtr pScreen, 1789 pointer pbits, 1790 int xsize, 1791 int ysize, 1792 int dpix, 1793 int dpiy, 1794 int width, 1795 int bpp); 1796 1797/* 1798 * fbseg.c 1799 */ 1800typedef void FbBres (DrawablePtr pDrawable, 1801 GCPtr pGC, 1802 int dashOffset, 1803 int signdx, 1804 int signdy, 1805 int axis, 1806 int x, 1807 int y, 1808 int e, 1809 int e1, 1810 int e3, 1811 int len); 1812 1813extern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash; 1814/* 1815 * fbsetsp.c 1816 */ 1817 1818extern _X_EXPORT void 1819fbSetSpans (DrawablePtr pDrawable, 1820 GCPtr pGC, 1821 char *src, 1822 DDXPointPtr ppt, 1823 int *pwidth, 1824 int nspans, 1825 int fSorted); 1826 1827extern _X_EXPORT FbBres * 1828fbSelectBres (DrawablePtr pDrawable, 1829 GCPtr pGC); 1830 1831extern _X_EXPORT void 1832fbBres (DrawablePtr pDrawable, 1833 GCPtr pGC, 1834 int dashOffset, 1835 int signdx, 1836 int signdy, 1837 int axis, 1838 int x, 1839 int y, 1840 int e, 1841 int e1, 1842 int e3, 1843 int len); 1844 1845extern _X_EXPORT void 1846fbSegment (DrawablePtr pDrawable, 1847 GCPtr pGC, 1848 int xa, 1849 int ya, 1850 int xb, 1851 int yb, 1852 Bool drawLast, 1853 int *dashOffset); 1854 1855 1856/* 1857 * fbsolid.c 1858 */ 1859 1860extern _X_EXPORT void 1861fbSolid (FbBits *dst, 1862 FbStride dstStride, 1863 int dstX, 1864 int bpp, 1865 1866 int width, 1867 int height, 1868 1869 FbBits and, 1870 FbBits xor); 1871 1872#ifdef FB_24BIT 1873extern _X_EXPORT void 1874fbSolid24 (FbBits *dst, 1875 FbStride dstStride, 1876 int dstX, 1877 1878 int width, 1879 int height, 1880 1881 FbBits and, 1882 FbBits xor); 1883#endif 1884 1885/* 1886 * fbstipple.c 1887 */ 1888 1889extern _X_EXPORT void 1890fbTransparentSpan (FbBits *dst, 1891 FbBits stip, 1892 FbBits fgxor, 1893 int n); 1894 1895extern _X_EXPORT void 1896fbEvenStipple (FbBits *dst, 1897 FbStride dstStride, 1898 int dstX, 1899 int dstBpp, 1900 1901 int width, 1902 int height, 1903 1904 FbStip *stip, 1905 FbStride stipStride, 1906 int stipHeight, 1907 1908 FbBits fgand, 1909 FbBits fgxor, 1910 FbBits bgand, 1911 FbBits bgxor, 1912 1913 int xRot, 1914 int yRot); 1915 1916extern _X_EXPORT void 1917fbOddStipple (FbBits *dst, 1918 FbStride dstStride, 1919 int dstX, 1920 int dstBpp, 1921 1922 int width, 1923 int height, 1924 1925 FbStip *stip, 1926 FbStride stipStride, 1927 int stipWidth, 1928 int stipHeight, 1929 1930 FbBits fgand, 1931 FbBits fgxor, 1932 FbBits bgand, 1933 FbBits bgxor, 1934 1935 int xRot, 1936 int yRot); 1937 1938extern _X_EXPORT void 1939fbStipple (FbBits *dst, 1940 FbStride dstStride, 1941 int dstX, 1942 int dstBpp, 1943 1944 int width, 1945 int height, 1946 1947 FbStip *stip, 1948 FbStride stipStride, 1949 int stipWidth, 1950 int stipHeight, 1951 Bool even, 1952 1953 FbBits fgand, 1954 FbBits fgxor, 1955 FbBits bgand, 1956 FbBits bgxor, 1957 1958 int xRot, 1959 int yRot); 1960 1961/* 1962 * fbtile.c 1963 */ 1964 1965extern _X_EXPORT void 1966fbEvenTile (FbBits *dst, 1967 FbStride dstStride, 1968 int dstX, 1969 1970 int width, 1971 int height, 1972 1973 FbBits *tile, 1974 FbStride tileStride, 1975 int tileHeight, 1976 1977 int alu, 1978 FbBits pm, 1979 int xRot, 1980 int yRot); 1981 1982extern _X_EXPORT void 1983fbOddTile (FbBits *dst, 1984 FbStride dstStride, 1985 int dstX, 1986 1987 int width, 1988 int height, 1989 1990 FbBits *tile, 1991 FbStride tileStride, 1992 int tileWidth, 1993 int tileHeight, 1994 1995 int alu, 1996 FbBits pm, 1997 int bpp, 1998 1999 int xRot, 2000 int yRot); 2001 2002extern _X_EXPORT void 2003fbTile (FbBits *dst, 2004 FbStride dstStride, 2005 int dstX, 2006 2007 int width, 2008 int height, 2009 2010 FbBits *tile, 2011 FbStride tileStride, 2012 int tileWidth, 2013 int tileHeight, 2014 2015 int alu, 2016 FbBits pm, 2017 int bpp, 2018 2019 int xRot, 2020 int yRot); 2021 2022/* 2023 * fbutil.c 2024 */ 2025extern _X_EXPORT FbBits 2026fbReplicatePixel (Pixel p, int bpp); 2027 2028extern _X_EXPORT void 2029fbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp); 2030 2031#ifdef FB_ACCESS_WRAPPER 2032extern _X_EXPORT ReadMemoryProcPtr wfbReadMemory; 2033extern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory; 2034#endif 2035 2036/* 2037 * fbwindow.c 2038 */ 2039 2040extern _X_EXPORT Bool 2041fbCreateWindow(WindowPtr pWin); 2042 2043extern _X_EXPORT Bool 2044fbDestroyWindow(WindowPtr pWin); 2045 2046extern _X_EXPORT Bool 2047fbMapWindow(WindowPtr pWindow); 2048 2049extern _X_EXPORT Bool 2050fbPositionWindow(WindowPtr pWin, int x, int y); 2051 2052extern _X_EXPORT Bool 2053fbUnmapWindow(WindowPtr pWindow); 2054 2055extern _X_EXPORT void 2056fbCopyWindowProc (DrawablePtr pSrcDrawable, 2057 DrawablePtr pDstDrawable, 2058 GCPtr pGC, 2059 BoxPtr pbox, 2060 int nbox, 2061 int dx, 2062 int dy, 2063 Bool reverse, 2064 Bool upsidedown, 2065 Pixel bitplane, 2066 void *closure); 2067 2068extern _X_EXPORT void 2069fbCopyWindow(WindowPtr pWin, 2070 DDXPointRec ptOldOrg, 2071 RegionPtr prgnSrc); 2072 2073extern _X_EXPORT Bool 2074fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask); 2075 2076extern _X_EXPORT void 2077fbFillRegionSolid (DrawablePtr pDrawable, 2078 RegionPtr pRegion, 2079 FbBits and, 2080 FbBits xor); 2081 2082extern _X_EXPORT pixman_image_t * 2083image_from_pict (PicturePtr pict, 2084 Bool has_clip, 2085 int *xoff, 2086 int *yoff); 2087 2088extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *); 2089 2090#endif /* _FB_H_ */ 2091 2092