1706f2543Smrg/* 2706f2543Smrg * 3706f2543Smrg * Copyright © 1998 Keith Packard 4706f2543Smrg * 5706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its 6706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that 7706f2543Smrg * the above copyright notice appear in all copies and that both that 8706f2543Smrg * copyright notice and this permission notice appear in supporting 9706f2543Smrg * documentation, and that the name of Keith Packard not be used in 10706f2543Smrg * advertising or publicity pertaining to distribution of the software without 11706f2543Smrg * specific, written prior permission. Keith Packard makes no 12706f2543Smrg * representations about the suitability of this software for any purpose. It 13706f2543Smrg * is provided "as is" without express or implied warranty. 14706f2543Smrg * 15706f2543Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 16706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 17706f2543Smrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 18706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 19706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 20706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 21706f2543Smrg * PERFORMANCE OF THIS SOFTWARE. 22706f2543Smrg */ 23706f2543Smrg 24706f2543Smrg 25706f2543Smrg#ifndef _FB_H_ 26706f2543Smrg#define _FB_H_ 27706f2543Smrg 28706f2543Smrg#include <X11/X.h> 29706f2543Smrg#include <pixman.h> 30706f2543Smrg 31706f2543Smrg#include "scrnintstr.h" 32706f2543Smrg#include "pixmap.h" 33706f2543Smrg#include "pixmapstr.h" 34706f2543Smrg#include "region.h" 35706f2543Smrg#include "gcstruct.h" 36706f2543Smrg#include "colormap.h" 37706f2543Smrg#include "miscstruct.h" 38706f2543Smrg#include "servermd.h" 39706f2543Smrg#include "windowstr.h" 40706f2543Smrg#include "privates.h" 41706f2543Smrg#include "mi.h" 42706f2543Smrg#include "migc.h" 43706f2543Smrg#include "mibstore.h" 44706f2543Smrg#include "picturestr.h" 45706f2543Smrg 46706f2543Smrg#ifdef FB_ACCESS_WRAPPER 47706f2543Smrg 48706f2543Smrg#include "wfbrename.h" 49706f2543Smrg#define FBPREFIX(x) wfb##x 50706f2543Smrg#define WRITE(ptr, val) ((*wfbWriteMemory)((ptr), (val), sizeof(*(ptr)))) 51706f2543Smrg#define READ(ptr) ((*wfbReadMemory)((ptr), sizeof(*(ptr)))) 52706f2543Smrg 53706f2543Smrg#define MEMCPY_WRAPPED(dst, src, size) do { \ 54706f2543Smrg size_t _i; \ 55706f2543Smrg CARD8 *_dst = (CARD8*)(dst), *_src = (CARD8*)(src); \ 56706f2543Smrg for(_i = 0; _i < size; _i++) { \ 57706f2543Smrg WRITE(_dst +_i, READ(_src + _i)); \ 58706f2543Smrg } \ 59706f2543Smrg} while(0) 60706f2543Smrg 61706f2543Smrg#define MEMSET_WRAPPED(dst, val, size) do { \ 62706f2543Smrg size_t _i; \ 63706f2543Smrg CARD8 *_dst = (CARD8*)(dst); \ 64706f2543Smrg for(_i = 0; _i < size; _i++) { \ 65706f2543Smrg WRITE(_dst +_i, (val)); \ 66706f2543Smrg } \ 67706f2543Smrg} while(0) 68706f2543Smrg 69706f2543Smrg#else 70706f2543Smrg 71706f2543Smrg#define FBPREFIX(x) fb##x 72706f2543Smrg#define WRITE(ptr, val) (*(ptr) = (val)) 73706f2543Smrg#define READ(ptr) (*(ptr)) 74706f2543Smrg#define MEMCPY_WRAPPED(dst, src, size) memcpy((dst), (src), (size)) 75706f2543Smrg#define MEMSET_WRAPPED(dst, val, size) memset((dst), (val), (size)) 76706f2543Smrg 77706f2543Smrg#endif 78706f2543Smrg 79706f2543Smrg/* 80706f2543Smrg * This single define controls the basic size of data manipulated 81706f2543Smrg * by this software; it must be log2(sizeof (FbBits) * 8) 82706f2543Smrg */ 83706f2543Smrg 84706f2543Smrg#ifndef FB_SHIFT 85706f2543Smrg#define FB_SHIFT LOG2_BITMAP_PAD 86706f2543Smrg#endif 87706f2543Smrg 88706f2543Smrg#if FB_SHIFT < LOG2_BITMAP_PAD 89706f2543Smrg error FB_SHIFT must be >= LOG2_BITMAP_PAD 90706f2543Smrg#endif 91706f2543Smrg 92706f2543Smrg#define FB_UNIT (1 << FB_SHIFT) 93706f2543Smrg#define FB_HALFUNIT (1 << (FB_SHIFT-1)) 94706f2543Smrg#define FB_MASK (FB_UNIT - 1) 95706f2543Smrg#define FB_ALLONES ((FbBits) -1) 96706f2543Smrg 97706f2543Smrg#if GLYPHPADBYTES != 4 98706f2543Smrg#error "GLYPHPADBYTES must be 4" 99706f2543Smrg#endif 100706f2543Smrg/* whether to bother to include 24bpp support */ 101706f2543Smrg#ifndef FBNO24BIT 102706f2543Smrg#define FB_24BIT 103706f2543Smrg#endif 104706f2543Smrg 105706f2543Smrg/* 106706f2543Smrg * Unless otherwise instructed, fb includes code to advertise 24bpp 107706f2543Smrg * windows with 32bpp image format for application compatibility 108706f2543Smrg */ 109706f2543Smrg 110706f2543Smrg#ifdef FB_24BIT 111706f2543Smrg#ifndef FBNO24_32 112706f2543Smrg#define FB_24_32BIT 113706f2543Smrg#endif 114706f2543Smrg#endif 115706f2543Smrg 116706f2543Smrg#define FB_STIP_SHIFT LOG2_BITMAP_PAD 117706f2543Smrg#define FB_STIP_UNIT (1 << FB_STIP_SHIFT) 118706f2543Smrg#define FB_STIP_MASK (FB_STIP_UNIT - 1) 119706f2543Smrg#define FB_STIP_ALLONES ((FbStip) -1) 120706f2543Smrg 121706f2543Smrg#define FB_STIP_ODDSTRIDE(s) (((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0) 122706f2543Smrg#define FB_STIP_ODDPTR(p) ((((long) (p)) & (FB_MASK >> 3)) != 0) 123706f2543Smrg 124706f2543Smrg#define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT))) 125706f2543Smrg#define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT))) 126706f2543Smrg 127706f2543Smrg#define FbFullMask(n) ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1)) 128706f2543Smrg 129706f2543Smrg#if FB_SHIFT == 6 130706f2543Smrg# ifdef WIN32 131706f2543Smrgtypedef unsigned __int64 FbBits; 132706f2543Smrg# else 133706f2543Smrg# if defined(__alpha__) || defined(__alpha) || \ 134706f2543Smrg defined(ia64) || defined(__ia64__) || \ 135706f2543Smrg defined(__sparc64__) || defined(_LP64) || \ 136706f2543Smrg defined(__s390x__) || \ 137706f2543Smrg defined(amd64) || defined (__amd64__) || \ 138706f2543Smrg defined (__powerpc64__) 139706f2543Smrgtypedef unsigned long FbBits; 140706f2543Smrg# else 141706f2543Smrgtypedef unsigned long long FbBits; 142706f2543Smrg# endif 143706f2543Smrg# endif 144706f2543Smrg#endif 145706f2543Smrg 146706f2543Smrg#if FB_SHIFT == 5 147706f2543Smrgtypedef CARD32 FbBits; 148706f2543Smrg#endif 149706f2543Smrg 150706f2543Smrg#if FB_SHIFT == 4 151706f2543Smrgtypedef CARD16 FbBits; 152706f2543Smrg#endif 153706f2543Smrg 154706f2543Smrg#if LOG2_BITMAP_PAD == FB_SHIFT 155706f2543Smrgtypedef FbBits FbStip; 156706f2543Smrg#else 157706f2543Smrg# if LOG2_BITMAP_PAD == 5 158706f2543Smrgtypedef CARD32 FbStip; 159706f2543Smrg# endif 160706f2543Smrg#endif 161706f2543Smrg 162706f2543Smrgtypedef int FbStride; 163706f2543Smrg 164706f2543Smrg 165706f2543Smrg#ifdef FB_DEBUG 166706f2543Smrgextern _X_EXPORT void fbValidateDrawable(DrawablePtr d); 167706f2543Smrgextern _X_EXPORT void fbInitializeDrawable(DrawablePtr d); 168706f2543Smrgextern _X_EXPORT void fbSetBits (FbStip *bits, int stride, FbStip data); 169706f2543Smrg#define FB_HEAD_BITS (FbStip) (0xbaadf00d) 170706f2543Smrg#define FB_TAIL_BITS (FbStip) (0xbaddf0ad) 171706f2543Smrg#else 172706f2543Smrg#define fbValidateDrawable(d) 173706f2543Smrg#define fdInitializeDrawable(d) 174706f2543Smrg#endif 175706f2543Smrg 176706f2543Smrg#include "fbrop.h" 177706f2543Smrg 178706f2543Smrg#if BITMAP_BIT_ORDER == LSBFirst 179706f2543Smrg#define FbScrLeft(x,n) ((x) >> (n)) 180706f2543Smrg#define FbScrRight(x,n) ((x) << (n)) 181706f2543Smrg/* #define FbLeftBits(x,n) ((x) & ((((FbBits) 1) << (n)) - 1)) */ 182706f2543Smrg#define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1)) 183706f2543Smrg#define FbStipMoveLsb(x,s,n) (FbStipRight (x,(s)-(n))) 184706f2543Smrg#define FbPatternOffsetBits 0 185706f2543Smrg#else 186706f2543Smrg#define FbScrLeft(x,n) ((x) << (n)) 187706f2543Smrg#define FbScrRight(x,n) ((x) >> (n)) 188706f2543Smrg/* #define FbLeftBits(x,n) ((x) >> (FB_UNIT - (n))) */ 189706f2543Smrg#define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n))) 190706f2543Smrg#define FbStipMoveLsb(x,s,n) (x) 191706f2543Smrg#define FbPatternOffsetBits (sizeof (FbBits) - 1) 192706f2543Smrg#endif 193706f2543Smrg 194706f2543Smrg#include "micoord.h" 195706f2543Smrg 196706f2543Smrg#define FbStipLeft(x,n) FbScrLeft(x,n) 197706f2543Smrg#define FbStipRight(x,n) FbScrRight(x,n) 198706f2543Smrg 199706f2543Smrg#define FbRotLeft(x,n) FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0) 200706f2543Smrg#define FbRotRight(x,n) FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0) 201706f2543Smrg 202706f2543Smrg#define FbRotStipLeft(x,n) FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0) 203706f2543Smrg#define FbRotStipRight(x,n) FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0) 204706f2543Smrg 205706f2543Smrg#define FbLeftMask(x) ( ((x) & FB_MASK) ? \ 206706f2543Smrg FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0) 207706f2543Smrg#define FbRightMask(x) ( ((FB_UNIT - (x)) & FB_MASK) ? \ 208706f2543Smrg FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0) 209706f2543Smrg 210706f2543Smrg#define FbLeftStipMask(x) ( ((x) & FB_STIP_MASK) ? \ 211706f2543Smrg FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0) 212706f2543Smrg#define FbRightStipMask(x) ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \ 213706f2543Smrg FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0) 214706f2543Smrg 215706f2543Smrg#define FbBitsMask(x,w) (FbScrRight(FB_ALLONES,(x) & FB_MASK) & \ 216706f2543Smrg FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK)) 217706f2543Smrg 218706f2543Smrg#define FbStipMask(x,w) (FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \ 219706f2543Smrg FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK)) 220706f2543Smrg 221706f2543Smrg 222706f2543Smrg#define FbMaskBits(x,w,l,n,r) { \ 223706f2543Smrg n = (w); \ 224706f2543Smrg r = FbRightMask((x)+n); \ 225706f2543Smrg l = FbLeftMask(x); \ 226706f2543Smrg if (l) { \ 227706f2543Smrg n -= FB_UNIT - ((x) & FB_MASK); \ 228706f2543Smrg if (n < 0) { \ 229706f2543Smrg n = 0; \ 230706f2543Smrg l &= r; \ 231706f2543Smrg r = 0; \ 232706f2543Smrg } \ 233706f2543Smrg } \ 234706f2543Smrg n >>= FB_SHIFT; \ 235706f2543Smrg} 236706f2543Smrg 237706f2543Smrg#ifdef FBNOPIXADDR 238706f2543Smrg#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) FbMaskBits(x,w,l,n,r) 239706f2543Smrg#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \ 240706f2543Smrg *dst = FbDoMaskRRop(*dst,and,xor,l); \ 241706f2543Smrg} 242706f2543Smrg#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \ 243706f2543Smrg *dst = FbDoMaskRRop(*dst,and,xor,r); \ 244706f2543Smrg} 245706f2543Smrg#else 246706f2543Smrg 247706f2543Smrg#define FbByteMaskInvalid 0x10 248706f2543Smrg 249706f2543Smrg#define FbPatternOffset(o,t) ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1))) 250706f2543Smrg 251706f2543Smrg#define FbPtrOffset(p,o,t) ((t *) ((CARD8 *) (p) + (o))) 252706f2543Smrg#define FbSelectPatternPart(xor,o,t) ((xor) >> (FbPatternOffset (o,t) << 3)) 253706f2543Smrg#define FbStorePart(dst,off,t,xor) (WRITE(FbPtrOffset(dst,off,t), \ 254706f2543Smrg FbSelectPart(xor,off,t))) 255706f2543Smrg#ifndef FbSelectPart 256706f2543Smrg#define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t) 257706f2543Smrg#endif 258706f2543Smrg 259706f2543Smrg#define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \ 260706f2543Smrg n = (w); \ 261706f2543Smrg lb = 0; \ 262706f2543Smrg rb = 0; \ 263706f2543Smrg r = FbRightMask((x)+n); \ 264706f2543Smrg if (r) { \ 265706f2543Smrg /* compute right byte length */ \ 266706f2543Smrg if ((copy) && (((x) + n) & 7) == 0) { \ 267706f2543Smrg rb = (((x) + n) & FB_MASK) >> 3; \ 268706f2543Smrg } else { \ 269706f2543Smrg rb = FbByteMaskInvalid; \ 270706f2543Smrg } \ 271706f2543Smrg } \ 272706f2543Smrg l = FbLeftMask(x); \ 273706f2543Smrg if (l) { \ 274706f2543Smrg /* compute left byte length */ \ 275706f2543Smrg if ((copy) && ((x) & 7) == 0) { \ 276706f2543Smrg lb = ((x) & FB_MASK) >> 3; \ 277706f2543Smrg } else { \ 278706f2543Smrg lb = FbByteMaskInvalid; \ 279706f2543Smrg } \ 280706f2543Smrg /* subtract out the portion painted by leftMask */ \ 281706f2543Smrg n -= FB_UNIT - ((x) & FB_MASK); \ 282706f2543Smrg if (n < 0) { \ 283706f2543Smrg if (lb != FbByteMaskInvalid) { \ 284706f2543Smrg if (rb == FbByteMaskInvalid) { \ 285706f2543Smrg lb = FbByteMaskInvalid; \ 286706f2543Smrg } else if (rb) { \ 287706f2543Smrg lb |= (rb - lb) << (FB_SHIFT - 3); \ 288706f2543Smrg rb = 0; \ 289706f2543Smrg } \ 290706f2543Smrg } \ 291706f2543Smrg n = 0; \ 292706f2543Smrg l &= r; \ 293706f2543Smrg r = 0; \ 294706f2543Smrg }\ 295706f2543Smrg } \ 296706f2543Smrg n >>= FB_SHIFT; \ 297706f2543Smrg} 298706f2543Smrg 299706f2543Smrg#if FB_SHIFT == 6 300706f2543Smrg#define FbDoLeftMaskByteRRop6Cases(dst,xor) \ 301706f2543Smrg case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \ 302706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 303706f2543Smrg break; \ 304706f2543Smrg case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \ 305706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 306706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \ 307706f2543Smrg break; \ 308706f2543Smrg case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \ 309706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 310706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 311706f2543Smrg break; \ 312706f2543Smrg case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \ 313706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 314706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 315706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 316706f2543Smrg break; \ 317706f2543Smrg case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \ 318706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 319706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 320706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 321706f2543Smrg break; \ 322706f2543Smrg case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \ 323706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 324706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 325706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 326706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 327706f2543Smrg break; \ 328706f2543Smrg case (sizeof (FbBits) - 7): \ 329706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ 330706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 331706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 332706f2543Smrg break; \ 333706f2543Smrg case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \ 334706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \ 335706f2543Smrg break; \ 336706f2543Smrg case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \ 337706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 338706f2543Smrg break; \ 339706f2543Smrg case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \ 340706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 341706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 342706f2543Smrg break; \ 343706f2543Smrg case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \ 344706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 345706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 346706f2543Smrg break; \ 347706f2543Smrg case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \ 348706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 349706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 350706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 351706f2543Smrg break; \ 352706f2543Smrg case (sizeof (FbBits) - 6): \ 353706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ 354706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 355706f2543Smrg break; \ 356706f2543Smrg case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \ 357706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 358706f2543Smrg break; \ 359706f2543Smrg case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \ 360706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 361706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 362706f2543Smrg break; \ 363706f2543Smrg case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \ 364706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 365706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 366706f2543Smrg break; \ 367706f2543Smrg case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \ 368706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 369706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 370706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 371706f2543Smrg break; \ 372706f2543Smrg case (sizeof (FbBits) - 5): \ 373706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ 374706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 375706f2543Smrg break; \ 376706f2543Smrg case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \ 377706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ 378706f2543Smrg break; \ 379706f2543Smrg case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \ 380706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 381706f2543Smrg break; \ 382706f2543Smrg case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \ 383706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ 384706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 385706f2543Smrg break; \ 386706f2543Smrg case (sizeof (FbBits) - 4): \ 387706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ 388706f2543Smrg break; 389706f2543Smrg 390706f2543Smrg#define FbDoRightMaskByteRRop6Cases(dst,xor) \ 391706f2543Smrg case 4: \ 392706f2543Smrg FbStorePart(dst,0,CARD32,xor); \ 393706f2543Smrg break; \ 394706f2543Smrg case 5: \ 395706f2543Smrg FbStorePart(dst,0,CARD32,xor); \ 396706f2543Smrg FbStorePart(dst,4,CARD8,xor); \ 397706f2543Smrg break; \ 398706f2543Smrg case 6: \ 399706f2543Smrg FbStorePart(dst,0,CARD32,xor); \ 400706f2543Smrg FbStorePart(dst,4,CARD16,xor); \ 401706f2543Smrg break; \ 402706f2543Smrg case 7: \ 403706f2543Smrg FbStorePart(dst,0,CARD32,xor); \ 404706f2543Smrg FbStorePart(dst,4,CARD16,xor); \ 405706f2543Smrg FbStorePart(dst,6,CARD8,xor); \ 406706f2543Smrg break; 407706f2543Smrg#else 408706f2543Smrg#define FbDoLeftMaskByteRRop6Cases(dst,xor) 409706f2543Smrg#define FbDoRightMaskByteRRop6Cases(dst,xor) 410706f2543Smrg#endif 411706f2543Smrg 412706f2543Smrg#define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \ 413706f2543Smrg switch (lb) { \ 414706f2543Smrg FbDoLeftMaskByteRRop6Cases(dst,xor) \ 415706f2543Smrg case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \ 416706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ 417706f2543Smrg break; \ 418706f2543Smrg case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \ 419706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ 420706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 421706f2543Smrg break; \ 422706f2543Smrg case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \ 423706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ 424706f2543Smrg break; \ 425706f2543Smrg case sizeof (FbBits) - 3: \ 426706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ 427706f2543Smrg case sizeof (FbBits) - 2: \ 428706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \ 429706f2543Smrg break; \ 430706f2543Smrg case sizeof (FbBits) - 1: \ 431706f2543Smrg FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \ 432706f2543Smrg break; \ 433706f2543Smrg default: \ 434706f2543Smrg WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, l)); \ 435706f2543Smrg break; \ 436706f2543Smrg } \ 437706f2543Smrg} 438706f2543Smrg 439706f2543Smrg 440706f2543Smrg#define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \ 441706f2543Smrg switch (rb) { \ 442706f2543Smrg case 1: \ 443706f2543Smrg FbStorePart(dst,0,CARD8,xor); \ 444706f2543Smrg break; \ 445706f2543Smrg case 2: \ 446706f2543Smrg FbStorePart(dst,0,CARD16,xor); \ 447706f2543Smrg break; \ 448706f2543Smrg case 3: \ 449706f2543Smrg FbStorePart(dst,0,CARD16,xor); \ 450706f2543Smrg FbStorePart(dst,2,CARD8,xor); \ 451706f2543Smrg break; \ 452706f2543Smrg FbDoRightMaskByteRRop6Cases(dst,xor) \ 453706f2543Smrg default: \ 454706f2543Smrg WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, r)); \ 455706f2543Smrg } \ 456706f2543Smrg} 457706f2543Smrg#endif 458706f2543Smrg 459706f2543Smrg#define FbMaskStip(x,w,l,n,r) { \ 460706f2543Smrg n = (w); \ 461706f2543Smrg r = FbRightStipMask((x)+n); \ 462706f2543Smrg l = FbLeftStipMask(x); \ 463706f2543Smrg if (l) { \ 464706f2543Smrg n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \ 465706f2543Smrg if (n < 0) { \ 466706f2543Smrg n = 0; \ 467706f2543Smrg l &= r; \ 468706f2543Smrg r = 0; \ 469706f2543Smrg } \ 470706f2543Smrg } \ 471706f2543Smrg n >>= FB_STIP_SHIFT; \ 472706f2543Smrg} 473706f2543Smrg 474706f2543Smrg/* 475706f2543Smrg * These macros are used to transparently stipple 476706f2543Smrg * in copy mode; the expected usage is with 'n' constant 477706f2543Smrg * so all of the conditional parts collapse into a minimal 478706f2543Smrg * sequence of partial word writes 479706f2543Smrg * 480706f2543Smrg * 'n' is the bytemask of which bytes to store, 'a' is the address 481706f2543Smrg * of the FbBits base unit, 'o' is the offset within that unit 482706f2543Smrg * 483706f2543Smrg * The term "lane" comes from the hardware term "byte-lane" which 484706f2543Smrg */ 485706f2543Smrg 486706f2543Smrg#define FbLaneCase1(n,a,o) \ 487706f2543Smrg if ((n) == 0x01) { \ 488706f2543Smrg WRITE((CARD8 *) ((a)+FbPatternOffset(o,CARD8)), fgxor); \ 489706f2543Smrg } 490706f2543Smrg 491706f2543Smrg#define FbLaneCase2(n,a,o) \ 492706f2543Smrg if ((n) == 0x03) { \ 493706f2543Smrg WRITE((CARD16 *) ((a)+FbPatternOffset(o,CARD16)), fgxor); \ 494706f2543Smrg } else { \ 495706f2543Smrg FbLaneCase1((n)&1,a,o) \ 496706f2543Smrg FbLaneCase1((n)>>1,a,(o)+1) \ 497706f2543Smrg } 498706f2543Smrg 499706f2543Smrg#define FbLaneCase4(n,a,o) \ 500706f2543Smrg if ((n) == 0x0f) { \ 501706f2543Smrg WRITE((CARD32 *) ((a)+FbPatternOffset(o,CARD32)), fgxor); \ 502706f2543Smrg } else { \ 503706f2543Smrg FbLaneCase2((n)&3,a,o) \ 504706f2543Smrg FbLaneCase2((n)>>2,a,(o)+2) \ 505706f2543Smrg } 506706f2543Smrg 507706f2543Smrg#define FbLaneCase8(n,a,o) \ 508706f2543Smrg if ((n) == 0x0ff) { \ 509706f2543Smrg *(FbBits *) ((a)+(o)) = fgxor; \ 510706f2543Smrg } else { \ 511706f2543Smrg FbLaneCase4((n)&15,a,o) \ 512706f2543Smrg FbLaneCase4((n)>>4,a,(o)+4) \ 513706f2543Smrg } 514706f2543Smrg 515706f2543Smrg#if FB_SHIFT == 6 516706f2543Smrg#define FbLaneCase(n,a) FbLaneCase8(n,(CARD8 *) (a),0) 517706f2543Smrg#endif 518706f2543Smrg 519706f2543Smrg#if FB_SHIFT == 5 520706f2543Smrg#define FbLaneCase(n,a) FbLaneCase4(n,(CARD8 *) (a),0) 521706f2543Smrg#endif 522706f2543Smrg 523706f2543Smrg/* Rotate a filled pixel value to the specified alignement */ 524706f2543Smrg#define FbRot24(p,b) (FbScrRight(p,b) | FbScrLeft(p,24-(b))) 525706f2543Smrg#define FbRot24Stip(p,b) (FbStipRight(p,b) | FbStipLeft(p,24-(b))) 526706f2543Smrg 527706f2543Smrg/* step a filled pixel value to the next/previous FB_UNIT alignment */ 528706f2543Smrg#define FbNext24Pix(p) (FbRot24(p,(24-FB_UNIT%24))) 529706f2543Smrg#define FbPrev24Pix(p) (FbRot24(p,FB_UNIT%24)) 530706f2543Smrg#define FbNext24Stip(p) (FbRot24(p,(24-FB_STIP_UNIT%24))) 531706f2543Smrg#define FbPrev24Stip(p) (FbRot24(p,FB_STIP_UNIT%24)) 532706f2543Smrg 533706f2543Smrg/* step a rotation value to the next/previous rotation value */ 534706f2543Smrg#if FB_UNIT == 64 535706f2543Smrg#define FbNext24Rot(r) ((r) == 16 ? 0 : (r) + 8) 536706f2543Smrg#define FbPrev24Rot(r) ((r) == 0 ? 16 : (r) - 8) 537706f2543Smrg 538706f2543Smrg#if IMAGE_BYTE_ORDER == MSBFirst 539706f2543Smrg#define FbFirst24Rot(x) (((x) + 8) % 24) 540706f2543Smrg#else 541706f2543Smrg#define FbFirst24Rot(x) ((x) % 24) 542706f2543Smrg#endif 543706f2543Smrg 544706f2543Smrg#endif 545706f2543Smrg 546706f2543Smrg#if FB_UNIT == 32 547706f2543Smrg#define FbNext24Rot(r) ((r) == 0 ? 16 : (r) - 8) 548706f2543Smrg#define FbPrev24Rot(r) ((r) == 16 ? 0 : (r) + 8) 549706f2543Smrg 550706f2543Smrg#if IMAGE_BYTE_ORDER == MSBFirst 551706f2543Smrg#define FbFirst24Rot(x) (((x) + 16) % 24) 552706f2543Smrg#else 553706f2543Smrg#define FbFirst24Rot(x) ((x) % 24) 554706f2543Smrg#endif 555706f2543Smrg#endif 556706f2543Smrg 557706f2543Smrg#define FbNext24RotStip(r) ((r) == 0 ? 16 : (r) - 8) 558706f2543Smrg#define FbPrev24RotStip(r) ((r) == 16 ? 0 : (r) + 8) 559706f2543Smrg 560706f2543Smrg/* Whether 24-bit specific code is needed for this filled pixel value */ 561706f2543Smrg#define FbCheck24Pix(p) ((p) == FbNext24Pix(p)) 562706f2543Smrg 563706f2543Smrg/* Macros for dealing with dashing */ 564706f2543Smrg 565706f2543Smrg#define FbDashDeclare \ 566706f2543Smrg unsigned char *__dash, *__firstDash, *__lastDash 567706f2543Smrg 568706f2543Smrg#define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) { \ 569706f2543Smrg (even) = TRUE; \ 570706f2543Smrg __firstDash = (pGC)->dash; \ 571706f2543Smrg __lastDash = __firstDash + (pGC)->numInDashList; \ 572706f2543Smrg (dashOffset) %= (pPriv)->dashLength; \ 573706f2543Smrg \ 574706f2543Smrg __dash = __firstDash; \ 575706f2543Smrg while ((dashOffset) >= ((dashlen) = *__dash)) \ 576706f2543Smrg { \ 577706f2543Smrg (dashOffset) -= (dashlen); \ 578706f2543Smrg (even) = 1-(even); \ 579706f2543Smrg if (++__dash == __lastDash) \ 580706f2543Smrg __dash = __firstDash; \ 581706f2543Smrg } \ 582706f2543Smrg (dashlen) -= (dashOffset); \ 583706f2543Smrg} 584706f2543Smrg 585706f2543Smrg#define FbDashNext(dashlen) { \ 586706f2543Smrg if (++__dash == __lastDash) \ 587706f2543Smrg __dash = __firstDash; \ 588706f2543Smrg (dashlen) = *__dash; \ 589706f2543Smrg} 590706f2543Smrg 591706f2543Smrg/* as numInDashList is always even, this case can skip a test */ 592706f2543Smrg 593706f2543Smrg#define FbDashNextEven(dashlen) { \ 594706f2543Smrg (dashlen) = *++__dash; \ 595706f2543Smrg} 596706f2543Smrg 597706f2543Smrg#define FbDashNextOdd(dashlen) FbDashNext(dashlen) 598706f2543Smrg 599706f2543Smrg#define FbDashStep(dashlen,even) { \ 600706f2543Smrg if (!--(dashlen)) { \ 601706f2543Smrg FbDashNext(dashlen); \ 602706f2543Smrg (even) = 1-(even); \ 603706f2543Smrg } \ 604706f2543Smrg} 605706f2543Smrg 606706f2543Smrgextern _X_EXPORT DevPrivateKey 607706f2543SmrgfbGetGCPrivateKey (void); 608706f2543Smrg 609706f2543Smrgextern _X_EXPORT DevPrivateKey 610706f2543SmrgfbGetWinPrivateKey (void); 611706f2543Smrg 612706f2543Smrgextern _X_EXPORT const GCOps fbGCOps; 613706f2543Smrgextern _X_EXPORT const GCFuncs fbGCFuncs; 614706f2543Smrg 615706f2543Smrg#ifdef FB_24_32BIT 616706f2543Smrg#define FB_SCREEN_PRIVATE 617706f2543Smrg#endif 618706f2543Smrg 619706f2543Smrg/* Framebuffer access wrapper */ 620706f2543Smrgtypedef FbBits (*ReadMemoryProcPtr)(const void *src, int size); 621706f2543Smrgtypedef void (*WriteMemoryProcPtr)(void *dst, FbBits value, int size); 622706f2543Smrgtypedef void (*SetupWrapProcPtr)(ReadMemoryProcPtr *pRead, 623706f2543Smrg WriteMemoryProcPtr *pWrite, 624706f2543Smrg DrawablePtr pDraw); 625706f2543Smrgtypedef void (*FinishWrapProcPtr)(DrawablePtr pDraw); 626706f2543Smrg 627706f2543Smrg#ifdef FB_ACCESS_WRAPPER 628706f2543Smrg 629706f2543Smrg#define fbPrepareAccess(pDraw) \ 630706f2543Smrg fbGetScreenPrivate((pDraw)->pScreen)->setupWrap( \ 631706f2543Smrg &wfbReadMemory, \ 632706f2543Smrg &wfbWriteMemory, \ 633706f2543Smrg (pDraw)) 634706f2543Smrg#define fbFinishAccess(pDraw) \ 635706f2543Smrg fbGetScreenPrivate((pDraw)->pScreen)->finishWrap(pDraw) 636706f2543Smrg 637706f2543Smrg#else 638706f2543Smrg 639706f2543Smrg#define fbPrepareAccess(pPix) 640706f2543Smrg#define fbFinishAccess(pDraw) 641706f2543Smrg 642706f2543Smrg#endif 643706f2543Smrg 644706f2543Smrg 645706f2543Smrg#ifdef FB_SCREEN_PRIVATE 646706f2543Smrgextern _X_EXPORT DevPrivateKey 647706f2543SmrgfbGetScreenPrivateKey(void); 648706f2543Smrg 649706f2543Smrg/* private field of a screen */ 650706f2543Smrgtypedef struct { 651706f2543Smrg unsigned char win32bpp; /* window bpp for 32-bpp images */ 652706f2543Smrg unsigned char pix32bpp; /* pixmap bpp for 32-bpp images */ 653706f2543Smrg#ifdef FB_ACCESS_WRAPPER 654706f2543Smrg SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */ 655706f2543Smrg FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */ 656706f2543Smrg#endif 657706f2543Smrg} FbScreenPrivRec, *FbScreenPrivPtr; 658706f2543Smrg 659706f2543Smrg#define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \ 660706f2543Smrg dixLookupPrivate(&(pScreen)->devPrivates, fbGetScreenPrivateKey())) 661706f2543Smrg#endif 662706f2543Smrg 663706f2543Smrg/* private field of GC */ 664706f2543Smrgtypedef struct { 665706f2543Smrg FbBits and, xor; /* reduced rop values */ 666706f2543Smrg FbBits bgand, bgxor; /* for stipples */ 667706f2543Smrg FbBits fg, bg, pm; /* expanded and filled */ 668706f2543Smrg unsigned int dashLength; /* total of all dash elements */ 669706f2543Smrg unsigned char evenStipple; /* stipple is even */ 670706f2543Smrg unsigned char bpp; /* current drawable bpp */ 671706f2543Smrg} FbGCPrivRec, *FbGCPrivPtr; 672706f2543Smrg 673706f2543Smrg#define fbGetGCPrivate(pGC) ((FbGCPrivPtr)\ 674706f2543Smrg dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey())) 675706f2543Smrg 676706f2543Smrg#define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip) 677706f2543Smrg#define fbGetExpose(pGC) ((pGC)->fExpose) 678706f2543Smrg#define fbGetFreeCompClip(pGC) ((pGC)->freeCompClip) 679706f2543Smrg#define fbGetRotatedPixmap(pGC) ((pGC)->pRotatedPixmap) 680706f2543Smrg 681706f2543Smrg#define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate) 682706f2543Smrg#define fbGetWindowPixmap(pWin) ((PixmapPtr)\ 683706f2543Smrg dixLookupPrivate(&((WindowPtr)(pWin))->devPrivates, fbGetWinPrivateKey())) 684706f2543Smrg 685706f2543Smrg#ifdef ROOTLESS 686706f2543Smrg#define __fbPixDrawableX(pPix) ((pPix)->drawable.x) 687706f2543Smrg#define __fbPixDrawableY(pPix) ((pPix)->drawable.y) 688706f2543Smrg#else 689706f2543Smrg#define __fbPixDrawableX(pPix) 0 690706f2543Smrg#define __fbPixDrawableY(pPix) 0 691706f2543Smrg#endif 692706f2543Smrg 693706f2543Smrg#ifdef COMPOSITE 694706f2543Smrg#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix) - (pPix)->screen_x) 695706f2543Smrg#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix) - (pPix)->screen_y) 696706f2543Smrg#else 697706f2543Smrg#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix)) 698706f2543Smrg#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix)) 699706f2543Smrg#endif 700706f2543Smrg#define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix)) 701706f2543Smrg#define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix)) 702706f2543Smrg 703706f2543Smrg#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) { \ 704706f2543Smrg if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ 705706f2543Smrg (pixmap) = fbGetWindowPixmap(pDrawable); \ 706706f2543Smrg (xoff) = __fbPixOffXWin(pixmap); \ 707706f2543Smrg (yoff) = __fbPixOffYWin(pixmap); \ 708706f2543Smrg } else { \ 709706f2543Smrg (pixmap) = (PixmapPtr) (pDrawable); \ 710706f2543Smrg (xoff) = __fbPixOffXPix(pixmap); \ 711706f2543Smrg (yoff) = __fbPixOffYPix(pixmap); \ 712706f2543Smrg } \ 713706f2543Smrg fbPrepareAccess(pDrawable); \ 714706f2543Smrg} 715706f2543Smrg 716706f2543Smrg#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) { \ 717706f2543Smrg (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; \ 718706f2543Smrg (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride); \ 719706f2543Smrg (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ 720706f2543Smrg} 721706f2543Smrg 722706f2543Smrg#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) { \ 723706f2543Smrg (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; \ 724706f2543Smrg (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride); \ 725706f2543Smrg (bpp) = (pixmap)->drawable.bitsPerPixel; (void)(bpp); \ 726706f2543Smrg} 727706f2543Smrg 728706f2543Smrg#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ 729706f2543Smrg PixmapPtr _pPix; \ 730706f2543Smrg fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ 731706f2543Smrg fbGetPixmapBitsData(_pPix, pointer, stride, bpp); \ 732706f2543Smrg} 733706f2543Smrg 734706f2543Smrg#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ 735706f2543Smrg PixmapPtr _pPix; \ 736706f2543Smrg fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); \ 737706f2543Smrg fbGetPixmapStipData(_pPix, pointer, stride, bpp); \ 738706f2543Smrg} 739706f2543Smrg 740706f2543Smrg/* 741706f2543Smrg * XFree86 empties the root BorderClip when the VT is inactive, 742706f2543Smrg * here's a macro which uses that to disable GetImage and GetSpans 743706f2543Smrg */ 744706f2543Smrg 745706f2543Smrg#define fbWindowEnabled(pWin) \ 746706f2543Smrg RegionNotEmpty(&(pWin)->drawable.pScreen->root->borderClip) 747706f2543Smrg 748706f2543Smrg#define fbDrawableEnabled(pDrawable) \ 749706f2543Smrg ((pDrawable)->type == DRAWABLE_PIXMAP ? \ 750706f2543Smrg TRUE : fbWindowEnabled((WindowPtr) pDrawable)) 751706f2543Smrg 752706f2543Smrg#define FbPowerOfTwo(w) (((w) & ((w) - 1)) == 0) 753706f2543Smrg/* 754706f2543Smrg * Accelerated tiles are power of 2 width <= FB_UNIT 755706f2543Smrg */ 756706f2543Smrg#define FbEvenTile(w) ((w) <= FB_UNIT && FbPowerOfTwo(w)) 757706f2543Smrg/* 758706f2543Smrg * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp 759706f2543Smrg * with dstBpp a power of 2 as well 760706f2543Smrg */ 761706f2543Smrg#define FbEvenStip(w,bpp) ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp)) 762706f2543Smrg 763706f2543Smrg/* 764706f2543Smrg * fb24_32.c 765706f2543Smrg */ 766706f2543Smrgextern _X_EXPORT void 767706f2543Smrgfb24_32GetSpans(DrawablePtr pDrawable, 768706f2543Smrg int wMax, 769706f2543Smrg DDXPointPtr ppt, 770706f2543Smrg int *pwidth, 771706f2543Smrg int nspans, 772706f2543Smrg char *pchardstStart); 773706f2543Smrg 774706f2543Smrgextern _X_EXPORT void 775706f2543Smrgfb24_32SetSpans (DrawablePtr pDrawable, 776706f2543Smrg GCPtr pGC, 777706f2543Smrg char *src, 778706f2543Smrg DDXPointPtr ppt, 779706f2543Smrg int *pwidth, 780706f2543Smrg int nspans, 781706f2543Smrg int fSorted); 782706f2543Smrg 783706f2543Smrgextern _X_EXPORT void 784706f2543Smrgfb24_32PutZImage (DrawablePtr pDrawable, 785706f2543Smrg RegionPtr pClip, 786706f2543Smrg int alu, 787706f2543Smrg FbBits pm, 788706f2543Smrg int x, 789706f2543Smrg int y, 790706f2543Smrg int width, 791706f2543Smrg int height, 792706f2543Smrg CARD8 *src, 793706f2543Smrg FbStride srcStride); 794706f2543Smrg 795706f2543Smrgextern _X_EXPORT void 796706f2543Smrgfb24_32GetImage (DrawablePtr pDrawable, 797706f2543Smrg int x, 798706f2543Smrg int y, 799706f2543Smrg int w, 800706f2543Smrg int h, 801706f2543Smrg unsigned int format, 802706f2543Smrg unsigned long planeMask, 803706f2543Smrg char *d); 804706f2543Smrg 805706f2543Smrgextern _X_EXPORT void 806706f2543Smrgfb24_32CopyMtoN (DrawablePtr pSrcDrawable, 807706f2543Smrg DrawablePtr pDstDrawable, 808706f2543Smrg GCPtr pGC, 809706f2543Smrg BoxPtr pbox, 810706f2543Smrg int nbox, 811706f2543Smrg int dx, 812706f2543Smrg int dy, 813706f2543Smrg Bool reverse, 814706f2543Smrg Bool upsidedown, 815706f2543Smrg Pixel bitplane, 816706f2543Smrg void *closure); 817706f2543Smrg 818706f2543Smrgextern _X_EXPORT PixmapPtr 819706f2543Smrgfb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel); 820706f2543Smrg 821706f2543Smrgextern _X_EXPORT Bool 822706f2543Smrgfb24_32CreateScreenResources(ScreenPtr pScreen); 823706f2543Smrg 824706f2543Smrgextern _X_EXPORT Bool 825706f2543Smrgfb24_32ModifyPixmapHeader (PixmapPtr pPixmap, 826706f2543Smrg int width, 827706f2543Smrg int height, 828706f2543Smrg int depth, 829706f2543Smrg int bitsPerPixel, 830706f2543Smrg int devKind, 831706f2543Smrg pointer pPixData); 832706f2543Smrg 833706f2543Smrg/* 834706f2543Smrg * fballpriv.c 835706f2543Smrg */ 836706f2543Smrgextern _X_EXPORT Bool 837706f2543SmrgfbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCIndex); 838706f2543Smrg 839706f2543Smrg/* 840706f2543Smrg * fbarc.c 841706f2543Smrg */ 842706f2543Smrg 843706f2543Smrgextern _X_EXPORT void 844706f2543SmrgfbPolyArc (DrawablePtr pDrawable, 845706f2543Smrg GCPtr pGC, 846706f2543Smrg int narcs, 847706f2543Smrg xArc *parcs); 848706f2543Smrg 849706f2543Smrg/* 850706f2543Smrg * fbbits.c 851706f2543Smrg */ 852706f2543Smrg 853706f2543Smrgextern _X_EXPORT void 854706f2543SmrgfbBresSolid8(DrawablePtr pDrawable, 855706f2543Smrg GCPtr pGC, 856706f2543Smrg int dashOffset, 857706f2543Smrg int signdx, 858706f2543Smrg int signdy, 859706f2543Smrg int axis, 860706f2543Smrg int x, 861706f2543Smrg int y, 862706f2543Smrg int e, 863706f2543Smrg int e1, 864706f2543Smrg int e3, 865706f2543Smrg int len); 866706f2543Smrg 867706f2543Smrgextern _X_EXPORT void 868706f2543SmrgfbBresDash8 (DrawablePtr pDrawable, 869706f2543Smrg GCPtr pGC, 870706f2543Smrg int dashOffset, 871706f2543Smrg int signdx, 872706f2543Smrg int signdy, 873706f2543Smrg int axis, 874706f2543Smrg int x, 875706f2543Smrg int y, 876706f2543Smrg int e, 877706f2543Smrg int e1, 878706f2543Smrg int e3, 879706f2543Smrg int len); 880706f2543Smrg 881706f2543Smrgextern _X_EXPORT void 882706f2543SmrgfbDots8 (FbBits *dst, 883706f2543Smrg FbStride dstStride, 884706f2543Smrg int dstBpp, 885706f2543Smrg BoxPtr pBox, 886706f2543Smrg xPoint *pts, 887706f2543Smrg int npt, 888706f2543Smrg int xorg, 889706f2543Smrg int yorg, 890706f2543Smrg int xoff, 891706f2543Smrg int yoff, 892706f2543Smrg FbBits and, 893706f2543Smrg FbBits xor); 894706f2543Smrg 895706f2543Smrgextern _X_EXPORT void 896706f2543SmrgfbArc8 (FbBits *dst, 897706f2543Smrg FbStride dstStride, 898706f2543Smrg int dstBpp, 899706f2543Smrg xArc *arc, 900706f2543Smrg int dx, 901706f2543Smrg int dy, 902706f2543Smrg FbBits and, 903706f2543Smrg FbBits xor); 904706f2543Smrg 905706f2543Smrgextern _X_EXPORT void 906706f2543SmrgfbGlyph8 (FbBits *dstLine, 907706f2543Smrg FbStride dstStride, 908706f2543Smrg int dstBpp, 909706f2543Smrg FbStip *stipple, 910706f2543Smrg FbBits fg, 911706f2543Smrg int height, 912706f2543Smrg int shift); 913706f2543Smrg 914706f2543Smrgextern _X_EXPORT void 915706f2543SmrgfbPolyline8 (DrawablePtr pDrawable, 916706f2543Smrg GCPtr pGC, 917706f2543Smrg int mode, 918706f2543Smrg int npt, 919706f2543Smrg DDXPointPtr ptsOrig); 920706f2543Smrg 921706f2543Smrgextern _X_EXPORT void 922706f2543SmrgfbPolySegment8 (DrawablePtr pDrawable, 923706f2543Smrg GCPtr pGC, 924706f2543Smrg int nseg, 925706f2543Smrg xSegment *pseg); 926706f2543Smrg 927706f2543Smrgextern _X_EXPORT void 928706f2543SmrgfbBresSolid16(DrawablePtr pDrawable, 929706f2543Smrg GCPtr pGC, 930706f2543Smrg int dashOffset, 931706f2543Smrg int signdx, 932706f2543Smrg int signdy, 933706f2543Smrg int axis, 934706f2543Smrg int x, 935706f2543Smrg int y, 936706f2543Smrg int e, 937706f2543Smrg int e1, 938706f2543Smrg int e3, 939706f2543Smrg int len); 940706f2543Smrg 941706f2543Smrgextern _X_EXPORT void 942706f2543SmrgfbBresDash16(DrawablePtr pDrawable, 943706f2543Smrg GCPtr pGC, 944706f2543Smrg int dashOffset, 945706f2543Smrg int signdx, 946706f2543Smrg int signdy, 947706f2543Smrg int axis, 948706f2543Smrg int x, 949706f2543Smrg int y, 950706f2543Smrg int e, 951706f2543Smrg int e1, 952706f2543Smrg int e3, 953706f2543Smrg int len); 954706f2543Smrg 955706f2543Smrgextern _X_EXPORT void 956706f2543SmrgfbDots16(FbBits *dst, 957706f2543Smrg FbStride dstStride, 958706f2543Smrg int dstBpp, 959706f2543Smrg BoxPtr pBox, 960706f2543Smrg xPoint *pts, 961706f2543Smrg int npt, 962706f2543Smrg int xorg, 963706f2543Smrg int yorg, 964706f2543Smrg int xoff, 965706f2543Smrg int yoff, 966706f2543Smrg FbBits and, 967706f2543Smrg FbBits xor); 968706f2543Smrg 969706f2543Smrgextern _X_EXPORT void 970706f2543SmrgfbArc16(FbBits *dst, 971706f2543Smrg FbStride dstStride, 972706f2543Smrg int dstBpp, 973706f2543Smrg xArc *arc, 974706f2543Smrg int dx, 975706f2543Smrg int dy, 976706f2543Smrg FbBits and, 977706f2543Smrg FbBits xor); 978706f2543Smrg 979706f2543Smrgextern _X_EXPORT void 980706f2543SmrgfbGlyph16(FbBits *dstLine, 981706f2543Smrg FbStride dstStride, 982706f2543Smrg int dstBpp, 983706f2543Smrg FbStip *stipple, 984706f2543Smrg FbBits fg, 985706f2543Smrg int height, 986706f2543Smrg int shift); 987706f2543Smrg 988706f2543Smrgextern _X_EXPORT void 989706f2543SmrgfbPolyline16 (DrawablePtr pDrawable, 990706f2543Smrg GCPtr pGC, 991706f2543Smrg int mode, 992706f2543Smrg int npt, 993706f2543Smrg DDXPointPtr ptsOrig); 994706f2543Smrg 995706f2543Smrgextern _X_EXPORT void 996706f2543SmrgfbPolySegment16 (DrawablePtr pDrawable, 997706f2543Smrg GCPtr pGC, 998706f2543Smrg int nseg, 999706f2543Smrg xSegment *pseg); 1000706f2543Smrg 1001706f2543Smrg 1002706f2543Smrgextern _X_EXPORT void 1003706f2543SmrgfbBresSolid24(DrawablePtr pDrawable, 1004706f2543Smrg GCPtr pGC, 1005706f2543Smrg int dashOffset, 1006706f2543Smrg int signdx, 1007706f2543Smrg int signdy, 1008706f2543Smrg int axis, 1009706f2543Smrg int x, 1010706f2543Smrg int y, 1011706f2543Smrg int e, 1012706f2543Smrg int e1, 1013706f2543Smrg int e3, 1014706f2543Smrg int len); 1015706f2543Smrg 1016706f2543Smrgextern _X_EXPORT void 1017706f2543SmrgfbBresDash24(DrawablePtr pDrawable, 1018706f2543Smrg GCPtr pGC, 1019706f2543Smrg int dashOffset, 1020706f2543Smrg int signdx, 1021706f2543Smrg int signdy, 1022706f2543Smrg int axis, 1023706f2543Smrg int x, 1024706f2543Smrg int y, 1025706f2543Smrg int e, 1026706f2543Smrg int e1, 1027706f2543Smrg int e3, 1028706f2543Smrg int len); 1029706f2543Smrg 1030706f2543Smrgextern _X_EXPORT void 1031706f2543SmrgfbDots24(FbBits *dst, 1032706f2543Smrg FbStride dstStride, 1033706f2543Smrg int dstBpp, 1034706f2543Smrg BoxPtr pBox, 1035706f2543Smrg xPoint *pts, 1036706f2543Smrg int npt, 1037706f2543Smrg int xorg, 1038706f2543Smrg int yorg, 1039706f2543Smrg int xoff, 1040706f2543Smrg int yoff, 1041706f2543Smrg FbBits and, 1042706f2543Smrg FbBits xor); 1043706f2543Smrg 1044706f2543Smrgextern _X_EXPORT void 1045706f2543SmrgfbArc24(FbBits *dst, 1046706f2543Smrg FbStride dstStride, 1047706f2543Smrg int dstBpp, 1048706f2543Smrg xArc *arc, 1049706f2543Smrg int dx, 1050706f2543Smrg int dy, 1051706f2543Smrg FbBits and, 1052706f2543Smrg FbBits xor); 1053706f2543Smrg 1054706f2543Smrgextern _X_EXPORT void 1055706f2543SmrgfbGlyph24(FbBits *dstLine, 1056706f2543Smrg FbStride dstStride, 1057706f2543Smrg int dstBpp, 1058706f2543Smrg FbStip *stipple, 1059706f2543Smrg FbBits fg, 1060706f2543Smrg int height, 1061706f2543Smrg int shift); 1062706f2543Smrg 1063706f2543Smrgextern _X_EXPORT void 1064706f2543SmrgfbPolyline24 (DrawablePtr pDrawable, 1065706f2543Smrg GCPtr pGC, 1066706f2543Smrg int mode, 1067706f2543Smrg int npt, 1068706f2543Smrg DDXPointPtr ptsOrig); 1069706f2543Smrg 1070706f2543Smrgextern _X_EXPORT void 1071706f2543SmrgfbPolySegment24 (DrawablePtr pDrawable, 1072706f2543Smrg GCPtr pGC, 1073706f2543Smrg int nseg, 1074706f2543Smrg xSegment *pseg); 1075706f2543Smrg 1076706f2543Smrg 1077706f2543Smrgextern _X_EXPORT void 1078706f2543SmrgfbBresSolid32(DrawablePtr pDrawable, 1079706f2543Smrg GCPtr pGC, 1080706f2543Smrg int dashOffset, 1081706f2543Smrg int signdx, 1082706f2543Smrg int signdy, 1083706f2543Smrg int axis, 1084706f2543Smrg int x, 1085706f2543Smrg int y, 1086706f2543Smrg int e, 1087706f2543Smrg int e1, 1088706f2543Smrg int e3, 1089706f2543Smrg int len); 1090706f2543Smrg 1091706f2543Smrgextern _X_EXPORT void 1092706f2543SmrgfbBresDash32(DrawablePtr pDrawable, 1093706f2543Smrg GCPtr pGC, 1094706f2543Smrg int dashOffset, 1095706f2543Smrg int signdx, 1096706f2543Smrg int signdy, 1097706f2543Smrg int axis, 1098706f2543Smrg int x, 1099706f2543Smrg int y, 1100706f2543Smrg int e, 1101706f2543Smrg int e1, 1102706f2543Smrg int e3, 1103706f2543Smrg int len); 1104706f2543Smrg 1105706f2543Smrgextern _X_EXPORT void 1106706f2543SmrgfbDots32(FbBits *dst, 1107706f2543Smrg FbStride dstStride, 1108706f2543Smrg int dstBpp, 1109706f2543Smrg BoxPtr pBox, 1110706f2543Smrg xPoint *pts, 1111706f2543Smrg int npt, 1112706f2543Smrg int xorg, 1113706f2543Smrg int yorg, 1114706f2543Smrg int xoff, 1115706f2543Smrg int yoff, 1116706f2543Smrg FbBits and, 1117706f2543Smrg FbBits xor); 1118706f2543Smrg 1119706f2543Smrgextern _X_EXPORT void 1120706f2543SmrgfbArc32(FbBits *dst, 1121706f2543Smrg FbStride dstStride, 1122706f2543Smrg int dstBpp, 1123706f2543Smrg xArc *arc, 1124706f2543Smrg int dx, 1125706f2543Smrg int dy, 1126706f2543Smrg FbBits and, 1127706f2543Smrg FbBits xor); 1128706f2543Smrg 1129706f2543Smrgextern _X_EXPORT void 1130706f2543SmrgfbGlyph32(FbBits *dstLine, 1131706f2543Smrg FbStride dstStride, 1132706f2543Smrg int dstBpp, 1133706f2543Smrg FbStip *stipple, 1134706f2543Smrg FbBits fg, 1135706f2543Smrg int height, 1136706f2543Smrg int shift); 1137706f2543Smrgextern _X_EXPORT void 1138706f2543SmrgfbPolyline32 (DrawablePtr pDrawable, 1139706f2543Smrg GCPtr pGC, 1140706f2543Smrg int mode, 1141706f2543Smrg int npt, 1142706f2543Smrg DDXPointPtr ptsOrig); 1143706f2543Smrg 1144706f2543Smrgextern _X_EXPORT void 1145706f2543SmrgfbPolySegment32 (DrawablePtr pDrawable, 1146706f2543Smrg GCPtr pGC, 1147706f2543Smrg int nseg, 1148706f2543Smrg xSegment *pseg); 1149706f2543Smrg 1150706f2543Smrg/* 1151706f2543Smrg * fbblt.c 1152706f2543Smrg */ 1153706f2543Smrgextern _X_EXPORT void 1154706f2543SmrgfbBlt (FbBits *src, 1155706f2543Smrg FbStride srcStride, 1156706f2543Smrg int srcX, 1157706f2543Smrg 1158706f2543Smrg FbBits *dst, 1159706f2543Smrg FbStride dstStride, 1160706f2543Smrg int dstX, 1161706f2543Smrg 1162706f2543Smrg int width, 1163706f2543Smrg int height, 1164706f2543Smrg 1165706f2543Smrg int alu, 1166706f2543Smrg FbBits pm, 1167706f2543Smrg int bpp, 1168706f2543Smrg 1169706f2543Smrg Bool reverse, 1170706f2543Smrg Bool upsidedown); 1171706f2543Smrg 1172706f2543Smrgextern _X_EXPORT void 1173706f2543SmrgfbBlt24 (FbBits *srcLine, 1174706f2543Smrg FbStride srcStride, 1175706f2543Smrg int srcX, 1176706f2543Smrg 1177706f2543Smrg FbBits *dstLine, 1178706f2543Smrg FbStride dstStride, 1179706f2543Smrg int dstX, 1180706f2543Smrg 1181706f2543Smrg int width, 1182706f2543Smrg int height, 1183706f2543Smrg 1184706f2543Smrg int alu, 1185706f2543Smrg FbBits pm, 1186706f2543Smrg 1187706f2543Smrg Bool reverse, 1188706f2543Smrg Bool upsidedown); 1189706f2543Smrg 1190706f2543Smrgextern _X_EXPORT void 1191706f2543SmrgfbBltStip (FbStip *src, 1192706f2543Smrg FbStride srcStride, /* in FbStip units, not FbBits units */ 1193706f2543Smrg int srcX, 1194706f2543Smrg 1195706f2543Smrg FbStip *dst, 1196706f2543Smrg FbStride dstStride, /* in FbStip units, not FbBits units */ 1197706f2543Smrg int dstX, 1198706f2543Smrg 1199706f2543Smrg int width, 1200706f2543Smrg int height, 1201706f2543Smrg 1202706f2543Smrg int alu, 1203706f2543Smrg FbBits pm, 1204706f2543Smrg int bpp); 1205706f2543Smrg 1206706f2543Smrg/* 1207706f2543Smrg * fbbltone.c 1208706f2543Smrg */ 1209706f2543Smrgextern _X_EXPORT void 1210706f2543SmrgfbBltOne (FbStip *src, 1211706f2543Smrg FbStride srcStride, 1212706f2543Smrg int srcX, 1213706f2543Smrg FbBits *dst, 1214706f2543Smrg FbStride dstStride, 1215706f2543Smrg int dstX, 1216706f2543Smrg int dstBpp, 1217706f2543Smrg 1218706f2543Smrg int width, 1219706f2543Smrg int height, 1220706f2543Smrg 1221706f2543Smrg FbBits fgand, 1222706f2543Smrg FbBits fbxor, 1223706f2543Smrg FbBits bgand, 1224706f2543Smrg FbBits bgxor); 1225706f2543Smrg 1226706f2543Smrg#ifdef FB_24BIT 1227706f2543Smrgextern _X_EXPORT void 1228706f2543SmrgfbBltOne24 (FbStip *src, 1229706f2543Smrg FbStride srcStride, /* FbStip units per scanline */ 1230706f2543Smrg int srcX, /* bit position of source */ 1231706f2543Smrg FbBits *dst, 1232706f2543Smrg FbStride dstStride, /* FbBits units per scanline */ 1233706f2543Smrg int dstX, /* bit position of dest */ 1234706f2543Smrg int dstBpp, /* bits per destination unit */ 1235706f2543Smrg 1236706f2543Smrg int width, /* width in bits of destination */ 1237706f2543Smrg int height, /* height in scanlines */ 1238706f2543Smrg 1239706f2543Smrg FbBits fgand, /* rrop values */ 1240706f2543Smrg FbBits fgxor, 1241706f2543Smrg FbBits bgand, 1242706f2543Smrg FbBits bgxor); 1243706f2543Smrg#endif 1244706f2543Smrg 1245706f2543Smrgextern _X_EXPORT void 1246706f2543SmrgfbBltPlane (FbBits *src, 1247706f2543Smrg FbStride srcStride, 1248706f2543Smrg int srcX, 1249706f2543Smrg int srcBpp, 1250706f2543Smrg 1251706f2543Smrg FbStip *dst, 1252706f2543Smrg FbStride dstStride, 1253706f2543Smrg int dstX, 1254706f2543Smrg 1255706f2543Smrg int width, 1256706f2543Smrg int height, 1257706f2543Smrg 1258706f2543Smrg FbStip fgand, 1259706f2543Smrg FbStip fgxor, 1260706f2543Smrg FbStip bgand, 1261706f2543Smrg FbStip bgxor, 1262706f2543Smrg Pixel planeMask); 1263706f2543Smrg 1264706f2543Smrg/* 1265706f2543Smrg * fbcmap_mi.c 1266706f2543Smrg */ 1267706f2543Smrgextern _X_EXPORT int 1268706f2543SmrgfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps); 1269706f2543Smrg 1270706f2543Smrgextern _X_EXPORT void 1271706f2543SmrgfbInstallColormap(ColormapPtr pmap); 1272706f2543Smrg 1273706f2543Smrgextern _X_EXPORT void 1274706f2543SmrgfbUninstallColormap(ColormapPtr pmap); 1275706f2543Smrg 1276706f2543Smrgextern _X_EXPORT void 1277706f2543SmrgfbResolveColor(unsigned short *pred, 1278706f2543Smrg unsigned short *pgreen, 1279706f2543Smrg unsigned short *pblue, 1280706f2543Smrg VisualPtr pVisual); 1281706f2543Smrg 1282706f2543Smrgextern _X_EXPORT Bool 1283706f2543SmrgfbInitializeColormap(ColormapPtr pmap); 1284706f2543Smrg 128588c603c7Stsutsuiextern _X_EXPORT Bool 128688c603c7StsutsuimfbCreateColormap(ColormapPtr pmap); 128788c603c7Stsutsui 1288706f2543Smrgextern _X_EXPORT int 1289706f2543SmrgfbExpandDirectColors (ColormapPtr pmap, 1290706f2543Smrg int ndef, 1291706f2543Smrg xColorItem *indefs, 1292706f2543Smrg xColorItem *outdefs); 1293706f2543Smrg 1294706f2543Smrgextern _X_EXPORT Bool 1295706f2543SmrgfbCreateDefColormap(ScreenPtr pScreen); 1296706f2543Smrg 1297706f2543Smrgextern _X_EXPORT void 1298706f2543SmrgfbClearVisualTypes(void); 1299706f2543Smrg 1300706f2543Smrgextern _X_EXPORT Bool 1301706f2543SmrgfbHasVisualTypes (int depth); 1302706f2543Smrg 1303706f2543Smrgextern _X_EXPORT Bool 1304706f2543SmrgfbSetVisualTypes (int depth, int visuals, int bitsPerRGB); 1305706f2543Smrg 1306706f2543Smrgextern _X_EXPORT Bool 1307706f2543SmrgfbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB, 1308706f2543Smrg Pixel redMask, Pixel greenMask, Pixel blueMask); 1309706f2543Smrg 1310706f2543Smrgextern _X_EXPORT Bool 1311706f2543SmrgfbInitVisuals (VisualPtr *visualp, 1312706f2543Smrg DepthPtr *depthp, 1313706f2543Smrg int *nvisualp, 1314706f2543Smrg int *ndepthp, 1315706f2543Smrg int *rootDepthp, 1316706f2543Smrg VisualID *defaultVisp, 1317706f2543Smrg unsigned long sizes, 1318706f2543Smrg int bitsPerRGB); 1319706f2543Smrg 1320706f2543Smrg/* 1321706f2543Smrg * fbcopy.c 1322706f2543Smrg */ 1323706f2543Smrg 1324706f2543Smrg/* Compatibility definition, to be removed at next ABI change. */ 1325706f2543Smrgtypedef void (*fbCopyProc) (DrawablePtr pSrcDrawable, 1326706f2543Smrg DrawablePtr pDstDrawable, 1327706f2543Smrg GCPtr pGC, 1328706f2543Smrg BoxPtr pDstBox, 1329706f2543Smrg int nbox, 1330706f2543Smrg int dx, 1331706f2543Smrg int dy, 1332706f2543Smrg Bool reverse, 1333706f2543Smrg Bool upsidedown, 1334706f2543Smrg Pixel bitplane, 1335706f2543Smrg void *closure); 1336706f2543Smrg 1337706f2543Smrgextern _X_EXPORT void 1338706f2543SmrgfbCopyNtoN (DrawablePtr pSrcDrawable, 1339706f2543Smrg DrawablePtr pDstDrawable, 1340706f2543Smrg GCPtr pGC, 1341706f2543Smrg BoxPtr pbox, 1342706f2543Smrg int nbox, 1343706f2543Smrg int dx, 1344706f2543Smrg int dy, 1345706f2543Smrg Bool reverse, 1346706f2543Smrg Bool upsidedown, 1347706f2543Smrg Pixel bitplane, 1348706f2543Smrg void *closure); 1349706f2543Smrg 1350706f2543Smrg/* Compatibility wrapper, to be removed at next ABI change. */ 1351706f2543Smrgextern _X_EXPORT void 1352706f2543SmrgfbCopyRegion (DrawablePtr pSrcDrawable, 1353706f2543Smrg DrawablePtr pDstDrawable, 1354706f2543Smrg GCPtr pGC, 1355706f2543Smrg RegionPtr pDstRegion, 1356706f2543Smrg int dx, 1357706f2543Smrg int dy, 1358706f2543Smrg fbCopyProc copyProc, 1359706f2543Smrg Pixel bitPlane, 1360706f2543Smrg void *closure); 1361706f2543Smrg 1362706f2543Smrg/* Compatibility wrapper, to be removed at next ABI change. */ 1363706f2543Smrgextern _X_EXPORT RegionPtr 1364706f2543SmrgfbDoCopy (DrawablePtr pSrcDrawable, 1365706f2543Smrg DrawablePtr pDstDrawable, 1366706f2543Smrg GCPtr pGC, 1367706f2543Smrg int xIn, 1368706f2543Smrg int yIn, 1369706f2543Smrg int widthSrc, 1370706f2543Smrg int heightSrc, 1371706f2543Smrg int xOut, 1372706f2543Smrg int yOut, 1373706f2543Smrg fbCopyProc copyProc, 1374706f2543Smrg Pixel bitplane, 1375706f2543Smrg void *closure); 1376706f2543Smrg 1377706f2543Smrgextern _X_EXPORT void 1378706f2543SmrgfbCopy1toN (DrawablePtr pSrcDrawable, 1379706f2543Smrg DrawablePtr pDstDrawable, 1380706f2543Smrg GCPtr pGC, 1381706f2543Smrg BoxPtr pbox, 1382706f2543Smrg int nbox, 1383706f2543Smrg int dx, 1384706f2543Smrg int dy, 1385706f2543Smrg Bool reverse, 1386706f2543Smrg Bool upsidedown, 1387706f2543Smrg Pixel bitplane, 1388706f2543Smrg void *closure); 1389706f2543Smrg 1390706f2543Smrgextern _X_EXPORT void 1391706f2543SmrgfbCopyNto1 (DrawablePtr pSrcDrawable, 1392706f2543Smrg DrawablePtr pDstDrawable, 1393706f2543Smrg GCPtr pGC, 1394706f2543Smrg BoxPtr pbox, 1395706f2543Smrg int nbox, 1396706f2543Smrg int dx, 1397706f2543Smrg int dy, 1398706f2543Smrg Bool reverse, 1399706f2543Smrg Bool upsidedown, 1400706f2543Smrg Pixel bitplane, 1401706f2543Smrg void *closure); 1402706f2543Smrg 1403706f2543Smrgextern _X_EXPORT RegionPtr 1404706f2543SmrgfbCopyArea (DrawablePtr pSrcDrawable, 1405706f2543Smrg DrawablePtr pDstDrawable, 1406706f2543Smrg GCPtr pGC, 1407706f2543Smrg int xIn, 1408706f2543Smrg int yIn, 1409706f2543Smrg int widthSrc, 1410706f2543Smrg int heightSrc, 1411706f2543Smrg int xOut, 1412706f2543Smrg int yOut); 1413706f2543Smrg 1414706f2543Smrgextern _X_EXPORT RegionPtr 1415706f2543SmrgfbCopyPlane (DrawablePtr pSrcDrawable, 1416706f2543Smrg DrawablePtr pDstDrawable, 1417706f2543Smrg GCPtr pGC, 1418706f2543Smrg int xIn, 1419706f2543Smrg int yIn, 1420706f2543Smrg int widthSrc, 1421706f2543Smrg int heightSrc, 1422706f2543Smrg int xOut, 1423706f2543Smrg int yOut, 1424706f2543Smrg unsigned long bitplane); 1425706f2543Smrg 1426706f2543Smrg/* 1427706f2543Smrg * fbfill.c 1428706f2543Smrg */ 1429706f2543Smrgextern _X_EXPORT void 1430706f2543SmrgfbFill (DrawablePtr pDrawable, 1431706f2543Smrg GCPtr pGC, 1432706f2543Smrg int x, 1433706f2543Smrg int y, 1434706f2543Smrg int width, 1435706f2543Smrg int height); 1436706f2543Smrg 1437706f2543Smrgextern _X_EXPORT void 1438706f2543SmrgfbSolidBoxClipped (DrawablePtr pDrawable, 1439706f2543Smrg RegionPtr pClip, 1440706f2543Smrg int xa, 1441706f2543Smrg int ya, 1442706f2543Smrg int xb, 1443706f2543Smrg int yb, 1444706f2543Smrg FbBits and, 1445706f2543Smrg FbBits xor); 1446706f2543Smrg 1447706f2543Smrg/* 1448706f2543Smrg * fbfillrect.c 1449706f2543Smrg */ 1450706f2543Smrgextern _X_EXPORT void 1451706f2543SmrgfbPolyFillRect(DrawablePtr pDrawable, 1452706f2543Smrg GCPtr pGC, 1453706f2543Smrg int nrectInit, 1454706f2543Smrg xRectangle *prectInit); 1455706f2543Smrg 1456706f2543Smrg#define fbPolyFillArc miPolyFillArc 1457706f2543Smrg 1458706f2543Smrg#define fbFillPolygon miFillPolygon 1459706f2543Smrg 1460706f2543Smrg/* 1461706f2543Smrg * fbfillsp.c 1462706f2543Smrg */ 1463706f2543Smrgextern _X_EXPORT void 1464706f2543SmrgfbFillSpans (DrawablePtr pDrawable, 1465706f2543Smrg GCPtr pGC, 1466706f2543Smrg int nInit, 1467706f2543Smrg DDXPointPtr pptInit, 1468706f2543Smrg int *pwidthInit, 1469706f2543Smrg int fSorted); 1470706f2543Smrg 1471706f2543Smrg 1472706f2543Smrg/* 1473706f2543Smrg * fbgc.c 1474706f2543Smrg */ 1475706f2543Smrg 1476706f2543Smrgextern _X_EXPORT Bool 1477706f2543SmrgfbCreateGC(GCPtr pGC); 1478706f2543Smrg 1479706f2543Smrgextern _X_EXPORT void 1480706f2543SmrgfbPadPixmap (PixmapPtr pPixmap); 1481706f2543Smrg 1482706f2543Smrgextern _X_EXPORT void 1483706f2543SmrgfbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); 1484706f2543Smrg 1485706f2543Smrg/* 1486706f2543Smrg * fbgetsp.c 1487706f2543Smrg */ 1488706f2543Smrgextern _X_EXPORT void 1489706f2543SmrgfbGetSpans(DrawablePtr pDrawable, 1490706f2543Smrg int wMax, 1491706f2543Smrg DDXPointPtr ppt, 1492706f2543Smrg int *pwidth, 1493706f2543Smrg int nspans, 1494706f2543Smrg char *pchardstStart); 1495706f2543Smrg 1496706f2543Smrg/* 1497706f2543Smrg * fbglyph.c 1498706f2543Smrg */ 1499706f2543Smrg 1500706f2543Smrgextern _X_EXPORT Bool 1501706f2543SmrgfbGlyphIn (RegionPtr pRegion, 1502706f2543Smrg int x, 1503706f2543Smrg int y, 1504706f2543Smrg int width, 1505706f2543Smrg int height); 1506706f2543Smrg 1507706f2543Smrgextern _X_EXPORT void 1508706f2543SmrgfbPolyGlyphBlt (DrawablePtr pDrawable, 1509706f2543Smrg GCPtr pGC, 1510706f2543Smrg int x, 1511706f2543Smrg int y, 1512706f2543Smrg unsigned int nglyph, 1513706f2543Smrg CharInfoPtr *ppci, 1514706f2543Smrg pointer pglyphBase); 1515706f2543Smrg 1516706f2543Smrgextern _X_EXPORT void 1517706f2543SmrgfbImageGlyphBlt (DrawablePtr pDrawable, 1518706f2543Smrg GCPtr pGC, 1519706f2543Smrg int x, 1520706f2543Smrg int y, 1521706f2543Smrg unsigned int nglyph, 1522706f2543Smrg CharInfoPtr *ppci, 1523706f2543Smrg pointer pglyphBase); 1524706f2543Smrg 1525706f2543Smrg/* 1526706f2543Smrg * fbimage.c 1527706f2543Smrg */ 1528706f2543Smrg 1529706f2543Smrgextern _X_EXPORT void 1530706f2543SmrgfbPutImage (DrawablePtr pDrawable, 1531706f2543Smrg GCPtr pGC, 1532706f2543Smrg int depth, 1533706f2543Smrg int x, 1534706f2543Smrg int y, 1535706f2543Smrg int w, 1536706f2543Smrg int h, 1537706f2543Smrg int leftPad, 1538706f2543Smrg int format, 1539706f2543Smrg char *pImage); 1540706f2543Smrg 1541706f2543Smrgextern _X_EXPORT void 1542706f2543SmrgfbPutZImage (DrawablePtr pDrawable, 1543706f2543Smrg RegionPtr pClip, 1544706f2543Smrg int alu, 1545706f2543Smrg FbBits pm, 1546706f2543Smrg int x, 1547706f2543Smrg int y, 1548706f2543Smrg int width, 1549706f2543Smrg int height, 1550706f2543Smrg FbStip *src, 1551706f2543Smrg FbStride srcStride); 1552706f2543Smrg 1553706f2543Smrgextern _X_EXPORT void 1554706f2543SmrgfbPutXYImage (DrawablePtr pDrawable, 1555706f2543Smrg RegionPtr pClip, 1556706f2543Smrg FbBits fg, 1557706f2543Smrg FbBits bg, 1558706f2543Smrg FbBits pm, 1559706f2543Smrg int alu, 1560706f2543Smrg Bool opaque, 1561706f2543Smrg 1562706f2543Smrg int x, 1563706f2543Smrg int y, 1564706f2543Smrg int width, 1565706f2543Smrg int height, 1566706f2543Smrg 1567706f2543Smrg FbStip *src, 1568706f2543Smrg FbStride srcStride, 1569706f2543Smrg int srcX); 1570706f2543Smrg 1571706f2543Smrgextern _X_EXPORT void 1572706f2543SmrgfbGetImage (DrawablePtr pDrawable, 1573706f2543Smrg int x, 1574706f2543Smrg int y, 1575706f2543Smrg int w, 1576706f2543Smrg int h, 1577706f2543Smrg unsigned int format, 1578706f2543Smrg unsigned long planeMask, 1579706f2543Smrg char *d); 1580706f2543Smrg/* 1581706f2543Smrg * fbline.c 1582706f2543Smrg */ 1583706f2543Smrg 1584706f2543Smrgextern _X_EXPORT void 1585706f2543SmrgfbZeroLine (DrawablePtr pDrawable, 1586706f2543Smrg GCPtr pGC, 1587706f2543Smrg int mode, 1588706f2543Smrg int npt, 1589706f2543Smrg DDXPointPtr ppt); 1590706f2543Smrg 1591706f2543Smrgextern _X_EXPORT void 1592706f2543SmrgfbZeroSegment (DrawablePtr pDrawable, 1593706f2543Smrg GCPtr pGC, 1594706f2543Smrg int nseg, 1595706f2543Smrg xSegment *pSegs); 1596706f2543Smrg 1597706f2543Smrgextern _X_EXPORT void 1598706f2543SmrgfbPolyLine (DrawablePtr pDrawable, 1599706f2543Smrg GCPtr pGC, 1600706f2543Smrg int mode, 1601706f2543Smrg int npt, 1602706f2543Smrg DDXPointPtr ppt); 1603706f2543Smrg 1604706f2543Smrgextern _X_EXPORT void 1605706f2543SmrgfbFixCoordModePrevious (int npt, 1606706f2543Smrg DDXPointPtr ppt); 1607706f2543Smrg 1608706f2543Smrgextern _X_EXPORT void 1609706f2543SmrgfbPolySegment (DrawablePtr pDrawable, 1610706f2543Smrg GCPtr pGC, 1611706f2543Smrg int nseg, 1612706f2543Smrg xSegment *pseg); 1613706f2543Smrg 1614706f2543Smrg#define fbPolyRectangle miPolyRectangle 1615706f2543Smrg 1616706f2543Smrg/* 1617706f2543Smrg * fbpict.c 1618706f2543Smrg */ 1619706f2543Smrg 1620706f2543Smrgextern _X_EXPORT Bool 1621706f2543SmrgfbPictureInit (ScreenPtr pScreen, 1622706f2543Smrg PictFormatPtr formats, 1623706f2543Smrg int nformats); 1624706f2543Smrg 1625706f2543Smrg/* 1626706f2543Smrg * fbpixmap.c 1627706f2543Smrg */ 1628706f2543Smrg 1629706f2543Smrgextern _X_EXPORT PixmapPtr 1630706f2543SmrgfbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp, 1631706f2543Smrg unsigned usage_hint); 1632706f2543Smrg 1633706f2543Smrgextern _X_EXPORT PixmapPtr 1634706f2543SmrgfbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth, 1635706f2543Smrg unsigned usage_hint); 1636706f2543Smrg 1637706f2543Smrgextern _X_EXPORT Bool 1638706f2543SmrgfbDestroyPixmap (PixmapPtr pPixmap); 1639706f2543Smrg 1640706f2543Smrgextern _X_EXPORT RegionPtr 1641706f2543SmrgfbPixmapToRegion(PixmapPtr pPix); 1642706f2543Smrg 1643706f2543Smrg/* 1644706f2543Smrg * fbpoint.c 1645706f2543Smrg */ 1646706f2543Smrg 1647706f2543Smrgextern _X_EXPORT void 1648706f2543SmrgfbDots (FbBits *dstOrig, 1649706f2543Smrg FbStride dstStride, 1650706f2543Smrg int dstBpp, 1651706f2543Smrg BoxPtr pBox, 1652706f2543Smrg xPoint *pts, 1653706f2543Smrg int npt, 1654706f2543Smrg int xorg, 1655706f2543Smrg int yorg, 1656706f2543Smrg int xoff, 1657706f2543Smrg int yoff, 1658706f2543Smrg FbBits andOrig, 1659706f2543Smrg FbBits xorOrig); 1660706f2543Smrg 1661706f2543Smrgextern _X_EXPORT void 1662706f2543SmrgfbPolyPoint (DrawablePtr pDrawable, 1663706f2543Smrg GCPtr pGC, 1664706f2543Smrg int mode, 1665706f2543Smrg int npt, 1666706f2543Smrg xPoint *pptInit); 1667706f2543Smrg 1668706f2543Smrg/* 1669706f2543Smrg * fbpush.c 1670706f2543Smrg */ 1671706f2543Smrgextern _X_EXPORT void 1672706f2543SmrgfbPushPattern (DrawablePtr pDrawable, 1673706f2543Smrg GCPtr pGC, 1674706f2543Smrg 1675706f2543Smrg FbStip *src, 1676706f2543Smrg FbStride srcStride, 1677706f2543Smrg int srcX, 1678706f2543Smrg 1679706f2543Smrg int x, 1680706f2543Smrg int y, 1681706f2543Smrg 1682706f2543Smrg int width, 1683706f2543Smrg int height); 1684706f2543Smrg 1685706f2543Smrgextern _X_EXPORT void 1686706f2543SmrgfbPushFill (DrawablePtr pDrawable, 1687706f2543Smrg GCPtr pGC, 1688706f2543Smrg 1689706f2543Smrg FbStip *src, 1690706f2543Smrg FbStride srcStride, 1691706f2543Smrg int srcX, 1692706f2543Smrg 1693706f2543Smrg int x, 1694706f2543Smrg int y, 1695706f2543Smrg int width, 1696706f2543Smrg int height); 1697706f2543Smrg 1698706f2543Smrgextern _X_EXPORT void 1699706f2543SmrgfbPushImage (DrawablePtr pDrawable, 1700706f2543Smrg GCPtr pGC, 1701706f2543Smrg 1702706f2543Smrg FbStip *src, 1703706f2543Smrg FbStride srcStride, 1704706f2543Smrg int srcX, 1705706f2543Smrg 1706706f2543Smrg int x, 1707706f2543Smrg int y, 1708706f2543Smrg int width, 1709706f2543Smrg int height); 1710706f2543Smrg 1711706f2543Smrgextern _X_EXPORT void 1712706f2543SmrgfbPushPixels (GCPtr pGC, 1713706f2543Smrg PixmapPtr pBitmap, 1714706f2543Smrg DrawablePtr pDrawable, 1715706f2543Smrg int dx, 1716706f2543Smrg int dy, 1717706f2543Smrg int xOrg, 1718706f2543Smrg int yOrg); 1719706f2543Smrg 1720706f2543Smrg 1721706f2543Smrg/* 1722706f2543Smrg * fbscreen.c 1723706f2543Smrg */ 1724706f2543Smrg 1725706f2543Smrgextern _X_EXPORT Bool 1726706f2543SmrgfbCloseScreen (int indx, ScreenPtr pScreen); 1727706f2543Smrg 1728706f2543Smrgextern _X_EXPORT Bool 1729706f2543SmrgfbRealizeFont(ScreenPtr pScreen, FontPtr pFont); 1730706f2543Smrg 1731706f2543Smrgextern _X_EXPORT Bool 1732706f2543SmrgfbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont); 1733706f2543Smrg 1734706f2543Smrgextern _X_EXPORT void 1735706f2543SmrgfbQueryBestSize (int class, 1736706f2543Smrg unsigned short *width, unsigned short *height, 1737706f2543Smrg ScreenPtr pScreen); 1738706f2543Smrg 1739706f2543Smrgextern _X_EXPORT PixmapPtr 1740706f2543Smrg_fbGetWindowPixmap (WindowPtr pWindow); 1741706f2543Smrg 1742706f2543Smrgextern _X_EXPORT void 1743706f2543Smrg_fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap); 1744706f2543Smrg 1745706f2543Smrgextern _X_EXPORT Bool 1746706f2543SmrgfbSetupScreen(ScreenPtr pScreen, 1747706f2543Smrg pointer pbits, /* pointer to screen bitmap */ 1748706f2543Smrg int xsize, /* in pixels */ 1749706f2543Smrg int ysize, 1750706f2543Smrg int dpix, /* dots per inch */ 1751706f2543Smrg int dpiy, 1752706f2543Smrg int width, /* pixel width of frame buffer */ 1753706f2543Smrg int bpp); /* bits per pixel of frame buffer */ 1754706f2543Smrg 1755706f2543Smrgextern _X_EXPORT Bool 1756706f2543SmrgwfbFinishScreenInit(ScreenPtr pScreen, 1757706f2543Smrg pointer pbits, 1758706f2543Smrg int xsize, 1759706f2543Smrg int ysize, 1760706f2543Smrg int dpix, 1761706f2543Smrg int dpiy, 1762706f2543Smrg int width, 1763706f2543Smrg int bpp, 1764706f2543Smrg SetupWrapProcPtr setupWrap, 1765706f2543Smrg FinishWrapProcPtr finishWrap); 1766706f2543Smrg 1767706f2543Smrgextern _X_EXPORT Bool 1768706f2543SmrgwfbScreenInit(ScreenPtr pScreen, 1769706f2543Smrg pointer pbits, 1770706f2543Smrg int xsize, 1771706f2543Smrg int ysize, 1772706f2543Smrg int dpix, 1773706f2543Smrg int dpiy, 1774706f2543Smrg int width, 1775706f2543Smrg int bpp, 1776706f2543Smrg SetupWrapProcPtr setupWrap, 1777706f2543Smrg FinishWrapProcPtr finishWrap); 1778706f2543Smrg 1779706f2543Smrgextern _X_EXPORT Bool 1780706f2543SmrgfbFinishScreenInit(ScreenPtr pScreen, 1781706f2543Smrg pointer pbits, 1782706f2543Smrg int xsize, 1783706f2543Smrg int ysize, 1784706f2543Smrg int dpix, 1785706f2543Smrg int dpiy, 1786706f2543Smrg int width, 1787706f2543Smrg int bpp); 1788706f2543Smrg 1789706f2543Smrgextern _X_EXPORT Bool 1790706f2543SmrgfbScreenInit(ScreenPtr pScreen, 1791706f2543Smrg pointer pbits, 1792706f2543Smrg int xsize, 1793706f2543Smrg int ysize, 1794706f2543Smrg int dpix, 1795706f2543Smrg int dpiy, 1796706f2543Smrg int width, 1797706f2543Smrg int bpp); 1798706f2543Smrg 1799706f2543Smrg/* 1800706f2543Smrg * fbseg.c 1801706f2543Smrg */ 1802706f2543Smrgtypedef void FbBres (DrawablePtr pDrawable, 1803706f2543Smrg GCPtr pGC, 1804706f2543Smrg int dashOffset, 1805706f2543Smrg int signdx, 1806706f2543Smrg int signdy, 1807706f2543Smrg int axis, 1808706f2543Smrg int x, 1809706f2543Smrg int y, 1810706f2543Smrg int e, 1811706f2543Smrg int e1, 1812706f2543Smrg int e3, 1813706f2543Smrg int len); 1814706f2543Smrg 1815706f2543Smrgextern _X_EXPORT FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash; 1816706f2543Smrg/* 1817706f2543Smrg * fbsetsp.c 1818706f2543Smrg */ 1819706f2543Smrg 1820706f2543Smrgextern _X_EXPORT void 1821706f2543SmrgfbSetSpans (DrawablePtr pDrawable, 1822706f2543Smrg GCPtr pGC, 1823706f2543Smrg char *src, 1824706f2543Smrg DDXPointPtr ppt, 1825706f2543Smrg int *pwidth, 1826706f2543Smrg int nspans, 1827706f2543Smrg int fSorted); 1828706f2543Smrg 1829706f2543Smrgextern _X_EXPORT FbBres * 1830706f2543SmrgfbSelectBres (DrawablePtr pDrawable, 1831706f2543Smrg GCPtr pGC); 1832706f2543Smrg 1833706f2543Smrgextern _X_EXPORT void 1834706f2543SmrgfbBres (DrawablePtr pDrawable, 1835706f2543Smrg GCPtr pGC, 1836706f2543Smrg int dashOffset, 1837706f2543Smrg int signdx, 1838706f2543Smrg int signdy, 1839706f2543Smrg int axis, 1840706f2543Smrg int x, 1841706f2543Smrg int y, 1842706f2543Smrg int e, 1843706f2543Smrg int e1, 1844706f2543Smrg int e3, 1845706f2543Smrg int len); 1846706f2543Smrg 1847706f2543Smrgextern _X_EXPORT void 1848706f2543SmrgfbSegment (DrawablePtr pDrawable, 1849706f2543Smrg GCPtr pGC, 1850706f2543Smrg int xa, 1851706f2543Smrg int ya, 1852706f2543Smrg int xb, 1853706f2543Smrg int yb, 1854706f2543Smrg Bool drawLast, 1855706f2543Smrg int *dashOffset); 1856706f2543Smrg 1857706f2543Smrg 1858706f2543Smrg/* 1859706f2543Smrg * fbsolid.c 1860706f2543Smrg */ 1861706f2543Smrg 1862706f2543Smrgextern _X_EXPORT void 1863706f2543SmrgfbSolid (FbBits *dst, 1864706f2543Smrg FbStride dstStride, 1865706f2543Smrg int dstX, 1866706f2543Smrg int bpp, 1867706f2543Smrg 1868706f2543Smrg int width, 1869706f2543Smrg int height, 1870706f2543Smrg 1871706f2543Smrg FbBits and, 1872706f2543Smrg FbBits xor); 1873706f2543Smrg 1874706f2543Smrg#ifdef FB_24BIT 1875706f2543Smrgextern _X_EXPORT void 1876706f2543SmrgfbSolid24 (FbBits *dst, 1877706f2543Smrg FbStride dstStride, 1878706f2543Smrg int dstX, 1879706f2543Smrg 1880706f2543Smrg int width, 1881706f2543Smrg int height, 1882706f2543Smrg 1883706f2543Smrg FbBits and, 1884706f2543Smrg FbBits xor); 1885706f2543Smrg#endif 1886706f2543Smrg 1887706f2543Smrg/* 1888706f2543Smrg * fbstipple.c 1889706f2543Smrg */ 1890706f2543Smrg 1891706f2543Smrgextern _X_EXPORT void 1892706f2543SmrgfbTransparentSpan (FbBits *dst, 1893706f2543Smrg FbBits stip, 1894706f2543Smrg FbBits fgxor, 1895706f2543Smrg int n); 1896706f2543Smrg 1897706f2543Smrgextern _X_EXPORT void 1898706f2543SmrgfbEvenStipple (FbBits *dst, 1899706f2543Smrg FbStride dstStride, 1900706f2543Smrg int dstX, 1901706f2543Smrg int dstBpp, 1902706f2543Smrg 1903706f2543Smrg int width, 1904706f2543Smrg int height, 1905706f2543Smrg 1906706f2543Smrg FbStip *stip, 1907706f2543Smrg FbStride stipStride, 1908706f2543Smrg int stipHeight, 1909706f2543Smrg 1910706f2543Smrg FbBits fgand, 1911706f2543Smrg FbBits fgxor, 1912706f2543Smrg FbBits bgand, 1913706f2543Smrg FbBits bgxor, 1914706f2543Smrg 1915706f2543Smrg int xRot, 1916706f2543Smrg int yRot); 1917706f2543Smrg 1918706f2543Smrgextern _X_EXPORT void 1919706f2543SmrgfbOddStipple (FbBits *dst, 1920706f2543Smrg FbStride dstStride, 1921706f2543Smrg int dstX, 1922706f2543Smrg int dstBpp, 1923706f2543Smrg 1924706f2543Smrg int width, 1925706f2543Smrg int height, 1926706f2543Smrg 1927706f2543Smrg FbStip *stip, 1928706f2543Smrg FbStride stipStride, 1929706f2543Smrg int stipWidth, 1930706f2543Smrg int stipHeight, 1931706f2543Smrg 1932706f2543Smrg FbBits fgand, 1933706f2543Smrg FbBits fgxor, 1934706f2543Smrg FbBits bgand, 1935706f2543Smrg FbBits bgxor, 1936706f2543Smrg 1937706f2543Smrg int xRot, 1938706f2543Smrg int yRot); 1939706f2543Smrg 1940706f2543Smrgextern _X_EXPORT void 1941706f2543SmrgfbStipple (FbBits *dst, 1942706f2543Smrg FbStride dstStride, 1943706f2543Smrg int dstX, 1944706f2543Smrg int dstBpp, 1945706f2543Smrg 1946706f2543Smrg int width, 1947706f2543Smrg int height, 1948706f2543Smrg 1949706f2543Smrg FbStip *stip, 1950706f2543Smrg FbStride stipStride, 1951706f2543Smrg int stipWidth, 1952706f2543Smrg int stipHeight, 1953706f2543Smrg Bool even, 1954706f2543Smrg 1955706f2543Smrg FbBits fgand, 1956706f2543Smrg FbBits fgxor, 1957706f2543Smrg FbBits bgand, 1958706f2543Smrg FbBits bgxor, 1959706f2543Smrg 1960706f2543Smrg int xRot, 1961706f2543Smrg int yRot); 1962706f2543Smrg 1963706f2543Smrg/* 1964706f2543Smrg * fbtile.c 1965706f2543Smrg */ 1966706f2543Smrg 1967706f2543Smrgextern _X_EXPORT void 1968706f2543SmrgfbEvenTile (FbBits *dst, 1969706f2543Smrg FbStride dstStride, 1970706f2543Smrg int dstX, 1971706f2543Smrg 1972706f2543Smrg int width, 1973706f2543Smrg int height, 1974706f2543Smrg 1975706f2543Smrg FbBits *tile, 1976706f2543Smrg FbStride tileStride, 1977706f2543Smrg int tileHeight, 1978706f2543Smrg 1979706f2543Smrg int alu, 1980706f2543Smrg FbBits pm, 1981706f2543Smrg int xRot, 1982706f2543Smrg int yRot); 1983706f2543Smrg 1984706f2543Smrgextern _X_EXPORT void 1985706f2543SmrgfbOddTile (FbBits *dst, 1986706f2543Smrg FbStride dstStride, 1987706f2543Smrg int dstX, 1988706f2543Smrg 1989706f2543Smrg int width, 1990706f2543Smrg int height, 1991706f2543Smrg 1992706f2543Smrg FbBits *tile, 1993706f2543Smrg FbStride tileStride, 1994706f2543Smrg int tileWidth, 1995706f2543Smrg int tileHeight, 1996706f2543Smrg 1997706f2543Smrg int alu, 1998706f2543Smrg FbBits pm, 1999706f2543Smrg int bpp, 2000706f2543Smrg 2001706f2543Smrg int xRot, 2002706f2543Smrg int yRot); 2003706f2543Smrg 2004706f2543Smrgextern _X_EXPORT void 2005706f2543SmrgfbTile (FbBits *dst, 2006706f2543Smrg FbStride dstStride, 2007706f2543Smrg int dstX, 2008706f2543Smrg 2009706f2543Smrg int width, 2010706f2543Smrg int height, 2011706f2543Smrg 2012706f2543Smrg FbBits *tile, 2013706f2543Smrg FbStride tileStride, 2014706f2543Smrg int tileWidth, 2015706f2543Smrg int tileHeight, 2016706f2543Smrg 2017706f2543Smrg int alu, 2018706f2543Smrg FbBits pm, 2019706f2543Smrg int bpp, 2020706f2543Smrg 2021706f2543Smrg int xRot, 2022706f2543Smrg int yRot); 2023706f2543Smrg 2024706f2543Smrg/* 2025706f2543Smrg * fbutil.c 2026706f2543Smrg */ 2027706f2543Smrgextern _X_EXPORT FbBits 2028706f2543SmrgfbReplicatePixel (Pixel p, int bpp); 2029706f2543Smrg 2030706f2543Smrgextern _X_EXPORT void 2031706f2543SmrgfbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp); 2032706f2543Smrg 2033706f2543Smrg#ifdef FB_ACCESS_WRAPPER 2034706f2543Smrgextern _X_EXPORT ReadMemoryProcPtr wfbReadMemory; 2035706f2543Smrgextern _X_EXPORT WriteMemoryProcPtr wfbWriteMemory; 2036706f2543Smrg#endif 2037706f2543Smrg 2038706f2543Smrg/* 2039706f2543Smrg * fbwindow.c 2040706f2543Smrg */ 2041706f2543Smrg 2042706f2543Smrgextern _X_EXPORT Bool 2043706f2543SmrgfbCreateWindow(WindowPtr pWin); 2044706f2543Smrg 2045706f2543Smrgextern _X_EXPORT Bool 2046706f2543SmrgfbDestroyWindow(WindowPtr pWin); 2047706f2543Smrg 2048706f2543Smrgextern _X_EXPORT Bool 2049706f2543SmrgfbMapWindow(WindowPtr pWindow); 2050706f2543Smrg 2051706f2543Smrgextern _X_EXPORT Bool 2052706f2543SmrgfbPositionWindow(WindowPtr pWin, int x, int y); 2053706f2543Smrg 2054706f2543Smrgextern _X_EXPORT Bool 2055706f2543SmrgfbUnmapWindow(WindowPtr pWindow); 2056706f2543Smrg 2057706f2543Smrgextern _X_EXPORT void 2058706f2543SmrgfbCopyWindowProc (DrawablePtr pSrcDrawable, 2059706f2543Smrg DrawablePtr pDstDrawable, 2060706f2543Smrg GCPtr pGC, 2061706f2543Smrg BoxPtr pbox, 2062706f2543Smrg int nbox, 2063706f2543Smrg int dx, 2064706f2543Smrg int dy, 2065706f2543Smrg Bool reverse, 2066706f2543Smrg Bool upsidedown, 2067706f2543Smrg Pixel bitplane, 2068706f2543Smrg void *closure); 2069706f2543Smrg 2070706f2543Smrgextern _X_EXPORT void 2071706f2543SmrgfbCopyWindow(WindowPtr pWin, 2072706f2543Smrg DDXPointRec ptOldOrg, 2073706f2543Smrg RegionPtr prgnSrc); 2074706f2543Smrg 2075706f2543Smrgextern _X_EXPORT Bool 2076706f2543SmrgfbChangeWindowAttributes(WindowPtr pWin, unsigned long mask); 2077706f2543Smrg 2078706f2543Smrgextern _X_EXPORT void 2079706f2543SmrgfbFillRegionSolid (DrawablePtr pDrawable, 2080706f2543Smrg RegionPtr pRegion, 2081706f2543Smrg FbBits and, 2082706f2543Smrg FbBits xor); 2083706f2543Smrg 2084706f2543Smrgextern _X_EXPORT pixman_image_t * 2085706f2543Smrgimage_from_pict (PicturePtr pict, 2086706f2543Smrg Bool has_clip, 2087706f2543Smrg int *xoff, 2088706f2543Smrg int *yoff); 2089706f2543Smrg 2090706f2543Smrgextern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *); 2091706f2543Smrg 2092706f2543Smrg#endif /* _FB_H_ */ 2093706f2543Smrg 2094