sunGX.h revision ee7c6486
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