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