1
/* $XFree86: xc/programs/Xserver/iplan2p4/ipl.h,v 3.5 2001/01/30 22:06:21 tsi Exp $ */
2
/* $XConsortium: ipl.h,v 5.37 94/04/17 20:28:38 dpw Exp $ */
3
/************************************************************
4
Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
8
Permission to use, copy, modify, and distribute this
9
software and its documentation for any purpose and without
10
fee is hereby granted, provided that the above copyright no-
11
tice appear in all copies and that both that copyright no-
12
tice and this permission notice appear in supporting docu-
13
mentation, and that the names of Sun or X Consortium
14
not be used in advertising or publicity pertaining to
15
distribution of the software without specific prior
16
written permission. Sun and X Consortium make no
17
representations about the suitability of this software for
18
any purpose. It is provided "as is" without any express or
21
SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
22
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
23
NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
24
ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
25
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
27
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
28
THE USE OR PERFORMANCE OF THIS SOFTWARE.
30
********************************************************/
32
/* Modified nov 94 by Martin Schaller (Martin_Schaller@maus.r.de) for use with
35
#ifdef HAVE_DIX_CONFIG_H
36
#include <dix-config.h>
44
#include "miscstruct.h"
46
#include "windowstr.h"
53
private filed of pixmap
54
pixmap.devPrivate = (unsigned int *)pointer_to_bits
55
pixmap.devKind = width_of_pixmap_in_bytes
58
extern int iplGCPrivateIndex;
59
extern int iplWindowPrivateIndex;
61
/* private field of GC */
63
unsigned char rop; /* special case rop values */
64
/* next two values unused in ipl, included for compatibility with mfb */
65
unsigned char ropOpStip; /* rop for opaque stipple */
66
/* this value is ropFillArea in mfb, usurped for ipl */
67
unsigned char oneRect; /* drawable has one clip rect */
68
unsigned long xor, and; /* reduced rop values */
69
unsigned short xorg[INTER_PLANES],andg[INTER_PLANES];
72
typedef iplPrivGC *iplPrivGCPtr;
74
#define iplGetGCPrivate(pGC) ((iplPrivGCPtr)\
75
(pGC)->devPrivates[iplGCPrivateIndex].ptr)
77
#define iplGetCompositeClip(pGC) ((pGC)->pCompositeClip)
79
/* way to carry RROP info around */
82
unsigned long xor, and;
83
unsigned short xorg[INTER_PLANES],andg[INTER_PLANES];
84
} iplRRopRec, *iplRRopPtr;
86
/* private field of window */
88
unsigned char fastBorder; /* non-zero if border is 32 bits wide */
89
unsigned char fastBackground;
90
unsigned short unused; /* pad for alignment with Sun compiler */
91
DDXPointRec oldRotate;
92
PixmapPtr pRotatedBackground;
93
PixmapPtr pRotatedBorder;
96
#define iplGetWindowPrivate(_pWin) ((iplPrivWin *)\
97
(_pWin)->devPrivates[iplWindowPrivateIndex].ptr)
102
extern int iplSetStipple(
104
unsigned long /*fg*/,
105
unsigned long /*planemask*/
108
extern int iplSetOpaqueStipple(
110
unsigned long /*fg*/,
111
unsigned long /*bg*/,
112
unsigned long /*planemask*/
115
extern int iplComputeClipMasks32(
126
extern void iplCopyImagePlane(
127
DrawablePtr /*pSrcDrawable*/,
128
DrawablePtr /*pDstDrawable*/,
130
RegionPtr /*prgnDst*/,
131
DDXPointPtr /*pptSrc*/,
132
unsigned long /*planemask*/
135
extern void iplCopyPlane8to1(
136
DrawablePtr /*pSrcDrawable*/,
137
DrawablePtr /*pDstDrawable*/,
139
RegionPtr /*prgnDst*/,
140
DDXPointPtr /*pptSrc*/,
141
unsigned long /*planemask*/,
142
unsigned long /*bitPlane*/
146
extern int ipl8LineSS1RectCopy(
147
DrawablePtr /*pDrawable*/,
151
DDXPointPtr /*pptInit*/,
152
DDXPointPtr /*pptInitOrig*/,
159
extern void ipl8LineSS1Rect(
160
DrawablePtr /*pDrawable*/,
164
DDXPointPtr /*pptInit*/
167
extern void ipl8ClippedLineCopy(
168
DrawablePtr /*pDrawable*/,
179
extern int ipl8LineSS1RectPreviousCopy(
180
DrawablePtr /*pDrawable*/,
184
DDXPointPtr /*pptInit*/,
185
DDXPointPtr /*pptInitOrig*/,
193
extern int ipl8LineSS1RectGeneral(
194
DrawablePtr /*pDrawable*/,
198
DDXPointPtr /*pptInit*/,
199
DDXPointPtr /*pptInitOrig*/,
206
extern void ipl8ClippedLineGeneral(
207
DrawablePtr /*pDrawable*/,
218
extern int ipl8LineSS1RectXor(
219
DrawablePtr /*pDrawable*/,
223
DDXPointPtr /*pptInit*/,
224
DDXPointPtr /*pptInitOrig*/,
231
extern void ipl8ClippedLineXor(
232
DrawablePtr /*pDrawable*/,
243
extern int ipl8SegmentSS1RectCopy(
244
DrawablePtr /*pDrawable*/,
247
xSegment * /*pSegInit*/
251
extern int ipl8SegmentSS1RectShiftCopy(
252
DrawablePtr /*pDrawable*/,
255
xSegment * /*pSegInit*/
258
extern void ipl8SegmentSS1Rect(
259
DrawablePtr /*pDrawable*/,
262
xSegment * /*pSegInit*/
266
extern int ipl8SegmentSS1RectGeneral(
267
DrawablePtr /*pDrawable*/,
270
xSegment * /*pSegInit*/
274
extern int ipl8SegmentSS1RectXor(
275
DrawablePtr /*pDrawable*/,
278
xSegment * /*pSegInit*/
282
extern Bool iplAllocatePrivates(
283
ScreenPtr /*pScreen*/,
284
int * /*window_index*/,
289
extern RegionPtr iplBitBlt(
290
DrawablePtr /*pSrcDrawable*/,
291
DrawablePtr /*pDstDrawable*/,
299
void (* /*doBitBlt*/)(),
300
unsigned long /*bitPlane*/
303
extern void iplDoBitblt(
304
DrawablePtr /*pSrc*/,
305
DrawablePtr /*pDst*/,
307
RegionPtr /*prgnDst*/,
308
DDXPointPtr /*pptSrc*/,
309
unsigned long /*planemask*/
312
extern RegionPtr iplCopyArea(
313
DrawablePtr /*pSrcDrawable*/,
314
DrawablePtr /*pDstDrawable*/,
324
extern void iplCopyPlane1to8(
325
DrawablePtr /*pSrcDrawable*/,
326
DrawablePtr /*pDstDrawable*/,
328
RegionPtr /*prgnDst*/,
329
DDXPointPtr /*pptSrc*/,
330
unsigned long /*planemask*/,
331
unsigned long /*bitPlane*/
334
extern RegionPtr iplCopyPlane(
335
DrawablePtr /*pSrcDrawable*/,
336
DrawablePtr /*pDstDrawable*/,
344
unsigned long /*bitPlane*/
348
extern void iplDoBitbltCopy(
349
DrawablePtr /*pSrc*/,
350
DrawablePtr /*pDst*/,
352
RegionPtr /*prgnDst*/,
353
DDXPointPtr /*pptSrc*/,
354
unsigned long /*planemask*/
358
extern void iplDoBitbltGeneral(
359
DrawablePtr /*pSrc*/,
360
DrawablePtr /*pDst*/,
362
RegionPtr /*prgnDst*/,
363
DDXPointPtr /*pptSrc*/,
364
unsigned long /*planemask*/
368
extern void iplDoBitbltOr(
369
DrawablePtr /*pSrc*/,
370
DrawablePtr /*pDst*/,
372
RegionPtr /*prgnDst*/,
373
DDXPointPtr /*pptSrc*/,
374
unsigned long /*planemask*/
378
extern void iplDoBitbltXor(
379
DrawablePtr /*pSrc*/,
380
DrawablePtr /*pDst*/,
382
RegionPtr /*prgnDst*/,
383
DDXPointPtr /*pptSrc*/,
384
unsigned long /*planemask*/
388
extern void iplBresS(
390
unsigned short * /*and*/,
391
unsigned short * /*xor*/,
392
unsigned short * /*addrl*/,
406
extern void iplBresD(
407
iplRRopPtr /*rrops*/,
408
int * /*pdashIndex*/,
409
unsigned char * /*pDash*/,
410
int /*numInDashList*/,
411
int * /*pdashOffset*/,
412
int /*isDoubleDash*/,
413
unsigned short * /*addrl*/,
427
extern void iplSaveAreas(
428
PixmapPtr /*pPixmap*/,
429
RegionPtr /*prgnSave*/,
435
extern void iplRestoreAreas(
436
PixmapPtr /*pPixmap*/,
437
RegionPtr /*prgnRestore*/,
444
extern int iplListInstalledColormaps(
445
ScreenPtr /*pScreen*/,
449
extern void iplInstallColormap(
453
extern void iplUninstallColormap(
457
extern void iplResolveColor(
458
unsigned short * /*pred*/,
459
unsigned short * /*pgreen*/,
460
unsigned short * /*pblue*/,
461
VisualPtr /*pVisual*/
464
extern Bool iplInitializeColormap(
468
extern int iplExpandDirectColors(
469
ColormapPtr /*pmap*/,
471
xColorItem * /*indefs*/,
472
xColorItem * /*outdefs*/
475
extern Bool iplCreateDefColormap(
476
ScreenPtr /*pScreen*/
479
extern Bool iplSetVisualTypes(
485
extern Bool iplInitVisuals(
486
VisualPtr * /*visualp*/,
487
DepthPtr * /*depthp*/,
490
int * /*rootDepthp*/,
491
VisualID * /*defaultVisp*/,
492
unsigned long /*sizes*/,
497
extern void iplPolyFillArcSolidCopy(
498
DrawablePtr /*pDraw*/,
505
extern void iplPolyFillArcSolidGeneral(
506
DrawablePtr /*pDraw*/,
513
extern void iplFillBoxTileOdd(
514
DrawablePtr /*pDrawable*/,
522
extern void iplFillRectTileOdd(
523
DrawablePtr /*pDrawable*/,
529
extern void iplPolyFillRect(
530
DrawablePtr /*pDrawable*/,
533
xRectangle * /*prectInit*/
537
extern void iplUnnaturalTileFS(
538
DrawablePtr /*pDrawable*/,
541
DDXPointPtr /*pptInit*/,
542
int * /*pwidthInit*/,
546
extern void iplUnnaturalStippleFS(
547
DrawablePtr /*pDrawable*/,
550
DDXPointPtr /*pptInit*/,
551
int * /*pwidthInit*/,
555
extern void ipl8Stipple32FS(
556
DrawablePtr /*pDrawable*/,
559
DDXPointPtr /*pptInit*/,
560
int * /*pwidthInit*/,
564
extern void ipl8OpaqueStipple32FS(
565
DrawablePtr /*pDrawable*/,
568
DDXPointPtr /*pptInit*/,
569
int * /*pwidthInit*/,
574
extern GCOpsPtr iplMatchCommon(
576
iplPrivGCPtr /*devPriv*/
579
extern Bool iplCreateGC(
583
extern void iplValidateGC(
585
unsigned long /*changes*/,
586
DrawablePtr /*pDrawable*/
591
extern void iplGetSpans(
592
DrawablePtr /*pDrawable*/,
601
extern void iplPolyGlyphBlt8(
602
DrawablePtr /*pDrawable*/,
606
unsigned int /*nglyph*/,
607
CharInfoPtr * /*ppci*/,
608
pointer /*pglyphBase*/
612
extern void iplPolyGlyphRop8(
613
DrawablePtr /*pDrawable*/,
617
unsigned int /*nglyph*/,
618
CharInfoPtr * /*ppci*/,
619
pointer /*pglyphBase*/
625
unsigned short * /*and*/,
626
unsigned short * /*xor*/,
627
unsigned short * /*addrg*/,
636
unsigned short * /*and*/,
637
unsigned short * /*xor*/,
638
unsigned short * /*addrg*/,
646
extern void iplImageGlyphBlt8(
647
DrawablePtr /*pDrawable*/,
651
unsigned int /*nglyph*/,
652
CharInfoPtr * /*ppci*/,
653
pointer /*pglyphBase*/
657
extern void iplPutImage(
658
DrawablePtr /*pDraw*/,
670
extern void iplGetImage(
671
DrawablePtr /*pDrawable*/,
676
unsigned int /*format*/,
677
unsigned long /*planeMask*/,
682
extern void iplLineSS(
683
DrawablePtr /*pDrawable*/,
687
DDXPointPtr /*pptInit*/
690
extern void iplLineSD(
691
DrawablePtr /*pDrawable*/,
695
DDXPointPtr /*pptInit*/
700
extern PixmapPtr iplCreatePixmap(
701
ScreenPtr /*pScreen*/,
707
extern Bool iplDestroyPixmap(
708
PixmapPtr /*pPixmap*/
711
extern PixmapPtr iplCopyPixmap(
715
extern void iplPadPixmap(
716
PixmapPtr /*pPixmap*/
719
extern void iplXRotatePixmap(
724
extern void iplYRotatePixmap(
729
extern void iplCopyRotatePixmap(
730
PixmapPtr /*psrcPix*/,
731
PixmapPtr * /*ppdstPix*/,
737
extern void iplFillPoly1RectCopy(
738
DrawablePtr /*pDrawable*/,
743
DDXPointPtr /*ptsIn*/
747
extern void iplFillPoly1RectGeneral(
748
DrawablePtr /*pDrawable*/,
753
DDXPointPtr /*ptsIn*/
757
extern void iplPaintWindow(
759
RegionPtr /*pRegion*/,
763
extern void iplFillBoxSolid(
764
DrawablePtr /*pDrawable*/,
767
unsigned long /*pixel*/
770
extern void iplFillBoxTile32(
771
DrawablePtr /*pDrawable*/,
778
extern void iplPolyPoint(
779
DrawablePtr /*pDrawable*/,
787
extern void iplPushPixels8(
789
PixmapPtr /*pBitmap*/,
790
DrawablePtr /*pDrawable*/,
798
extern void ipl8FillRectOpaqueStippled32(
799
DrawablePtr /*pDrawable*/,
805
extern void ipl8FillRectTransparentStippled32(
806
DrawablePtr /*pDrawable*/,
812
extern void ipl8FillRectStippledUnnatural(
813
DrawablePtr /*pDrawable*/,
820
extern int iplReduceRasterOp(
822
unsigned long /*fg*/,
823
unsigned long /*pm*/,
824
unsigned short * /*andp*/,
825
unsigned short * /*xorp*/
829
extern Bool iplCloseScreen(
831
ScreenPtr /*pScreen*/
834
extern Bool iplSetupScreen(
835
ScreenPtr /*pScreen*/,
844
extern int iplFinishScreenInit(
845
ScreenPtr /*pScreen*/,
854
extern Bool iplScreenInit(
855
ScreenPtr /*pScreen*/,
864
extern PixmapPtr iplGetScreenPixmap(
865
ScreenPtr /*pScreen*/
868
extern void iplSetScreenPixmap(
874
extern void iplSegmentSS(
875
DrawablePtr /*pDrawable*/,
881
extern void iplSegmentSD(
882
DrawablePtr /*pDrawable*/,
889
extern int iplSetScanline(
894
unsigned int * /*psrc*/,
896
unsigned short * /*pdstBase*/,
898
unsigned long /*planemask*/
901
extern void iplSetSpans(
902
DrawablePtr /*pDrawable*/,
912
extern void iplFillRectSolidCopy(
913
DrawablePtr /*pDrawable*/,
919
extern void iplSolidSpansCopy(
920
DrawablePtr /*pDrawable*/,
923
DDXPointPtr /*pptInit*/,
924
int * /*pwidthInit*/,
929
extern void iplFillRectSolidGeneral(
930
DrawablePtr /*pDrawable*/,
936
extern void iplSolidSpansGeneral(
937
DrawablePtr /*pDrawable*/,
940
DDXPointPtr /*pptInit*/,
941
int * /*pwidthInit*/,
946
extern void iplFillRectSolidXor(
947
DrawablePtr /*pDrawable*/,
953
extern void iplSolidSpansXor(
954
DrawablePtr /*pDrawable*/,
957
DDXPointPtr /*pptInit*/,
958
int * /*pwidthInit*/,
963
extern void iplTEGlyphBlt8(
964
DrawablePtr /*pDrawable*/,
968
unsigned int /*nglyph*/,
969
CharInfoPtr * /*ppci*/,
970
pointer /*pglyphBase*/
974
extern void iplTEGlyphBlt(
975
DrawablePtr /*pDrawable*/,
979
unsigned int /*nglyph*/,
980
CharInfoPtr * /*ppci*/,
981
pointer /*pglyphBase*/
985
extern void iplFillRectTile32Copy(
986
DrawablePtr /*pDrawable*/,
992
extern void iplTile32FSCopy(
993
DrawablePtr /*pDrawable*/,
996
DDXPointPtr /*pptInit*/,
997
int * /*pwidthInit*/,
1002
extern void iplFillRectTile32General(
1003
DrawablePtr /*pDrawable*/,
1009
extern void iplTile32FSGeneral(
1010
DrawablePtr /*pDrawable*/,
1013
DDXPointPtr /*pptInit*/,
1014
int * /*pwidthInit*/,
1019
extern void iplFillBoxTileOddCopy(
1020
DrawablePtr /*pDrawable*/,
1027
unsigned long /*planemask*/
1030
extern void iplFillSpanTileOddCopy(
1031
DrawablePtr /*pDrawable*/,
1033
DDXPointPtr /*ppt*/,
1039
unsigned long /*planemask*/
1042
extern void iplFillBoxTile32sCopy(
1043
DrawablePtr /*pDrawable*/,
1050
unsigned long /*planemask*/
1053
extern void iplFillSpanTile32sCopy(
1054
DrawablePtr /*pDrawable*/,
1056
DDXPointPtr /*ppt*/,
1062
unsigned long /*planemask*/
1066
extern void iplFillBoxTileOddGeneral(
1067
DrawablePtr /*pDrawable*/,
1074
unsigned long /*planemask*/
1077
extern void iplFillSpanTileOddGeneral(
1078
DrawablePtr /*pDrawable*/,
1080
DDXPointPtr /*ppt*/,
1086
unsigned long /*planemask*/
1089
extern void iplFillBoxTile32sGeneral(
1090
DrawablePtr /*pDrawable*/,
1097
unsigned long /*planemask*/
1100
extern void iplFillSpanTile32sGeneral(
1101
DrawablePtr /*pDrawable*/,
1103
DDXPointPtr /*ppt*/,
1109
unsigned long /*planemask*/
1113
extern Bool iplCreateWindow(
1117
extern Bool iplDestroyWindow(
1121
extern Bool iplMapWindow(
1122
WindowPtr /*pWindow*/
1125
extern Bool iplPositionWindow(
1131
extern Bool iplUnmapWindow(
1132
WindowPtr /*pWindow*/
1135
extern void iplCopyWindow(
1137
DDXPointRec /*ptOldOrg*/,
1138
RegionPtr /*prgnSrc*/
1141
extern Bool iplChangeWindowAttributes(
1143
unsigned long /*mask*/
1147
extern void iplZeroPolyArcSS8Copy(
1148
DrawablePtr /*pDraw*/,
1155
extern void iplZeroPolyArcSS8General(
1156
DrawablePtr /*pDraw*/,
1163
extern void iplZeroPolyArcSS8Xor(
1164
DrawablePtr /*pDraw*/,
1170
/* Common macros for extracting drawing information */
1172
#if (!defined(SINGLEDEPTH) && PSZ != 8) || defined(FORCE_SEPARATE_PRIVATE)
1174
#define CFB_NEED_SCREEN_PRIVATE
1176
extern int iplScreenPrivateIndex;
1179
#define iplGetWindowPixmap(d) \
1180
((* ((DrawablePtr)(d))->pScreen->GetWindowPixmap)((WindowPtr)(d)))
1182
#define iplGetTypedWidth(pDrawable,wtype) (\
1183
(((pDrawable)->type != DRAWABLE_PIXMAP) ? \
1184
(int) (iplGetWindowPixmap(pDrawable)->devKind) : \
1185
(int)(((PixmapPtr)pDrawable)->devKind)) / sizeof (wtype))
1187
#define iplGetByteWidth(pDrawable) iplGetTypedWidth(pDrawable, unsigned char)
1189
#define iplGetPixelWidth(pDrawable) iplGetTypedWidth(pDrawable, PixelType)
1191
#define iplGetLongWidth(pDrawable) iplGetTypedWidth(pDrawable, unsigned long)
1193
#define iplGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\
1195
if ((pDrawable)->type != DRAWABLE_PIXMAP) \
1196
_pPix = iplGetWindowPixmap(pDrawable); \
1198
_pPix = (PixmapPtr) (pDrawable); \
1199
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
1200
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
1203
#define iplGetByteWidthAndPointer(pDrawable, width, pointer) \
1204
iplGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char)
1206
#define iplGetLongWidthAndPointer(pDrawable, width, pointer) \
1207
iplGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned long, unsigned long)
1209
#define iplGetPixelWidthAndPointer(pDrawable, width, pointer) \
1210
iplGetTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
1212
#define iplGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\
1213
PixmapPtr _pPix = iplGetWindowPixmap((DrawablePtr) (pWin)); \
1214
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
1215
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
1218
#define iplGetWindowLongWidthAndPointer(pWin, width, pointer) \
1219
iplGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned long, unsigned long)
1221
#define iplGetWindowByteWidthAndPointer(pWin, width, pointer) \
1222
iplGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned char, unsigned char)
1224
#define iplGetWindowPixelWidthAndPointer(pDrawable, width, pointer) \
1225
iplGetWindowTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
1227
/* Macros which handle a coordinate in a single register */
1229
/* Most compilers will convert divide by 65536 into a shift, if signed
1230
* shifts exist. If your machine does arithmetic shifts and your compiler
1231
* can't get it right, add to this line.
1234
/* mips compiler - what a joke - it CSEs the 65536 constant into a reg
1235
* forcing as to use div instead of shift. Let's be explicit.
1238
#if defined(mips) || defined(sparc) || defined(__alpha) || defined(__alpha__)
1239
#define GetHighWord(x) (((int) (x)) >> 16)
1241
#define GetHighWord(x) (((int) (x)) / 65536)
1244
#if IMAGE_BYTE_ORDER == MSBFirst
1245
#define intToCoord(i,x,y) (((x) = GetHighWord(i)), ((y) = (int) ((short) (i))))
1246
#define coordToInt(x,y) (((x) << 16) | (y))
1247
#define intToX(i) (GetHighWord(i))
1248
#define intToY(i) ((int) ((short) i))
1250
#define intToCoord(i,x,y) (((x) = (int) ((short) (i))), ((y) = GetHighWord(i)))
1251
#define coordToInt(x,y) (((y) << 16) | (x))
1252
#define intToX(i) ((int) ((short) (i)))
1253
#define intToY(i) (GetHighWord(i))