fb.h revision 88c603c7
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 evenStipple; /* stipple is even */ 670 unsigned char bpp; /* current drawable bpp */ 671} FbGCPrivRec, *FbGCPrivPtr; 672 673#define fbGetGCPrivate(pGC) ((FbGCPrivPtr)\ 674 dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey())) 675 676#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip) 677#define fbGetExpose(pGC) ((pGC)->fExpose) 678#define fbGetFreeCompClip(pGC) ((pGC)->freeCompClip) 679#define fbGetRotatedPixmap(pGC) ((pGC)->pRotatedPixmap) 680 681#define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate) 682#define fbGetWindowPixmap(pWin) ((PixmapPtr)\ 683 dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey())) 684 685#ifdef ROOTLESS 686#define __fbPixDrawableX(pPix) ((pPix)->drawable.x) 687#define __fbPixDrawableY(pPix) ((pPix)->drawable.y) 688#else 689#define __fbPixDrawableX(pPix) 0 690#define __fbPixDrawableY(pPix) 0 691#endif 692 693#ifdef COMPOSITE 694#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix) - (pPix)->screen_x) 695#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix) - (pPix)->screen_y) 696#else 697#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix)) 698#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix)) 699#endif 700#define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix)) 701#define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix)) 702 703#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) { \ 704 if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ 705 (pixmap) = fbGetWindowPixmap(pDrawable); \ 706 (xoff) = __fbPixOffXWin(pixmap); \ 707 (yoff) = __fbPixOffYWin(pixmap); \ 708 } else { \ 709 (pixmap) = (PixmapPtr) (pDrawable); \ 710 (xoff) = __fbPixOffXPix(pixmap); \ 711 (yoff) = __fbPixOffYPix(pixmap); \ 712 } \ 713 fbPrepareAccess(pDrawable); \ 714} 715 716#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) { \ 717 (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; \ 718 (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride); \ 719 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ 720} 721 722#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) { \ 723 (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; \ 724 (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride); \ 725 (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ 726} 727 728#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ 729 PixmapPtr _pPix; \ 730 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ 731 fbGetPixmapBitsData(_pPix, pointer, stride, bpp); \ 732} 733 734#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ 735 PixmapPtr _pPix; \ 736 fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ 737 fbGetPixmapStipData(_pPix, pointer, stride, bpp); \ 738} 739 740/* 741 * XFree86 empties the root BorderClip when the VT is inactive, 742 * here's a macro which uses that to disable GetImage and GetSpans 743 */ 744 745#define fbWindowEnabled(pWin) \ 746 RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip) 747 748#define fbDrawableEnabled(pDrawable) \ 749 ((pDrawable)->type == DRAWABLE_PIXMAP ? \ 750 TRUE : fbWindowEnabled((WindowPtr) pDrawable)) 751 752#define FbPowerOfTwo(w) (((w) & ((w) - 1)) == 0) 753/* 754 * Accelerated tiles are power of 2 width <= FB_UNIT 755 */ 756#define FbEvenTile(w) ((w) <= FB_UNIT && FbPowerOfTwo(w)) 757/* 758 * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp 759 * with dstBpp a power of 2 as well 760 */ 761#define FbEvenStip(w,bpp) ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp)) 762 763/* 764 * fb24_32.c 765 */ 766extern _X_EXPORT void 767fb24_32GetSpans(DrawablePtr pDrawable, 768 int wMax, 769 DDXPointPtr ppt, 770 int *pwidth, 771 int nspans, 772 char *pchardstStart); 773 774extern _X_EXPORT void 775fb24_32SetSpans (DrawablePtr pDrawable, 776 GCPtr pGC, 777 char *src, 778 DDXPointPtr ppt, 779 int *pwidth, 780 int nspans, 781 int fSorted); 782 783extern _X_EXPORT void 784fb24_32PutZImage (DrawablePtr pDrawable, 785 RegionPtr pClip, 786 int alu, 787 FbBits pm, 788 int x, 789 int y, 790 int width, 791 int height, 792 CARD8 *src, 793 FbStride srcStride); 794 795extern _X_EXPORT void 796fb24_32GetImage (DrawablePtr pDrawable, 797 int x, 798 int y, 799 int w, 800 int h, 801 unsigned int format, 802 unsigned long planeMask, 803 char *d); 804 805extern _X_EXPORT void 806fb24_32CopyMtoN (DrawablePtr pSrcDrawable, 807 DrawablePtr pDstDrawable, 808 GCPtr pGC, 809 BoxPtr pbox, 810 int nbox, 811 int dx, 812 int dy, 813 Bool reverse, 814 Bool upsidedown, 815 Pixel bitplane, 816 void *closure); 817 818extern _X_EXPORT PixmapPtr 819fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel); 820 821extern _X_EXPORT Bool 822fb24_32CreateScreenResources(ScreenPtr pScreen); 823 824extern _X_EXPORT Bool 825fb24_32ModifyPixmapHeader (PixmapPtr pPixmap, 826 int width, 827 int height, 828 int depth, 829 int bitsPerPixel, 830 int devKind, 831 pointer pPixData); 832 833/* 834 * fballpriv.c 835 */ 836extern _X_EXPORT Bool 837fbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCIndex); 838 839/* 840 * fbarc.c 841 */ 842 843extern _X_EXPORT void 844fbPolyArc (DrawablePtr pDrawable, 845 GCPtr pGC, 846 int narcs, 847 xArc *parcs); 848 849/* 850 * fbbits.c 851 */ 852 853extern _X_EXPORT void 854fbBresSolid8(DrawablePtr pDrawable, 855 GCPtr pGC, 856 int dashOffset, 857 int signdx, 858 int signdy, 859 int axis, 860 int x, 861 int y, 862 int e, 863 int e1, 864 int e3, 865 int len); 866 867extern _X_EXPORT void 868fbBresDash8 (DrawablePtr pDrawable, 869 GCPtr pGC, 870 int dashOffset, 871 int signdx, 872 int signdy, 873 int axis, 874 int x, 875 int y, 876 int e, 877 int e1, 878 int e3, 879 int len); 880 881extern _X_EXPORT void 882fbDots8 (FbBits *dst, 883 FbStride dstStride, 884 int dstBpp, 885 BoxPtr pBox, 886 xPoint *pts, 887 int npt, 888 int xorg, 889 int yorg, 890 int xoff, 891 int yoff, 892 FbBits and, 893 FbBits xor); 894 895extern _X_EXPORT void 896fbArc8 (FbBits *dst, 897 FbStride dstStride, 898 int dstBpp, 899 xArc *arc, 900 int dx, 901 int dy, 902 FbBits and, 903 FbBits xor); 904 905extern _X_EXPORT void 906fbGlyph8 (FbBits *dstLine, 907 FbStride dstStride, 908 int dstBpp, 909 FbStip *stipple, 910 FbBits fg, 911 int height, 912 int shift); 913 914extern _X_EXPORT void 915fbPolyline8 (DrawablePtr pDrawable, 916 GCPtr pGC, 917 int mode, 918 int npt, 919 DDXPointPtr ptsOrig); 920 921extern _X_EXPORT void 922fbPolySegment8 (DrawablePtr pDrawable, 923 GCPtr pGC, 924 int nseg, 925 xSegment *pseg); 926 927extern _X_EXPORT void 928fbBresSolid16(DrawablePtr pDrawable, 929 GCPtr pGC, 930 int dashOffset, 931 int signdx, 932 int signdy, 933 int axis, 934 int x, 935 int y, 936 int e, 937 int e1, 938 int e3, 939 int len); 940 941extern _X_EXPORT void 942fbBresDash16(DrawablePtr pDrawable, 943 GCPtr pGC, 944 int dashOffset, 945 int signdx, 946 int signdy, 947 int axis, 948 int x, 949 int y, 950 int e, 951 int e1, 952 int e3, 953 int len); 954 955extern _X_EXPORT void 956fbDots16(FbBits *dst, 957 FbStride dstStride, 958 int dstBpp, 959 BoxPtr pBox, 960 xPoint *pts, 961 int npt, 962 int xorg, 963 int yorg, 964 int xoff, 965 int yoff, 966 FbBits and, 967 FbBits xor); 968 969extern _X_EXPORT void 970fbArc16(FbBits *dst, 971 FbStride dstStride, 972 int dstBpp, 973 xArc *arc, 974 int dx, 975 int dy, 976 FbBits and, 977 FbBits xor); 978 979extern _X_EXPORT void 980fbGlyph16(FbBits *dstLine, 981 FbStride dstStride, 982 int dstBpp, 983 FbStip *stipple, 984 FbBits fg, 985 int height, 986 int shift); 987 988extern _X_EXPORT void 989fbPolyline16 (DrawablePtr pDrawable, 990 GCPtr pGC, 991 int mode, 992 int npt, 993 DDXPointPtr ptsOrig); 994 995extern _X_EXPORT void 996fbPolySegment16 (DrawablePtr pDrawable, 997 GCPtr pGC, 998 int nseg, 999 xSegment *pseg); 1000 1001 1002extern _X_EXPORT void 1003fbBresSolid24(DrawablePtr pDrawable, 1004 GCPtr pGC, 1005 int dashOffset, 1006 int signdx, 1007 int signdy, 1008 int axis, 1009 int x, 1010 int y, 1011 int e, 1012 int e1, 1013 int e3, 1014 int len); 1015 1016extern _X_EXPORT void 1017fbBresDash24(DrawablePtr pDrawable, 1018 GCPtr pGC, 1019 int dashOffset, 1020 int signdx, 1021 int signdy, 1022 int axis, 1023 int x, 1024 int y, 1025 int e, 1026 int e1, 1027 int e3, 1028 int len); 1029 1030extern _X_EXPORT void 1031fbDots24(FbBits *dst, 1032 FbStride dstStride, 1033 int dstBpp, 1034 BoxPtr pBox, 1035 xPoint *pts, 1036 int npt, 1037 int xorg, 1038 int yorg, 1039 int xoff, 1040 int yoff, 1041 FbBits and, 1042 FbBits xor); 1043 1044extern _X_EXPORT void 1045fbArc24(FbBits *dst, 1046 FbStride dstStride, 1047 int dstBpp, 1048 xArc *arc, 1049 int dx, 1050 int dy, 1051 FbBits and, 1052 FbBits xor); 1053 1054extern _X_EXPORT void 1055fbGlyph24(FbBits *dstLine, 1056 FbStride dstStride, 1057 int dstBpp, 1058 FbStip *stipple, 1059 FbBits fg, 1060 int height, 1061 int shift); 1062 1063extern _X_EXPORT void 1064fbPolyline24 (DrawablePtr pDrawable, 1065 GCPtr pGC, 1066 int mode, 1067 int npt, 1068 DDXPointPtr ptsOrig); 1069 1070extern _X_EXPORT void 1071fbPolySegment24 (DrawablePtr pDrawable, 1072 GCPtr pGC, 1073 int nseg, 1074 xSegment *pseg); 1075 1076 1077extern _X_EXPORT void 1078fbBresSolid32(DrawablePtr pDrawable, 1079 GCPtr pGC, 1080 int dashOffset, 1081 int signdx, 1082 int signdy, 1083 int axis, 1084 int x, 1085 int y, 1086 int e, 1087 int e1, 1088 int e3, 1089 int len); 1090 1091extern _X_EXPORT void 1092fbBresDash32(DrawablePtr pDrawable, 1093 GCPtr pGC, 1094 int dashOffset, 1095 int signdx, 1096 int signdy, 1097 int axis, 1098 int x, 1099 int y, 1100 int e, 1101 int e1, 1102 int e3, 1103 int len); 1104 1105extern _X_EXPORT void 1106fbDots32(FbBits *dst, 1107 FbStride dstStride, 1108 int dstBpp, 1109 BoxPtr pBox, 1110 xPoint *pts, 1111 int npt, 1112 int xorg, 1113 int yorg, 1114 int xoff, 1115 int yoff, 1116 FbBits and, 1117 FbBits xor); 1118 1119extern _X_EXPORT void 1120fbArc32(FbBits *dst, 1121 FbStride dstStride, 1122 int dstBpp, 1123 xArc *arc, 1124 int dx, 1125 int dy, 1126 FbBits and, 1127 FbBits xor); 1128 1129extern _X_EXPORT void 1130fbGlyph32(FbBits *dstLine, 1131 FbStride dstStride, 1132 int dstBpp, 1133 FbStip *stipple, 1134 FbBits fg, 1135 int height, 1136 int shift); 1137extern _X_EXPORT void 1138fbPolyline32 (DrawablePtr pDrawable, 1139 GCPtr pGC, 1140 int mode, 1141 int npt, 1142 DDXPointPtr ptsOrig); 1143 1144extern _X_EXPORT void 1145fbPolySegment32 (DrawablePtr pDrawable, 1146 GCPtr pGC, 1147 int nseg, 1148 xSegment *pseg); 1149 1150/* 1151 * fbblt.c 1152 */ 1153extern _X_EXPORT void 1154fbBlt (FbBits *src, 1155 FbStride srcStride, 1156 int srcX, 1157 1158 FbBits *dst, 1159 FbStride dstStride, 1160 int dstX, 1161 1162 int width, 1163 int height, 1164 1165 int alu, 1166 FbBits pm, 1167 int bpp, 1168 1169 Bool reverse, 1170 Bool upsidedown); 1171 1172extern _X_EXPORT void 1173fbBlt24 (FbBits *srcLine, 1174 FbStride srcStride, 1175 int srcX, 1176 1177 FbBits *dstLine, 1178 FbStride dstStride, 1179 int dstX, 1180 1181 int width, 1182 int height, 1183 1184 int alu, 1185 FbBits pm, 1186 1187 Bool reverse, 1188 Bool upsidedown); 1189 1190extern _X_EXPORT void 1191fbBltStip (FbStip *src, 1192 FbStride srcStride, /* in FbStip units, not FbBits units */ 1193 int srcX, 1194 1195 FbStip *dst, 1196 FbStride dstStride, /* in FbStip units, not FbBits units */ 1197 int dstX, 1198 1199 int width, 1200 int height, 1201 1202 int alu, 1203 FbBits pm, 1204 int bpp); 1205 1206/* 1207 * fbbltone.c 1208 */ 1209extern _X_EXPORT void 1210fbBltOne (FbStip *src, 1211 FbStride srcStride, 1212 int srcX, 1213 FbBits *dst, 1214 FbStride dstStride, 1215 int dstX, 1216 int dstBpp, 1217 1218 int width, 1219 int height, 1220 1221 FbBits fgand, 1222 FbBits fbxor, 1223 FbBits bgand, 1224 FbBits bgxor); 1225 1226#ifdef FB_24BIT 1227extern _X_EXPORT void 1228fbBltOne24 (FbStip *src, 1229 FbStride srcStride, /* FbStip units per scanline */ 1230 int srcX, /* bit position of source */ 1231 FbBits *dst, 1232 FbStride dstStride, /* FbBits units per scanline */ 1233 int dstX, /* bit position of dest */ 1234 int dstBpp, /* bits per destination unit */ 1235 1236 int width, /* width in bits of destination */ 1237 int height, /* height in scanlines */ 1238 1239 FbBits fgand, /* rrop values */ 1240 FbBits fgxor, 1241 FbBits bgand, 1242 FbBits bgxor); 1243#endif 1244 1245extern _X_EXPORT void 1246fbBltPlane (FbBits *src, 1247 FbStride srcStride, 1248 int srcX, 1249 int srcBpp, 1250 1251 FbStip *dst, 1252 FbStride dstStride, 1253 int dstX, 1254 1255 int width, 1256 int height, 1257 1258 FbStip fgand, 1259 FbStip fgxor, 1260 FbStip bgand, 1261 FbStip bgxor, 1262 Pixel planeMask); 1263 1264/* 1265 * fbcmap_mi.c 1266 */ 1267extern _X_EXPORT int 1268fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps); 1269 1270extern _X_EXPORT void 1271fbInstallColormap(ColormapPtr pmap); 1272 1273extern _X_EXPORT void 1274fbUninstallColormap(ColormapPtr pmap); 1275 1276extern _X_EXPORT void 1277fbResolveColor(unsigned short *pred, 1278 unsigned short *pgreen, 1279 unsigned short *pblue, 1280 VisualPtr pVisual); 1281 1282extern _X_EXPORT Bool 1283fbInitializeColormap(ColormapPtr pmap); 1284 1285extern _X_EXPORT Bool 1286mfbCreateColormap(ColormapPtr pmap); 1287 1288extern _X_EXPORT int 1289fbExpandDirectColors (ColormapPtr pmap, 1290 int ndef, 1291 xColorItem *indefs, 1292 xColorItem *outdefs); 1293 1294extern _X_EXPORT Bool 1295fbCreateDefColormap(ScreenPtr pScreen); 1296 1297extern _X_EXPORT void 1298fbClearVisualTypes(void); 1299 1300extern _X_EXPORT Bool 1301fbHasVisualTypes (int depth); 1302 1303extern _X_EXPORT Bool 1304fbSetVisualTypes (int depth, int visuals, int bitsPerRGB); 1305 1306extern _X_EXPORT Bool 1307fbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB, 1308 Pixel redMask, Pixel greenMask, Pixel blueMask); 1309 1310extern _X_EXPORT Bool 1311fbInitVisuals (VisualPtr *visualp, 1312 DepthPtr *depthp, 1313 int *nvisualp, 1314 int *ndepthp, 1315 int *rootDepthp, 1316 VisualID *defaultVisp, 1317 unsigned long sizes, 1318 int bitsPerRGB); 1319 1320/* 1321 * fbcopy.c 1322 */ 1323 1324/* Compatibility definition, to be removed at next ABI change. */ 1325typedef void (*fbCopyProc) (DrawablePtr pSrcDrawable, 1326 DrawablePtr pDstDrawable, 1327 GCPtr pGC, 1328 BoxPtr pDstBox, 1329 int nbox, 1330 int dx, 1331 int dy, 1332 Bool reverse, 1333 Bool upsidedown, 1334 Pixel bitplane, 1335 void *closure); 1336 1337extern _X_EXPORT void 1338fbCopyNtoN (DrawablePtr pSrcDrawable, 1339 DrawablePtr pDstDrawable, 1340 GCPtr pGC, 1341 BoxPtr pbox, 1342 int nbox, 1343 int dx, 1344 int dy, 1345 Bool reverse, 1346 Bool upsidedown, 1347 Pixel bitplane, 1348 void *closure); 1349 1350/* Compatibility wrapper, to be removed at next ABI change. */ 1351extern _X_EXPORT void 1352fbCopyRegion (DrawablePtr pSrcDrawable, 1353 DrawablePtr pDstDrawable, 1354 GCPtr pGC, 1355 RegionPtr pDstRegion, 1356 int dx, 1357 int dy, 1358 fbCopyProc copyProc, 1359 Pixel bitPlane, 1360 void *closure); 1361 1362/* Compatibility wrapper, to be removed at next ABI change. */ 1363extern _X_EXPORT RegionPtr 1364fbDoCopy (DrawablePtr pSrcDrawable, 1365 DrawablePtr pDstDrawable, 1366 GCPtr pGC, 1367 int xIn, 1368 int yIn, 1369 int widthSrc, 1370 int heightSrc, 1371 int xOut, 1372 int yOut, 1373 fbCopyProc copyProc, 1374 Pixel bitplane, 1375 void *closure); 1376 1377extern _X_EXPORT void 1378fbCopy1toN (DrawablePtr pSrcDrawable, 1379 DrawablePtr pDstDrawable, 1380 GCPtr pGC, 1381 BoxPtr pbox, 1382 int nbox, 1383 int dx, 1384 int dy, 1385 Bool reverse, 1386 Bool upsidedown, 1387 Pixel bitplane, 1388 void *closure); 1389 1390extern _X_EXPORT void 1391fbCopyNto1 (DrawablePtr pSrcDrawable, 1392 DrawablePtr pDstDrawable, 1393 GCPtr pGC, 1394 BoxPtr pbox, 1395 int nbox, 1396 int dx, 1397 int dy, 1398 Bool reverse, 1399 Bool upsidedown, 1400 Pixel bitplane, 1401 void *closure); 1402 1403extern _X_EXPORT RegionPtr 1404fbCopyArea (DrawablePtr pSrcDrawable, 1405 DrawablePtr pDstDrawable, 1406 GCPtr pGC, 1407 int xIn, 1408 int yIn, 1409 int widthSrc, 1410 int heightSrc, 1411 int xOut, 1412 int yOut); 1413 1414extern _X_EXPORT RegionPtr 1415fbCopyPlane (DrawablePtr pSrcDrawable, 1416 DrawablePtr pDstDrawable, 1417 GCPtr pGC, 1418 int xIn, 1419 int yIn, 1420 int widthSrc, 1421 int heightSrc, 1422 int xOut, 1423 int yOut, 1424 unsigned long bitplane); 1425 1426/* 1427 * fbfill.c 1428 */ 1429extern _X_EXPORT void 1430fbFill (DrawablePtr pDrawable, 1431 GCPtr pGC, 1432 int x, 1433 int y, 1434 int width, 1435 int height); 1436 1437extern _X_EXPORT void 1438fbSolidBoxClipped (DrawablePtr pDrawable, 1439 RegionPtr pClip, 1440 int xa, 1441 int ya, 1442 int xb, 1443 int yb, 1444 FbBits and, 1445 FbBits xor); 1446 1447/* 1448 * fbfillrect.c 1449 */ 1450extern _X_EXPORT void 1451fbPolyFillRect(DrawablePtr pDrawable, 1452 GCPtr pGC, 1453 int nrectInit, 1454 xRectangle *prectInit); 1455 1456#define fbPolyFillArc miPolyFillArc 1457 1458#define fbFillPolygon miFillPolygon 1459 1460/* 1461 * fbfillsp.c 1462 */ 1463extern _X_EXPORT void 1464fbFillSpans (DrawablePtr pDrawable, 1465 GCPtr pGC, 1466 int nInit, 1467 DDXPointPtr pptInit, 1468 int *pwidthInit, 1469 int fSorted); 1470 1471 1472/* 1473 * fbgc.c 1474 */ 1475 1476extern _X_EXPORT Bool 1477fbCreateGC(GCPtr pGC); 1478 1479extern _X_EXPORT void 1480fbPadPixmap (PixmapPtr pPixmap); 1481 1482extern _X_EXPORT void 1483fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); 1484 1485/* 1486 * fbgetsp.c 1487 */ 1488extern _X_EXPORT void 1489fbGetSpans(DrawablePtr pDrawable, 1490 int wMax, 1491 DDXPointPtr ppt, 1492 int *pwidth, 1493 int nspans, 1494 char *pchardstStart); 1495 1496/* 1497 * fbglyph.c 1498 */ 1499 1500extern _X_EXPORT Bool 1501fbGlyphIn (RegionPtr pRegion, 1502 int x, 1503 int y, 1504 int width, 1505 int height); 1506 1507extern _X_EXPORT void 1508fbPolyGlyphBlt (DrawablePtr pDrawable, 1509 GCPtr pGC, 1510 int x, 1511 int y, 1512 unsigned int nglyph, 1513 CharInfoPtr *ppci, 1514 pointer pglyphBase); 1515 1516extern _X_EXPORT void 1517fbImageGlyphBlt (DrawablePtr pDrawable, 1518 GCPtr pGC, 1519 int x, 1520 int y, 1521 unsigned int nglyph, 1522 CharInfoPtr *ppci, 1523 pointer pglyphBase); 1524 1525/* 1526 * fbimage.c 1527 */ 1528 1529extern _X_EXPORT void 1530fbPutImage (DrawablePtr pDrawable, 1531 GCPtr pGC, 1532 int depth, 1533 int x, 1534 int y, 1535 int w, 1536 int h, 1537 int leftPad, 1538 int format, 1539 char *pImage); 1540 1541extern _X_EXPORT void 1542fbPutZImage (DrawablePtr pDrawable, 1543 RegionPtr pClip, 1544 int alu, 1545 FbBits pm, 1546 int x, 1547 int y, 1548 int width, 1549 int height, 1550 FbStip *src, 1551 FbStride srcStride); 1552 1553extern _X_EXPORT void 1554fbPutXYImage (DrawablePtr pDrawable, 1555 RegionPtr pClip, 1556 FbBits fg, 1557 FbBits bg, 1558 FbBits pm, 1559 int alu, 1560 Bool opaque, 1561 1562 int x, 1563 int y, 1564 int width, 1565 int height, 1566 1567 FbStip *src, 1568 FbStride srcStride, 1569 int srcX); 1570 1571extern _X_EXPORT void 1572fbGetImage (DrawablePtr pDrawable, 1573 int x, 1574 int y, 1575 int w, 1576 int h, 1577 unsigned int format, 1578 unsigned long planeMask, 1579 char *d); 1580/* 1581 * fbline.c 1582 */ 1583 1584extern _X_EXPORT void 1585fbZeroLine (DrawablePtr pDrawable, 1586 GCPtr pGC, 1587 int mode, 1588 int npt, 1589 DDXPointPtr ppt); 1590 1591extern _X_EXPORT void 1592fbZeroSegment (DrawablePtr pDrawable, 1593 GCPtr pGC, 1594 int nseg, 1595 xSegment *pSegs); 1596 1597extern _X_EXPORT void 1598fbPolyLine (DrawablePtr pDrawable, 1599 GCPtr pGC, 1600 int mode, 1601 int npt, 1602 DDXPointPtr ppt); 1603 1604extern _X_EXPORT void 1605fbFixCoordModePrevious (int npt, 1606 DDXPointPtr ppt); 1607 1608extern _X_EXPORT void 1609fbPolySegment (DrawablePtr pDrawable, 1610 GCPtr pGC, 1611 int nseg, 1612 xSegment *pseg); 1613 1614#define fbPolyRectangle miPolyRectangle 1615 1616/* 1617 * fbpict.c 1618 */ 1619 1620extern _X_EXPORT Bool 1621fbPictureInit (ScreenPtr pScreen, 1622 PictFormatPtr formats, 1623 int nformats); 1624 1625/* 1626 * fbpixmap.c 1627 */ 1628 1629extern _X_EXPORT PixmapPtr 1630fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, 1631 unsigned usage_hint); 1632 1633extern _X_EXPORT PixmapPtr 1634fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, 1635 unsigned usage_hint); 1636 1637extern _X_EXPORT Bool 1638fbDestroyPixmap (PixmapPtr pPixmap); 1639 1640extern _X_EXPORT RegionPtr 1641fbPixmapToRegion(PixmapPtr pPix); 1642 1643/* 1644 * fbpoint.c 1645 */ 1646 1647extern _X_EXPORT void 1648fbDots (FbBits *dstOrig, 1649 FbStride dstStride, 1650 int dstBpp, 1651 BoxPtr pBox, 1652 xPoint *pts, 1653 int npt, 1654 int xorg, 1655 int yorg, 1656 int xoff, 1657 int yoff, 1658 FbBits andOrig, 1659 FbBits xorOrig); 1660 1661extern _X_EXPORT void 1662fbPolyPoint (DrawablePtr pDrawable, 1663 GCPtr pGC, 1664 int mode, 1665 int npt, 1666 xPoint *pptInit); 1667 1668/* 1669 * fbpush.c 1670 */ 1671extern _X_EXPORT void 1672fbPushPattern (DrawablePtr pDrawable, 1673 GCPtr pGC, 1674 1675 FbStip *src, 1676 FbStride srcStride, 1677 int srcX, 1678 1679 int x, 1680 int y, 1681 1682 int width, 1683 int height); 1684 1685extern _X_EXPORT void 1686fbPushFill (DrawablePtr pDrawable, 1687 GCPtr pGC, 1688 1689 FbStip *src, 1690 FbStride srcStride, 1691 int srcX, 1692 1693 int x, 1694 int y, 1695 int width, 1696 int height); 1697 1698extern _X_EXPORT void 1699fbPushImage (DrawablePtr pDrawable, 1700 GCPtr pGC, 1701 1702 FbStip *src, 1703 FbStride srcStride, 1704 int srcX, 1705 1706 int x, 1707 int y, 1708 int width, 1709 int height); 1710 1711extern _X_EXPORT void 1712fbPushPixels (GCPtr pGC, 1713 PixmapPtr pBitmap, 1714 DrawablePtr pDrawable, 1715 int dx, 1716 int dy, 1717 int xOrg, 1718 int yOrg); 1719 1720 1721/* 1722 * fbscreen.c 1723 */ 1724 1725extern _X_EXPORT Bool 1726fbCloseScreen (int indx, ScreenPtr pScreen); 1727 1728extern _X_EXPORT Bool 1729fbRealizeFont(ScreenPtr pScreen, FontPtr pFont); 1730 1731extern _X_EXPORT Bool 1732fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont); 1733 1734extern _X_EXPORT void 1735fbQueryBestSize (int class, 1736 unsigned short *width, unsigned short *height, 1737 ScreenPtr pScreen); 1738 1739extern _X_EXPORT PixmapPtr 1740_fbGetWindowPixmap (WindowPtr pWindow); 1741 1742extern _X_EXPORT void 1743_fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap); 1744 1745extern _X_EXPORT Bool 1746fbSetupScreen(ScreenPtr pScreen, 1747 pointer pbits, /* pointer to screen bitmap */ 1748 int xsize, /* in pixels */ 1749 int ysize, 1750 int dpix, /* dots per inch */ 1751 int dpiy, 1752 int width, /* pixel width of frame buffer */ 1753 int bpp); /* bits per pixel of frame buffer */ 1754 1755extern _X_EXPORT Bool 1756wfbFinishScreenInit(ScreenPtr pScreen, 1757 pointer pbits, 1758 int xsize, 1759 int ysize, 1760 int dpix, 1761 int dpiy, 1762 int width, 1763 int bpp, 1764 SetupWrapProcPtr setupWrap, 1765 FinishWrapProcPtr finishWrap); 1766 1767extern _X_EXPORT Bool 1768wfbScreenInit(ScreenPtr pScreen, 1769 pointer pbits, 1770 int xsize, 1771 int ysize, 1772 int dpix, 1773 int dpiy, 1774 int width, 1775 int bpp, 1776 SetupWrapProcPtr setupWrap, 1777 FinishWrapProcPtr finishWrap); 1778 1779extern _X_EXPORT Bool 1780fbFinishScreenInit(ScreenPtr pScreen, 1781 pointer pbits, 1782 int xsize, 1783 int ysize, 1784 int dpix, 1785 int dpiy, 1786 int width, 1787 int bpp); 1788 1789extern _X_EXPORT Bool 1790fbScreenInit(ScreenPtr pScreen, 1791 pointer pbits, 1792 int xsize, 1793 int ysize, 1794 int dpix, 1795 int dpiy, 1796 int width, 1797 int bpp); 1798 1799/* 1800 * fbseg.c 1801 */ 1802typedef void FbBres (DrawablePtr pDrawable, 1803 GCPtr pGC, 1804 int dashOffset, 1805 int signdx, 1806 int signdy, 1807 int axis, 1808 int x, 1809 int y, 1810 int e, 1811 int e1, 1812 int e3, 1813 int len); 1814 1815extern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash; 1816/* 1817 * fbsetsp.c 1818 */ 1819 1820extern _X_EXPORT void 1821fbSetSpans (DrawablePtr pDrawable, 1822 GCPtr pGC, 1823 char *src, 1824 DDXPointPtr ppt, 1825 int *pwidth, 1826 int nspans, 1827 int fSorted); 1828 1829extern _X_EXPORT FbBres * 1830fbSelectBres (DrawablePtr pDrawable, 1831 GCPtr pGC); 1832 1833extern _X_EXPORT void 1834fbBres (DrawablePtr pDrawable, 1835 GCPtr pGC, 1836 int dashOffset, 1837 int signdx, 1838 int signdy, 1839 int axis, 1840 int x, 1841 int y, 1842 int e, 1843 int e1, 1844 int e3, 1845 int len); 1846 1847extern _X_EXPORT void 1848fbSegment (DrawablePtr pDrawable, 1849 GCPtr pGC, 1850 int xa, 1851 int ya, 1852 int xb, 1853 int yb, 1854 Bool drawLast, 1855 int *dashOffset); 1856 1857 1858/* 1859 * fbsolid.c 1860 */ 1861 1862extern _X_EXPORT void 1863fbSolid (FbBits *dst, 1864 FbStride dstStride, 1865 int dstX, 1866 int bpp, 1867 1868 int width, 1869 int height, 1870 1871 FbBits and, 1872 FbBits xor); 1873 1874#ifdef FB_24BIT 1875extern _X_EXPORT void 1876fbSolid24 (FbBits *dst, 1877 FbStride dstStride, 1878 int dstX, 1879 1880 int width, 1881 int height, 1882 1883 FbBits and, 1884 FbBits xor); 1885#endif 1886 1887/* 1888 * fbstipple.c 1889 */ 1890 1891extern _X_EXPORT void 1892fbTransparentSpan (FbBits *dst, 1893 FbBits stip, 1894 FbBits fgxor, 1895 int n); 1896 1897extern _X_EXPORT void 1898fbEvenStipple (FbBits *dst, 1899 FbStride dstStride, 1900 int dstX, 1901 int dstBpp, 1902 1903 int width, 1904 int height, 1905 1906 FbStip *stip, 1907 FbStride stipStride, 1908 int stipHeight, 1909 1910 FbBits fgand, 1911 FbBits fgxor, 1912 FbBits bgand, 1913 FbBits bgxor, 1914 1915 int xRot, 1916 int yRot); 1917 1918extern _X_EXPORT void 1919fbOddStipple (FbBits *dst, 1920 FbStride dstStride, 1921 int dstX, 1922 int dstBpp, 1923 1924 int width, 1925 int height, 1926 1927 FbStip *stip, 1928 FbStride stipStride, 1929 int stipWidth, 1930 int stipHeight, 1931 1932 FbBits fgand, 1933 FbBits fgxor, 1934 FbBits bgand, 1935 FbBits bgxor, 1936 1937 int xRot, 1938 int yRot); 1939 1940extern _X_EXPORT void 1941fbStipple (FbBits *dst, 1942 FbStride dstStride, 1943 int dstX, 1944 int dstBpp, 1945 1946 int width, 1947 int height, 1948 1949 FbStip *stip, 1950 FbStride stipStride, 1951 int stipWidth, 1952 int stipHeight, 1953 Bool even, 1954 1955 FbBits fgand, 1956 FbBits fgxor, 1957 FbBits bgand, 1958 FbBits bgxor, 1959 1960 int xRot, 1961 int yRot); 1962 1963/* 1964 * fbtile.c 1965 */ 1966 1967extern _X_EXPORT void 1968fbEvenTile (FbBits *dst, 1969 FbStride dstStride, 1970 int dstX, 1971 1972 int width, 1973 int height, 1974 1975 FbBits *tile, 1976 FbStride tileStride, 1977 int tileHeight, 1978 1979 int alu, 1980 FbBits pm, 1981 int xRot, 1982 int yRot); 1983 1984extern _X_EXPORT void 1985fbOddTile (FbBits *dst, 1986 FbStride dstStride, 1987 int dstX, 1988 1989 int width, 1990 int height, 1991 1992 FbBits *tile, 1993 FbStride tileStride, 1994 int tileWidth, 1995 int tileHeight, 1996 1997 int alu, 1998 FbBits pm, 1999 int bpp, 2000 2001 int xRot, 2002 int yRot); 2003 2004extern _X_EXPORT void 2005fbTile (FbBits *dst, 2006 FbStride dstStride, 2007 int dstX, 2008 2009 int width, 2010 int height, 2011 2012 FbBits *tile, 2013 FbStride tileStride, 2014 int tileWidth, 2015 int tileHeight, 2016 2017 int alu, 2018 FbBits pm, 2019 int bpp, 2020 2021 int xRot, 2022 int yRot); 2023 2024/* 2025 * fbutil.c 2026 */ 2027extern _X_EXPORT FbBits 2028fbReplicatePixel (Pixel p, int bpp); 2029 2030extern _X_EXPORT void 2031fbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp); 2032 2033#ifdef FB_ACCESS_WRAPPER 2034extern _X_EXPORT ReadMemoryProcPtr wfbReadMemory; 2035extern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory; 2036#endif 2037 2038/* 2039 * fbwindow.c 2040 */ 2041 2042extern _X_EXPORT Bool 2043fbCreateWindow(WindowPtr pWin); 2044 2045extern _X_EXPORT Bool 2046fbDestroyWindow(WindowPtr pWin); 2047 2048extern _X_EXPORT Bool 2049fbMapWindow(WindowPtr pWindow); 2050 2051extern _X_EXPORT Bool 2052fbPositionWindow(WindowPtr pWin, int x, int y); 2053 2054extern _X_EXPORT Bool 2055fbUnmapWindow(WindowPtr pWindow); 2056 2057extern _X_EXPORT void 2058fbCopyWindowProc (DrawablePtr pSrcDrawable, 2059 DrawablePtr pDstDrawable, 2060 GCPtr pGC, 2061 BoxPtr pbox, 2062 int nbox, 2063 int dx, 2064 int dy, 2065 Bool reverse, 2066 Bool upsidedown, 2067 Pixel bitplane, 2068 void *closure); 2069 2070extern _X_EXPORT void 2071fbCopyWindow(WindowPtr pWin, 2072 DDXPointRec ptOldOrg, 2073 RegionPtr prgnSrc); 2074 2075extern _X_EXPORT Bool 2076fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask); 2077 2078extern _X_EXPORT void 2079fbFillRegionSolid (DrawablePtr pDrawable, 2080 RegionPtr pRegion, 2081 FbBits and, 2082 FbBits xor); 2083 2084extern _X_EXPORT pixman_image_t * 2085image_from_pict (PicturePtr pict, 2086 Bool has_clip, 2087 int *xoff, 2088 int *yoff); 2089 2090extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *); 2091 2092#endif /* _FB_H_ */ 2093 2094