1ee7c6486Stsutsui/* 2ee7c6486Stsutsui * $Xorg: sunGX.h,v 1.4 2001/02/09 02:04:44 xorgcvs Exp $ 3ee7c6486Stsutsui * 4ee7c6486StsutsuiCopyright 1991, 1998 The Open Group 5ee7c6486Stsutsui 6ee7c6486StsutsuiPermission to use, copy, modify, distribute, and sell this software and its 7ee7c6486Stsutsuidocumentation for any purpose is hereby granted without fee, provided that 8ee7c6486Stsutsuithe above copyright notice appear in all copies and that both that 9ee7c6486Stsutsuicopyright notice and this permission notice appear in supporting 10ee7c6486Stsutsuidocumentation. 11ee7c6486Stsutsui 12ee7c6486StsutsuiThe above copyright notice and this permission notice shall be included in 13ee7c6486Stsutsuiall copies or substantial portions of the Software. 14ee7c6486Stsutsui 15ee7c6486StsutsuiTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16ee7c6486StsutsuiIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17ee7c6486StsutsuiFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18ee7c6486StsutsuiOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 19ee7c6486StsutsuiAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20ee7c6486StsutsuiCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21ee7c6486Stsutsui 22ee7c6486StsutsuiExcept as contained in this notice, the name of The Open Group shall not be 23ee7c6486Stsutsuiused in advertising or otherwise to promote the sale, use or other dealings 24ee7c6486Stsutsuiin this Software without prior written authorization from The Open Group. 25ee7c6486Stsutsui * 26ee7c6486Stsutsui * Author: Keith Packard, MIT X Consortium 27ee7c6486Stsutsui */ 28ee7c6486Stsutsui/* $XFree86: xc/programs/Xserver/hw/sun/sunGX.h,v 1.4 2001/12/14 19:59:43 dawes Exp $ */ 29ee7c6486Stsutsui 30ee7c6486Stsutsuitypedef unsigned int Uint; 31ee7c6486Stsutsuitypedef volatile Uint VUint; 32ee7c6486Stsutsui 33ee7c6486Stsutsui/* modes */ 34ee7c6486Stsutsui#define GX_INDEX(n) ((n) << 4) 35ee7c6486Stsutsui#define GX_INDEX_ALL 0x00000030 36ee7c6486Stsutsui#define GX_INDEX_MOD 0x00000040 37ee7c6486Stsutsui#define GX_BDISP_0 0x00000080 38ee7c6486Stsutsui#define GX_BDISP_1 0x00000100 39ee7c6486Stsutsui#define GX_BDISP_ALL 0x00000180 40ee7c6486Stsutsui#define GX_BREAD_0 0x00000200 41ee7c6486Stsutsui#define GX_BREAD_1 0x00000400 42ee7c6486Stsutsui#define GX_BREAD_ALL 0x00000600 43ee7c6486Stsutsui#define GX_BWRITE1_ENABLE 0x00000800 44ee7c6486Stsutsui#define GX_BWRITE1_DISABLE 0x00001000 45ee7c6486Stsutsui#define GX_BWRITE1_ALL 0x00001800 46ee7c6486Stsutsui#define GX_BWRITE0_ENABLE 0x00002000 47ee7c6486Stsutsui#define GX_BWRITE0_DISABLE 0x00004000 48ee7c6486Stsutsui#define GX_BWRITE0_ALL 0x00006000 49ee7c6486Stsutsui#define GX_DRAW_RENDER 0x00008000 50ee7c6486Stsutsui#define GX_DRAW_PICK 0x00010000 51ee7c6486Stsutsui#define GX_DRAW_ALL 0x00018000 52ee7c6486Stsutsui#define GX_MODE_COLOR8 0x00020000 53ee7c6486Stsutsui#define GX_MODE_COLOR1 0x00040000 54ee7c6486Stsutsui#define GX_MODE_HRMONO 0x00060000 55ee7c6486Stsutsui#define GX_MODE_ALL 0x00060000 56ee7c6486Stsutsui#define GX_VBLANK 0x00080000 57ee7c6486Stsutsui#define GX_BLIT_NOSRC 0x00100000 58ee7c6486Stsutsui#define GX_BLIT_SRC 0x00200000 59ee7c6486Stsutsui#define GX_BLIT_ALL 0x00300000 60ee7c6486Stsutsui 61ee7c6486Stsutsui/* rasterops */ 62ee7c6486Stsutsui#define GX_ROP_CLEAR 0x0 63ee7c6486Stsutsui#define GX_ROP_INVERT 0x1 64ee7c6486Stsutsui#define GX_ROP_NOOP 0x2 65ee7c6486Stsutsui#define GX_ROP_SET 0x3 66ee7c6486Stsutsui 67ee7c6486Stsutsui#define GX_ROP_00_0(rop) ((rop) << 0) 68ee7c6486Stsutsui#define GX_ROP_00_1(rop) ((rop) << 2) 69ee7c6486Stsutsui#define GX_ROP_01_0(rop) ((rop) << 4) 70ee7c6486Stsutsui#define GX_ROP_01_1(rop) ((rop) << 6) 71ee7c6486Stsutsui#define GX_ROP_10_0(rop) ((rop) << 8) 72ee7c6486Stsutsui#define GX_ROP_10_1(rop) ((rop) << 10) 73ee7c6486Stsutsui#define GX_ROP_11_0(rop) ((rop) << 12) 74ee7c6486Stsutsui#define GX_ROP_11_1(rop) ((rop) << 14) 75ee7c6486Stsutsui#define GX_PLOT_PLOT 0x00000000 76ee7c6486Stsutsui#define GX_PLOT_UNPLOT 0x00020000 77ee7c6486Stsutsui#define GX_RAST_BOOL 0x00000000 78ee7c6486Stsutsui#define GX_RAST_LINEAR 0x00040000 79ee7c6486Stsutsui#define GX_ATTR_UNSUPP 0x00400000 80ee7c6486Stsutsui#define GX_ATTR_SUPP 0x00800000 81ee7c6486Stsutsui#define GX_POLYG_OVERLAP 0x01000000 82ee7c6486Stsutsui#define GX_POLYG_NONOVERLAP 0x02000000 83ee7c6486Stsutsui#define GX_PATTERN_ZEROS 0x04000000 84ee7c6486Stsutsui#define GX_PATTERN_ONES 0x08000000 85ee7c6486Stsutsui#define GX_PATTERN_MASK 0x0c000000 86ee7c6486Stsutsui#define GX_PIXEL_ZEROS 0x10000000 87ee7c6486Stsutsui#define GX_PIXEL_ONES 0x20000000 88ee7c6486Stsutsui#define GX_PIXEL_MASK 0x30000000 89ee7c6486Stsutsui#define GX_PLANE_ZEROS 0x40000000 90ee7c6486Stsutsui#define GX_PLANE_ONES 0x80000000 91ee7c6486Stsutsui#define GX_PLANE_MASK 0xc0000000 92ee7c6486Stsutsui 93ee7c6486Stsutsuitypedef struct _sunGX { 94ee7c6486Stsutsui Uint junk0[1]; 95ee7c6486Stsutsui VUint mode; 96ee7c6486Stsutsui VUint clip; 97ee7c6486Stsutsui Uint junk1[1]; 98ee7c6486Stsutsui VUint s; 99ee7c6486Stsutsui VUint draw; 100ee7c6486Stsutsui VUint blit; 101ee7c6486Stsutsui VUint font; 102ee7c6486Stsutsui Uint junk2[24]; 103ee7c6486Stsutsui VUint x0, y0, z0, color0; 104ee7c6486Stsutsui VUint x1, y1, z1, color1; 105ee7c6486Stsutsui VUint x2, y2, z2, color2; 106ee7c6486Stsutsui VUint x3, y3, z3, color3; 107ee7c6486Stsutsui VUint offx, offy; 108ee7c6486Stsutsui Uint junk3[2]; 109ee7c6486Stsutsui VUint incx, incy; 110ee7c6486Stsutsui Uint junk4[2]; 111ee7c6486Stsutsui VUint clipminx, clipminy; 112ee7c6486Stsutsui Uint junk5[2]; 113ee7c6486Stsutsui VUint clipmaxx, clipmaxy; 114ee7c6486Stsutsui Uint junk6[2]; 115ee7c6486Stsutsui VUint fg; 116ee7c6486Stsutsui VUint bg; 117ee7c6486Stsutsui VUint alu; 118ee7c6486Stsutsui VUint pm; 119ee7c6486Stsutsui VUint pixelm; 120ee7c6486Stsutsui Uint junk7[2]; 121ee7c6486Stsutsui VUint patalign; 122ee7c6486Stsutsui VUint pattern[8]; 123ee7c6486Stsutsui Uint junk8[432]; 124ee7c6486Stsutsui VUint apointx, apointy, apointz; 125ee7c6486Stsutsui Uint junk9[1]; 126ee7c6486Stsutsui VUint rpointx, rpointy, rpointz; 127ee7c6486Stsutsui Uint junk10[5]; 128ee7c6486Stsutsui VUint pointr, pointg, pointb, pointa; 129ee7c6486Stsutsui VUint alinex, aliney, alinez; 130ee7c6486Stsutsui Uint junk11[1]; 131ee7c6486Stsutsui VUint rlinex, rliney, rlinez; 132ee7c6486Stsutsui Uint junk12[5]; 133ee7c6486Stsutsui VUint liner, lineg, lineb, linea; 134ee7c6486Stsutsui VUint atrix, atriy, atriz; 135ee7c6486Stsutsui Uint junk13[1]; 136ee7c6486Stsutsui VUint rtrix, rtriy, rtriz; 137ee7c6486Stsutsui Uint junk14[5]; 138ee7c6486Stsutsui VUint trir, trig, trib, tria; 139ee7c6486Stsutsui VUint aquadx, aquady, aquadz; 140ee7c6486Stsutsui Uint junk15[1]; 141ee7c6486Stsutsui VUint rquadx, rquady, rquadz; 142ee7c6486Stsutsui Uint junk16[5]; 143ee7c6486Stsutsui VUint quadr, quadg, quadb, quada; 144ee7c6486Stsutsui VUint arectx, arecty, arectz; 145ee7c6486Stsutsui Uint junk17[1]; 146ee7c6486Stsutsui VUint rrectx, rrecty, rrectz; 147ee7c6486Stsutsui Uint junk18[5]; 148ee7c6486Stsutsui VUint rectr, rectg, rectb, recta; 149ee7c6486Stsutsui} sunGX, *sunGXPtr; 150ee7c6486Stsutsui 151ee7c6486Stsutsui/* Macros */ 152ee7c6486Stsutsui 153ee7c6486Stsutsui#define GX_ROP_USE_PIXELMASK 0x30000000 154ee7c6486Stsutsui 155ee7c6486Stsutsui#define GX_BLT_INPROGRESS 0x20000000 156ee7c6486Stsutsui 157ee7c6486Stsutsui#define GX_INPROGRESS 0x10000000 158ee7c6486Stsutsui#define GX_FULL 0x20000000 159ee7c6486Stsutsui 160ee7c6486Stsutsui#define GXWait(gx,r)\ 161ee7c6486Stsutsui do\ 162ee7c6486Stsutsui (r) = (int) (gx)->s; \ 163ee7c6486Stsutsui while ((r) & GX_INPROGRESS) 164ee7c6486Stsutsui 165ee7c6486Stsutsui#define GXDrawDone(gx,r) \ 166ee7c6486Stsutsui do \ 167ee7c6486Stsutsui (r) = (int) (gx)->draw; \ 168ee7c6486Stsutsui while ((r) < 0 && ((r) & GX_FULL)) 169ee7c6486Stsutsui 170ee7c6486Stsutsui#define GXBlitDone(gx,r)\ 171ee7c6486Stsutsui do\ 172ee7c6486Stsutsui (r)= (int) (gx)->blit; \ 173ee7c6486Stsutsui while ((r) < 0 && ((r) & GX_BLT_INPROGRESS)) 174ee7c6486Stsutsui 175ee7c6486Stsutsui#define GXBlitInit(gx,rop,pmsk) {\ 176ee7c6486Stsutsui gx->fg = 0xff;\ 177ee7c6486Stsutsui gx->bg = 0x00;\ 178ee7c6486Stsutsui gx->pixelm = ~0;\ 179ee7c6486Stsutsui gx->s = 0;\ 180ee7c6486Stsutsui gx->alu = rop;\ 181ee7c6486Stsutsui gx->pm = pmsk;\ 182ee7c6486Stsutsui gx->clip = 0;\ 183ee7c6486Stsutsui} 184ee7c6486Stsutsui 185ee7c6486Stsutsui#define GXDrawInit(gx,fore,rop,pmsk) {\ 186ee7c6486Stsutsui gx->fg = fore;\ 187ee7c6486Stsutsui gx->bg = 0x00; \ 188ee7c6486Stsutsui gx->pixelm = ~0; \ 189ee7c6486Stsutsui gx->s = 0; \ 190ee7c6486Stsutsui gx->alu = rop; \ 191ee7c6486Stsutsui gx->pm = pmsk; \ 192ee7c6486Stsutsui gx->clip = 0;\ 193ee7c6486Stsutsui} 194ee7c6486Stsutsui 195ee7c6486Stsutsui#define GXStippleInit(gx,stipple) {\ 196ee7c6486Stsutsui int _i; \ 197ee7c6486Stsutsui Uint *sp; \ 198ee7c6486Stsutsui VUint *dp; \ 199ee7c6486Stsutsui _i = 8; \ 200ee7c6486Stsutsui sp = stipple->bits; \ 201ee7c6486Stsutsui dp = gx->pattern; \ 202ee7c6486Stsutsui while (_i--) { \ 203ee7c6486Stsutsui dp[_i] = sp[_i]; \ 204ee7c6486Stsutsui } \ 205ee7c6486Stsutsui gx->fg = stipple->fore; \ 206ee7c6486Stsutsui gx->bg = stipple->back; \ 207ee7c6486Stsutsui gx->patalign = stipple->patalign; \ 208ee7c6486Stsutsui gx->alu = stipple->alu; \ 209ee7c6486Stsutsui} 210ee7c6486Stsutsui 211ee7c6486Stsutsuiextern int sunGXScreenPrivateIndex; 212ee7c6486Stsutsuiextern int sunGXGCPrivateIndex; 213ee7c6486Stsutsuiextern int sunGXWindowPrivateIndex; 214ee7c6486Stsutsui 215ee7c6486Stsutsui#define sunGXGetScreenPrivate(s) ((sunGXPtr) \ 216ee7c6486Stsutsui (s)->devPrivates[sunGXScreenPrivateIndex].ptr) 217ee7c6486Stsutsui 218ee7c6486Stsutsuitypedef struct _sunGXStipple { 219ee7c6486Stsutsui Uint fore, back; 220ee7c6486Stsutsui Uint patalign; 221ee7c6486Stsutsui Uint alu; 222ee7c6486Stsutsui Uint bits[8]; /* actually 16 shorts */ 223ee7c6486Stsutsui} sunGXStippleRec, *sunGXStipplePtr; 224ee7c6486Stsutsui 225ee7c6486Stsutsuitypedef struct _sunGXPrivGC { 226ee7c6486Stsutsui int type; 227ee7c6486Stsutsui sunGXStipplePtr stipple; 228ee7c6486Stsutsui} sunGXPrivGCRec, *sunGXPrivGCPtr; 229ee7c6486Stsutsui 230ee7c6486Stsutsui#define sunGXGetGCPrivate(g) ((sunGXPrivGCPtr) \ 231ee7c6486Stsutsui (g)->devPrivates[sunGXGCPrivateIndex].ptr) 232ee7c6486Stsutsui 233ee7c6486Stsutsui#define sunGXGetWindowPrivate(w) ((sunGXStipplePtr) \ 234ee7c6486Stsutsui (w)->devPrivates[sunGXWindowPrivateIndex].ptr) 235ee7c6486Stsutsui 236ee7c6486Stsutsui#define sunGXSetWindowPrivate(w,p) (\ 237ee7c6486Stsutsui (w)->devPrivates[sunGXWindowPrivateIndex].ptr = (pointer) p) 238ee7c6486Stsutsui 239