(Stephane Marchesin, me) add hyperz support to radeon and r200 drivers. Only fast...
[mesa.git] / src / mesa / drivers / dri / i830 / i830_3d_reg.h
1 /* $XFree86: xc/lib/GL/mesa/src/drv/i830/i830_3d_reg.h,v 1.4 2002/12/10 01:26:53 dawes Exp $ */
2 #define I830_SET_FIELD( var, mask, value ) (var &= ~(mask), var |= value)
3
4 #define CMD_3D (0x3<<29)
5
6 /* 3DPRIMITIVE, p104 */
7 #define PRIM3D_INLINE (CMD_3D | (0x1f<<24))
8 #define PRIM3D_INDIRECT_SEQ ((1<<23) | PRIM3D_INLINE)
9 #define PRIM3D_INDICES ((1<<23) | PRIM3D_INLINE | (1<<17))
10
11 #define PRIM3D_INLINE_CNT(used) ((used / 4) - 2)
12 #define PRIM3D_INDICES_CNT(num_indices) ((num_indices + 1) / 2)
13 #define PRIM3D_INDIRECT_CNT(verts) (verts)
14
15 #define PRIM3D_TRILIST 0
16 #define PRIM3D_TRISTRIP (0x1<<18)
17 #define PRIM3D_TRISTRIP_RVRSE (0x2<<18)
18 #define PRIM3D_TRIFAN (0x3<<18)
19 #define PRIM3D_POLY (0x4<<18)
20 #define PRIM3D_LINELIST (0x5<<18)
21 #define PRIM3D_LINESTRIP (0x6<<18)
22 #define PRIM3D_RECTLIST (0x7<<18)
23 #define PRIM3D_POINTLIST (0x8<<18)
24 #define PRIM3D_DIB (0x9<<18)
25
26 /* STATE3D_ANTI_ALIASING, p 123 */
27 #define STATE3D_AA_CMD (CMD_3D | (0x06<<24))
28
29 #define AA_LINE_ECAAR_WIDTH_ENABLE (1<<16)
30 #define AA_LINE_ECAAR_WIDTH_0_5 0
31 #define AA_LINE_ECAAR_WIDTH_1_0 (1<<14)
32 #define AA_LINE_ECAAR_WIDTH_2_0 (2<<14)
33 #define AA_LINE_ECAAR_WIDTH_4_0 (3<<14)
34
35 #define AA_LINE_REGION_WIDTH_ENABLE (1<<8)
36 #define AA_LINE_REGION_WIDTH_0_5 0
37 #define AA_LINE_REGION_WIDTH_1_0 (1<<6)
38 #define AA_LINE_REGION_WIDTH_2_0 (2<<6)
39 #define AA_LINE_REGION_WIDTH_4_0 (3<<6)
40
41 #define AA_LINE_ENABLE ((1<<1) | 1)
42 #define AA_LINE_DISABLE (1<<1)
43
44 /* STATE3D_BUFFER_INFO, p 124 */
45 #define STATE3D_BUF_INFO_CMD (CMD_3D | (0x1d<<24) | (0x8e<<16) | 1)
46 /* Dword 1 */
47 #define BUF_3D_ID_COLOR_BACK (0x3<<24)
48 #define BUF_3D_ID_DEPTH (0x7<<24)
49 #define BUF_3D_USE_FENCE (1<<23)
50 #define BUF_3D_TILED_SURFACE (1<<22)
51 #define BUF_3D_TILE_WALK_X 0
52 #define BUF_3D_TILE_WALK_Y (1<<21)
53 #define BUF_3D_PITCH(x) ((x)<<2)
54 /* Dword 2 */
55 #define BUF_3D_ADDR(x) ((x) & ~0x3)
56
57 /* STATE3D_COLOR_FACTOR_0, p127 */
58 #define STATE3D_COLOR_FACTOR_CMD(stage) (CMD_3D | (0x1d<<24) | ((0x90 + (stage))<<16))
59
60 /* STATE3D_CONSTANT_BLEND_COLOR, p128 */
61 #define STATE3D_CONST_BLEND_COLOR_CMD (CMD_3D | (0x1d<<24) | (0x88<<16))
62
63 /* STATE3D_DEFAULT_DIFFUSE, p128 */
64 #define STATE3D_DFLT_DIFFUSE_CMD (CMD_3D | (0x1d<<24) | (0x99<<16))
65
66 /* STATE3D_DEFAULT_SPECULAR, p129 */
67 #define STATE3D_DFLT_SPEC_CMD (CMD_3D | (0x1d<<24) | (0x9a<<16))
68
69 /* STATE3D_DEFAULT_Z, p129 */
70 #define STATE3D_DFLT_Z_CMD (CMD_3D | (0x1d<<24) | (0x98<<16))
71
72 /* STATE3D_DEST_BUFFER_VARIABLES, p130 */
73 #define STATE3D_DST_BUF_VARS_CMD (CMD_3D | (0x1d<<24) | (0x85<<16))
74 /* Dword 1 */
75 #define DSTORG_HORT_BIAS(x) ((x)<<20)
76 #define DSTORG_VERT_BIAS(x) ((x)<<16)
77 #define COLOR_4_2_2_CHNL_WRT_ALL 0
78 #define COLOR_4_2_2_CHNL_WRT_Y (1<<12)
79 #define COLOR_4_2_2_CHNL_WRT_CR (2<<12)
80 #define COLOR_4_2_2_CHNL_WRT_CB (3<<12)
81 #define COLOR_4_2_2_CHNL_WRT_CRCB (4<<12)
82 #define COLR_BUF_8BIT 0
83 #define COLR_BUF_RGB555 (1<<8)
84 #define COLR_BUF_RGB565 (2<<8)
85 #define COLR_BUF_ARGB8888 (3<<8)
86 #define DEPTH_IS_Z 0
87 #define DEPTH_IS_W (1<<6)
88 #define DEPTH_FRMT_16_FIXED 0
89 #define DEPTH_FRMT_16_FLOAT (1<<2)
90 #define DEPTH_FRMT_24_FIXED_8_OTHER (2<<2)
91 #define DEPTH_FRMT_24_FLOAT_8_OTHER (3<<2)
92 #define VERT_LINE_STRIDE_1 (1<<1)
93 #define VERT_LINE_STRIDE_0 0
94 #define VERT_LINE_STRIDE_OFS_1 1
95 #define VERT_LINE_STRIDE_OFS_0 0
96
97 /* STATE3D_DRAWING_RECTANGLE, p133 */
98 #define STATE3D_DRAW_RECT_CMD (CMD_3D|(0x1d<<24)|(0x80<<16)|3)
99 /* Dword 1 */
100 #define DRAW_RECT_DIS_DEPTH_OFS (1<<30)
101 #define DRAW_DITHER_OFS_X(x) ((x)<<26)
102 #define DRAW_DITHER_OFS_Y(x) ((x)<<24)
103 /* Dword 2 */
104 #define DRAW_YMIN(x) ((x)<<16)
105 #define DRAW_XMIN(x) (x)
106 /* Dword 3 */
107 #define DRAW_YMAX(x) ((x)<<16)
108 #define DRAW_XMAX(x) (x)
109 /* Dword 4 */
110 #define DRAW_YORG(x) ((x)<<16)
111 #define DRAW_XORG(x) (x)
112
113 /* STATE3D_ENABLES_1, p136 */
114 #define STATE3D_ENABLES_1_CMD (CMD_3D|(0x3<<24))
115 #define ENABLE_LOGIC_OP_MASK ((1<<23)|(1<<22))
116 #define ENABLE_LOGIC_OP ((1<<23)|(1<<22))
117 #define DISABLE_LOGIC_OP (1<<23)
118 #define ENABLE_STENCIL_TEST ((1<<21)|(1<<20))
119 #define DISABLE_STENCIL_TEST (1<<21)
120 #define ENABLE_DEPTH_BIAS ((1<<11)|(1<<10))
121 #define DISABLE_DEPTH_BIAS (1<<11)
122 #define ENABLE_SPEC_ADD_MASK ((1<<9)|(1<<8))
123 #define ENABLE_SPEC_ADD ((1<<9)|(1<<8))
124 #define DISABLE_SPEC_ADD (1<<9)
125 #define ENABLE_DIS_FOG_MASK ((1<<7)|(1<<6))
126 /* prefixed I830 because ENABLE_FOG defined elsewhere */
127 #define I830_ENABLE_FOG ((1<<7)|(1<<6))
128 #define I830_DISABLE_FOG (1<<7)
129 #define ENABLE_DIS_ALPHA_TEST_MASK ((1<<5)|(1<<4))
130 #define ENABLE_ALPHA_TEST ((1<<5)|(1<<4))
131 #define DISABLE_ALPHA_TEST (1<<5)
132 #define ENABLE_DIS_CBLEND_MASK ((1<<3)|(1<<2))
133 #define ENABLE_COLOR_BLEND ((1<<3)|(1<<2))
134 #define DISABLE_COLOR_BLEND (1<<3)
135 #define ENABLE_DIS_DEPTH_TEST_MASK ((1<<1)|1)
136 #define ENABLE_DEPTH_TEST ((1<<1)|1)
137 #define DISABLE_DEPTH_TEST (1<<1)
138
139 /* STATE3D_ENABLES_2, p138 */
140 #define STATE3D_ENABLES_2_CMD (CMD_3D|(0x4<<24))
141 #define ENABLE_STENCIL_WRITE ((1<<21)|(1<<20))
142 #define DISABLE_STENCIL_WRITE (1<<21)
143 #define ENABLE_TEX_CACHE ((1<<17)|(1<<16))
144 #define DISABLE_TEX_CACHE (1<<17)
145 #define ENABLE_DITHER ((1<<9)|(1<<8))
146 #define DISABLE_DITHER (1<<9)
147 #define ENABLE_COLOR_MASK (1<<10)
148 #define WRITEMASK_ALPHA (1<<7)
149 #define WRITEMASK_ALPHA_SHIFT 7
150 #define WRITEMASK_RED (1<<6)
151 #define WRITEMASK_RED_SHIFT 6
152 #define WRITEMASK_GREEN (1<<5)
153 #define WRITEMASK_GREEN_SHIFT 5
154 #define WRITEMASK_BLUE (1<<4)
155 #define WRITEMASK_BLUE_SHIFT 4
156 #define WRITEMASK_MASK ((1<<4)|(1<<5)|(1<<6)|(1<<7))
157 #define ENABLE_COLOR_WRITE ((1<<3)|(1<<2))
158 #define DISABLE_COLOR_WRITE (1<<3)
159 #define ENABLE_DIS_DEPTH_WRITE_MASK 0x3
160 #define ENABLE_DEPTH_WRITE ((1<<1)|1)
161 #define DISABLE_DEPTH_WRITE (1<<1)
162
163 /* STATE3D_FOG_COLOR, p139 */
164 #define STATE3D_FOG_COLOR_CMD (CMD_3D|(0x15<<24))
165 #define FOG_COLOR_RED(x) ((x)<<16)
166 #define FOG_COLOR_GREEN(x) ((x)<<8)
167 #define FOG_COLOR_BLUE(x) (x)
168
169 /* STATE3D_FOG_MODE, p140 */
170 #define STATE3D_FOG_MODE_CMD (CMD_3D|(0x1d<<24)|(0x89<<16)|2)
171 /* Dword 1 */
172 #define FOGFUNC_ENABLE (1<<31)
173 #define FOGFUNC_VERTEX 0
174 #define FOGFUNC_PIXEL_EXP (1<<28)
175 #define FOGFUNC_PIXEL_EXP2 (2<<28)
176 #define FOGFUNC_PIXEL_LINEAR (3<<28)
177 #define FOGSRC_INDEX_Z (1<<27)
178 #define FOGSRC_INDEX_W ((1<<27)|(1<<25))
179 #define FOG_LINEAR_CONST (1<<24)
180 #define FOG_CONST_1(x) ((x)<<4)
181 #define ENABLE_FOG_DENSITY (1<<23)
182 /* Dword 2 */
183 #define FOG_CONST_2(x) (x)
184 /* Dword 3 */
185 #define FOG_DENSITY(x) (x)
186
187 /* STATE3D_INDEPENDENT_ALPHA_BLEND, p142 */
188 #define STATE3D_INDPT_ALPHA_BLEND_CMD (CMD_3D|(0x0b<<24))
189 #define ENABLE_INDPT_ALPHA_BLEND ((1<<23)|(1<<22))
190 #define DISABLE_INDPT_ALPHA_BLEND (1<<23)
191 #define ALPHA_BLENDFUNC_MASK 0x3f0000
192 #define ENABLE_ALPHA_BLENDFUNC (1<<21)
193 #define ABLENDFUNC_ADD 0
194 #define ABLENDFUNC_SUB (1<<16)
195 #define ABLENDFUNC_RVSE_SUB (2<<16)
196 #define ABLENDFUNC_MIN (3<<16)
197 #define ABLENDFUNC_MAX (4<<16)
198 #define SRC_DST_ABLEND_MASK 0xfff
199 #define ENABLE_SRC_ABLEND_FACTOR (1<<11)
200 #define SRC_ABLEND_FACT(x) ((x)<<6)
201 #define ENABLE_DST_ABLEND_FACTOR (1<<5)
202 #define DST_ABLEND_FACT(x) (x)
203
204 #define BLEND_STATE_MASK (ALPHA_BLENDFUNC_MASK | SRC_DST_ABLEND_MASK)
205
206 #define BLENDFACT_ZERO 0x01
207 #define BLENDFACT_ONE 0x02
208 #define BLENDFACT_SRC_COLR 0x03
209 #define BLENDFACT_INV_SRC_COLR 0x04
210 #define BLENDFACT_SRC_ALPHA 0x05
211 #define BLENDFACT_INV_SRC_ALPHA 0x06
212 #define BLENDFACT_DST_ALPHA 0x07
213 #define BLENDFACT_INV_DST_ALPHA 0x08
214 #define BLENDFACT_DST_COLR 0x09
215 #define BLENDFACT_INV_DST_COLR 0x0a
216 #define BLENDFACT_SRC_ALPHA_SATURATE 0x0b
217 #define BLENDFACT_CONST_COLOR 0x0c
218 #define BLENDFACT_INV_CONST_COLOR 0x0d
219 #define BLENDFACT_CONST_ALPHA 0x0e
220 #define BLENDFACT_INV_CONST_ALPHA 0x0f
221
222 /* STATE3D_MAP_BLEND_ARG, p152 */
223 #define STATE3D_MAP_BLEND_ARG_CMD(stage) (CMD_3D|(0x0e<<24)|((stage)<<20))
224
225 #define TEXPIPE_COLOR 0
226 #define TEXPIPE_ALPHA (1<<18)
227 #define TEXPIPE_KILL (2<<18)
228 #define TEXBLEND_ARG0 0
229 #define TEXBLEND_ARG1 (1<<15)
230 #define TEXBLEND_ARG2 (2<<15)
231 #define TEXBLEND_ARG3 (3<<15)
232 #define TEXBLENDARG_MODIFY_PARMS (1<<6)
233 #define TEXBLENDARG_REPLICATE_ALPHA (1<<5)
234 #define TEXBLENDARG_INV_ARG (1<<4)
235 #define TEXBLENDARG_ONE 0
236 #define TEXBLENDARG_FACTOR 0x01
237 #define TEXBLENDARG_ACCUM 0x02
238 #define TEXBLENDARG_DIFFUSE 0x03
239 #define TEXBLENDARG_SPEC 0x04
240 #define TEXBLENDARG_CURRENT 0x05
241 #define TEXBLENDARG_TEXEL0 0x06
242 #define TEXBLENDARG_TEXEL1 0x07
243 #define TEXBLENDARG_TEXEL2 0x08
244 #define TEXBLENDARG_TEXEL3 0x09
245 #define TEXBLENDARG_FACTOR_N 0x0e
246
247 /* STATE3D_MAP_BLEND_OP, p155 */
248 #define STATE3D_MAP_BLEND_OP_CMD(stage) (CMD_3D|(0x0d<<24)|((stage)<<20))
249 #if 0
250 #define TEXPIPE_COLOR 0
251 #define TEXPIPE_ALPHA (1<<18)
252 #define TEXPIPE_KILL (2<<18)
253 #endif
254 #define ENABLE_TEXOUTPUT_WRT_SEL (1<<17)
255 #define TEXOP_OUTPUT_CURRENT 0
256 #define TEXOP_OUTPUT_ACCUM (1<<15)
257 #define ENABLE_TEX_CNTRL_STAGE ((1<<12)|(1<<11))
258 #define DISABLE_TEX_CNTRL_STAGE (1<<12)
259 #define TEXOP_SCALE_SHIFT 9
260 #define TEXOP_SCALE_1X (0 << TEXOP_SCALE_SHIFT)
261 #define TEXOP_SCALE_2X (1 << TEXOP_SCALE_SHIFT)
262 #define TEXOP_SCALE_4X (2 << TEXOP_SCALE_SHIFT)
263 #define TEXOP_MODIFY_PARMS (1<<8)
264 #define TEXOP_LAST_STAGE (1<<7)
265 #define TEXBLENDOP_KILLPIXEL 0x02
266 #define TEXBLENDOP_ARG1 0x01
267 #define TEXBLENDOP_ARG2 0x02
268 #define TEXBLENDOP_MODULATE 0x03
269 #define TEXBLENDOP_ADD 0x06
270 #define TEXBLENDOP_ADDSIGNED 0x07
271 #define TEXBLENDOP_BLEND 0x08
272 #define TEXBLENDOP_BLEND_AND_ADD 0x09
273 #define TEXBLENDOP_SUBTRACT 0x0a
274 #define TEXBLENDOP_DOT3 0x0b
275 #define TEXBLENDOP_DOT4 0x0c
276 #define TEXBLENDOP_MODULATE_AND_ADD 0x0d
277 #define TEXBLENDOP_MODULATE_2X_AND_ADD 0x0e
278 #define TEXBLENDOP_MODULATE_4X_AND_ADD 0x0f
279
280 /* STATE3D_MAP_BUMP_TABLE, p160 TODO */
281 /* STATE3D_MAP_COLOR_CHROMA_KEY, p161 TODO */
282
283 /* STATE3D_MAP_COORD_SET_BINDINGS, p162 */
284 #define STATE3D_MAP_COORD_SETBIND_CMD (CMD_3D|(0x1d<<24)|(0x02<<16))
285 #define TEXBIND_MASK3 ((1<<15)|(1<<14)|(1<<13)|(1<<12))
286 #define TEXBIND_MASK2 ((1<<11)|(1<<10)|(1<<9)|(1<<8))
287 #define TEXBIND_MASK1 ((1<<7)|(1<<6)|(1<<5)|(1<<4))
288 #define TEXBIND_MASK0 ((1<<3)|(1<<2)|(1<<1)|1)
289
290 #define TEXBIND_SET3(x) ((x)<<12)
291 #define TEXBIND_SET2(x) ((x)<<8)
292 #define TEXBIND_SET1(x) ((x)<<4)
293 #define TEXBIND_SET0(x) (x)
294
295 #define TEXCOORDSRC_KEEP 0
296 #define TEXCOORDSRC_DEFAULT 0x01
297 #define TEXCOORDSRC_VTXSET_0 0x08
298 #define TEXCOORDSRC_VTXSET_1 0x09
299 #define TEXCOORDSRC_VTXSET_2 0x0a
300 #define TEXCOORDSRC_VTXSET_3 0x0b
301 #define TEXCOORDSRC_VTXSET_4 0x0c
302 #define TEXCOORDSRC_VTXSET_5 0x0d
303 #define TEXCOORDSRC_VTXSET_6 0x0e
304 #define TEXCOORDSRC_VTXSET_7 0x0f
305
306 #define MAP_UNIT(unit) ((unit)<<16)
307 #define MAP_UNIT_MASK (3<<16)
308
309 /* STATE3D_MAP_COORD_SETS, p164 */
310 #define STATE3D_MAP_COORD_SET_CMD (CMD_3D|(0x1c<<24)|(0x01<<19))
311 #define ENABLE_TEXCOORD_PARAMS (1<<15)
312 #define TEXCOORDS_ARE_NORMAL (1<<14)
313 #define TEXCOORDS_ARE_IN_TEXELUNITS 0
314 #define TEXCOORDTYPE_CARTESIAN 0
315 #define TEXCOORDTYPE_HOMOGENEOUS (1<<11)
316 #define TEXCOORDTYPE_VECTOR (2<<11)
317 #define ENABLE_ADDR_V_CNTL (1<<7)
318 #define ENABLE_ADDR_U_CNTL (1<<3)
319 #define TEXCOORD_ADDR_V_MODE(x) ((x)<<4)
320 #define TEXCOORD_ADDR_U_MODE(x) (x)
321 #define TEXCOORDMODE_WRAP 0
322 #define TEXCOORDMODE_MIRROR 1
323 #define TEXCOORDMODE_CLAMP 2
324 #define TEXCOORDMODE_WRAP_SHORTEST 3
325 #define TEXCOORDMODE_CLAMP_BORDER 4
326 #define TEXCOORD_ADDR_V_MASK 0x70
327 #define TEXCOORD_ADDR_U_MASK 0x7
328
329 /* STATE3D_MAP_CUBE, p168 TODO */
330 #define STATE3D_MAP_CUBE (CMD_3D|(0x1c<<24)|(0x0a<<19))
331 #define CUBE_NEGX_ENABLE (1<<5)
332 #define CUBE_POSX_ENABLE (1<<4)
333 #define CUBE_NEGY_ENABLE (1<<3)
334 #define CUBE_POSY_ENABLE (1<<2)
335 #define CUBE_NEGZ_ENABLE (1<<1)
336 #define CUBE_POSZ_ENABLE (1<<0)
337
338
339 /* STATE3D_MODES_1, p190 */
340 #define STATE3D_MODES_1_CMD (CMD_3D|(0x08<<24))
341 #define BLENDFUNC_MASK 0x3f0000
342 #define ENABLE_COLR_BLND_FUNC (1<<21)
343 #define BLENDFUNC_ADD 0
344 #define BLENDFUNC_SUB (1<<16)
345 #define BLENDFUNC_RVRSE_SUB (2<<16)
346 #define BLENDFUNC_MIN (3<<16)
347 #define BLENDFUNC_MAX (4<<16)
348 #define SRC_DST_BLND_MASK 0xfff
349 #define ENABLE_SRC_BLND_FACTOR (1<<11)
350 #define ENABLE_DST_BLND_FACTOR (1<<5)
351 #define SRC_BLND_FACT(x) ((x)<<6)
352 #define DST_BLND_FACT(x) (x)
353
354 /* Use the blendfact defines for BLND_FACTOR macros */
355 #if 0
356 #define BLENDFACT_ZERO 0x01
357 #define BLENDFACT_ONE 0x02
358 #define BLENDFACT_SRC_COLR 0x03
359 #define BLENDFACT_INV_SRC_COLR 0x04
360 #define BLENDFACT_SRC_ALPHA 0x05
361 #define BLENDFACT_INV_SRC_ALPHA 0x06
362 #define BLENDFACT_DST_ALPHA 0x07
363 #define BLENDFACT_INV_DST_ALPHA 0x08
364 #define BLENDFACT_CONST_ALPHA 0x0e
365 #define BLENDFACT_INV_CONST_ALPHA 0x0f
366 #endif
367
368 /* STATE3D_MODES_2, p192 */
369 #define STATE3D_MODES_2_CMD (CMD_3D|(0x0f<<24))
370 #define ENABLE_GLOBAL_DEPTH_BIAS (1<<22)
371 #define GLOBAL_DEPTH_BIAS(x) ((x)<<14)
372 #define ENABLE_ALPHA_TEST_FUNC (1<<13)
373 #define ENABLE_ALPHA_REF_VALUE (1<<8)
374 #define ALPHA_TEST_FUNC(x) ((x)<<9)
375 #define ALPHA_REF_VALUE(x) (x)
376
377 #define ALPHA_TEST_REF_MASK 0x3fff
378 #define COMPAREFUNC_ALWAYS 0
379 #define COMPAREFUNC_NEVER 0x1
380 #define COMPAREFUNC_LESS 0x2
381 #define COMPAREFUNC_EQUAL 0x3
382 #define COMPAREFUNC_LEQUAL 0x4
383 #define COMPAREFUNC_GREATER 0x5
384 #define COMPAREFUNC_NOTEQUAL 0x6
385 #define COMPAREFUNC_GEQUAL 0x7
386
387 /* STATE3D_MODES_3, p193 */
388 #define STATE3D_MODES_3_CMD (CMD_3D|(0x02<<24))
389 #define DEPTH_TEST_FUNC_MASK 0x1f0000
390 #define ENABLE_DEPTH_TEST_FUNC (1<<20)
391 /* Uses COMPAREFUNC */
392 #define DEPTH_TEST_FUNC(x) ((x)<<16)
393 #define ENABLE_ALPHA_SHADE_MODE (1<<11)
394 #define ENABLE_FOG_SHADE_MODE (1<<9)
395 #define ENABLE_SPEC_SHADE_MODE (1<<7)
396 #define ENABLE_COLOR_SHADE_MODE (1<<5)
397 #define ALPHA_SHADE_MODE(x) ((x)<<10)
398 #define FOG_SHADE_MODE(x) ((x)<<8)
399 #define SPEC_SHADE_MODE(x) ((x)<<6)
400 #define COLOR_SHADE_MODE(x) ((x)<<4)
401 #define CULLMODE_MASK 0xf
402 #define ENABLE_CULL_MODE (1<<3)
403 #define CULLMODE_BOTH 0
404 #define CULLMODE_NONE 1
405 #define CULLMODE_CW 2
406 #define CULLMODE_CCW 3
407
408 #define SHADE_MODE_LINEAR 0
409 #define SHADE_MODE_FLAT 0x1
410
411 /* STATE3D_MODES_4, p195 */
412 #define STATE3D_MODES_4_CMD (CMD_3D|(0x16<<24))
413 #define ENABLE_LOGIC_OP_FUNC (1<<23)
414 #define LOGIC_OP_FUNC(x) ((x)<<18)
415 #define LOGICOP_MASK ((1<<18)|(1<<19)|(1<<20)|(1<<21))
416 #define LOGICOP_CLEAR 0
417 #define LOGICOP_NOR 0x1
418 #define LOGICOP_AND_INV 0x2
419 #define LOGICOP_COPY_INV 0x3
420 #define LOGICOP_AND_RVRSE 0x4
421 #define LOGICOP_INV 0x5
422 #define LOGICOP_XOR 0x6
423 #define LOGICOP_NAND 0x7
424 #define LOGICOP_AND 0x8
425 #define LOGICOP_EQUIV 0x9
426 #define LOGICOP_NOOP 0xa
427 #define LOGICOP_OR_INV 0xb
428 #define LOGICOP_COPY 0xc
429 #define LOGICOP_OR_RVRSE 0xd
430 #define LOGICOP_OR 0xe
431 #define LOGICOP_SET 0xf
432 #define MODE4_ENABLE_STENCIL_TEST_MASK ((1<<17)|(0xff00))
433 #define ENABLE_STENCIL_TEST_MASK (1<<17)
434 #define STENCIL_TEST_MASK(x) ((x)<<8)
435 #define MODE4_ENABLE_STENCIL_WRITE_MASK ((1<<16)|(0x00ff))
436 #define ENABLE_STENCIL_WRITE_MASK (1<<16)
437 #define STENCIL_WRITE_MASK(x) (x)
438
439 /* STATE3D_MODES_5, p196 */
440 #define STATE3D_MODES_5_CMD (CMD_3D|(0x0c<<24))
441 #define ENABLE_SPRITE_POINT_TEX (1<<23)
442 #define SPRITE_POINT_TEX_ON (1<<22)
443 #define SPRITE_POINT_TEX_OFF 0
444 #define FLUSH_RENDER_CACHE (1<<18)
445 #define FLUSH_TEXTURE_CACHE (1<<16)
446 #define FIXED_LINE_WIDTH_MASK 0xfc00
447 #define ENABLE_FIXED_LINE_WIDTH (1<<15)
448 #define FIXED_LINE_WIDTH(x) ((x)<<10)
449 #define FIXED_POINT_WIDTH_MASK 0x3ff
450 #define ENABLE_FIXED_POINT_WIDTH (1<<9)
451 #define FIXED_POINT_WIDTH(x) (x)
452
453 /* STATE3D_RASTERIZATION_RULES, p198 */
454 #define STATE3D_RASTER_RULES_CMD (CMD_3D|(0x07<<24))
455 #define ENABLE_POINT_RASTER_RULE (1<<15)
456 #define OGL_POINT_RASTER_RULE (1<<13)
457 #define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8)
458 #define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5)
459 #define ENABLE_TRI_STRIP_PROVOKE_VRTX (1<<2)
460 #define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6)
461 #define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3)
462 #define TRI_STRIP_PROVOKE_VRTX(x) (x)
463
464 /* STATE3D_SCISSOR_ENABLE, p200 */
465 #define STATE3D_SCISSOR_ENABLE_CMD (CMD_3D|(0x1c<<24)|(0x10<<19))
466 #define ENABLE_SCISSOR_RECT ((1<<1) | 1)
467 #define DISABLE_SCISSOR_RECT (1<<1)
468
469 /* STATE3D_SCISSOR_RECTANGLE_0, p201 */
470 #define STATE3D_SCISSOR_RECT_0_CMD (CMD_3D|(0x1d<<24)|(0x81<<16)|1)
471 /* Dword 1 */
472 #define SCISSOR_RECT_0_YMIN(x) ((x)<<16)
473 #define SCISSOR_RECT_0_XMIN(x) (x)
474 /* Dword 2 */
475 #define SCISSOR_RECT_0_YMAX(x) ((x)<<16)
476 #define SCISSOR_RECT_0_XMAX(x) (x)
477
478 /* STATE3D_STENCIL_TEST, p202 */
479 #define STATE3D_STENCIL_TEST_CMD (CMD_3D|(0x09<<24))
480 #define ENABLE_STENCIL_PARMS (1<<23)
481 #define STENCIL_OPS_MASK (0xffc000)
482 #define STENCIL_FAIL_OP(x) ((x)<<20)
483 #define STENCIL_PASS_DEPTH_FAIL_OP(x) ((x)<<17)
484 #define STENCIL_PASS_DEPTH_PASS_OP(x) ((x)<<14)
485
486 #define STENCILOP_KEEP 0
487 #define STENCILOP_ZERO 0x1
488 #define STENCILOP_REPLACE 0x2
489 #define STENCILOP_INCRSAT 0x3
490 #define STENCILOP_DECRSAT 0x4
491 #define STENCILOP_INCR 0x5
492 #define STENCILOP_DECR 0x6
493 #define STENCILOP_INVERT 0x7
494
495 #define ENABLE_STENCIL_TEST_FUNC_MASK ((1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9))
496 #define ENABLE_STENCIL_TEST_FUNC (1<<13)
497 /* Uses COMPAREFUNC */
498 #define STENCIL_TEST_FUNC(x) ((x)<<9)
499 #define STENCIL_REF_VALUE_MASK ((1<<8)|0xff)
500 #define ENABLE_STENCIL_REF_VALUE (1<<8)
501 #define STENCIL_REF_VALUE(x) (x)
502
503 /* STATE3D_VERTEX_FORMAT, p204 */
504 #define STATE3D_VERTEX_FORMAT_CMD (CMD_3D|(0x05<<24))
505 #define VRTX_HAS_POINT_WIDTH (1<<12)
506 #define VRTX_TEX_COORD_COUNT(x) ((x)<<8)
507 #define VRTX_HAS_SPEC (1<<7)
508 #define VRTX_HAS_DIFFUSE (1<<6)
509 #define VRTX_HAS_DEPTH_OFS (1<<5)
510 #define VRTX_HAS_XYZ (1<<1)
511 #define VRTX_HAS_XYZW (2<<1)
512 #define VRTX_HAS_XY (3<<1)
513 #define VRTX_HAS_XYW (4<<1)
514
515 /* STATE3D_VERTEX_FORMAT_2, p206 */
516 #define STATE3D_VERTEX_FORMAT_2_CMD (CMD_3D|(0x0a<<24))
517 #define VRTX_TEX_SET_7_FMT(x) ((x)<<14)
518 #define VRTX_TEX_SET_6_FMT(x) ((x)<<12)
519 #define VRTX_TEX_SET_5_FMT(x) ((x)<<10)
520 #define VRTX_TEX_SET_4_FMT(x) ((x)<<8)
521 #define VRTX_TEX_SET_3_FMT(x) ((x)<<6)
522 #define VRTX_TEX_SET_2_FMT(x) ((x)<<4)
523 #define VRTX_TEX_SET_1_FMT(x) ((x)<<2)
524 #define VRTX_TEX_SET_0_FMT(x) (x)
525
526 #define TEXCOORDFMT_2D 0
527 #define TEXCOORDFMT_3D 1
528 #define TEXCOORDFMT_4D 2
529 #define TEXCOORDFMT_1D 3
530
531 /*New stuff picked up along the way */
532
533 #define MLC_LOD_BIAS_MASK ((1<<7)-1)
534
535
536 /* STATE3D_VERTEX_TRANSFORM, p207 */
537 #define STATE3D_VERTEX_TRANS_CMD (CMD_3D|(0x1d<<24)|(0x8b<<16)|0)
538 #define STATE3D_VERTEX_TRANS_MTX_CMD (CMD_3D|(0x1d<<24)|(0x8b<<16)|6)
539 /* Dword 1 */
540 #define ENABLE_VIEWPORT_TRANSFORM ((1<<31)|(1<<30))
541 #define DISABLE_VIEWPORT_TRANSFORM (1<<31)
542 #define ENABLE_PERSP_DIVIDE ((1<<29)|(1<<28))
543 #define DISABLE_PERSP_DIVIDE (1<<29)
544 #define VRTX_TRANS_LOAD_MATRICES 0x7421
545 #define VRTX_TRANS_NO_LOAD_MATRICES 0x0000
546 /* Dword 2 -> 7 are matrix elements */
547
548 /* STATE3D_W_STATE, p209 */
549 #define STATE3D_W_STATE_CMD (CMD_3D|(0x1d<<24)|(0x8d<<16)|1)
550 /* Dword 1 */
551 #define MAGIC_W_STATE_DWORD1 0x00000008
552 /* Dword 2 */
553 #define WFAR_VALUE(x) (x)
554
555 /* if defining I830_ENABLE_4_TEXTURES, do it in i830_drm.h, too */
556
557 #define I830PACKCOLOR4444(r,g,b,a) \
558 ((((a) & 0xf0) << 8) | (((r) & 0xf0) << 4) | ((g) & 0xf0) | ((b) >> 4))
559
560 #define I830PACKCOLOR1555(r,g,b,a) \
561 ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \
562 ((a) ? 0x8000 : 0))
563
564 #define I830PACKCOLOR565(r,g,b) \
565 ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3))
566
567 #define I830PACKCOLOR8888(r,g,b,a) \
568 ((a<<24) | (r<<16) | (g<<8) | b)
569
570
571 /* Stipple command, carried over from the i810, apparently:
572 */
573 #define GFX_OP_STIPPLE ((0x3<<29)|(0x1d<<24)|(0x83<<16))
574 #define ST1_ENABLE (1<<16)
575 #define ST1_MASK (0xffff)
576
577
578
579 #define STATE3D_LOAD_STATE_IMMEDIATE_2 ((0x3<<29)|(0x1d<<24)|(0x03<<16))
580 #define LOAD_TEXTURE_MAP0 (1<<11)
581
582 #define TM0S0_ADDRESS_MASK 0xfffffffc
583 #define TM0S0_USE_FENCE (1<<1)
584
585 #define TM0S1_HEIGHT_SHIFT 21
586 #define TM0S1_WIDTH_SHIFT 10
587 #define TM0S1_PALETTE_SELECT (1<<9)
588 #define TM0S1_MAPSURF_FORMAT_MASK (0x7 << 6)
589 #define TM0S1_MAPSURF_FORMAT_SHIFT 6
590 #define MAPSURF_8BIT_INDEXED (0<<6)
591 #define MAPSURF_8BIT (1<<6)
592 #define MAPSURF_16BIT (2<<6)
593 #define MAPSURF_32BIT (3<<6)
594 #define MAPSURF_411 (4<<6)
595 #define MAPSURF_422 (5<<6)
596 #define MAPSURF_COMPRESSED (6<<6)
597 #define MAPSURF_4BIT_INDEXED (7<<6)
598 #define TM0S1_MT_FORMAT_MASK (0x7 << 3)
599 #define TM0S1_MT_FORMAT_SHIFT 3
600 #define MT_4BIT_IDX_ARGB8888 (7<<3) /* SURFACE_4BIT_INDEXED */
601 #define MT_8BIT_IDX_RGB565 (0<<3) /* SURFACE_8BIT_INDEXED */
602 #define MT_8BIT_IDX_ARGB1555 (1<<3)
603 #define MT_8BIT_IDX_ARGB4444 (2<<3)
604 #define MT_8BIT_IDX_AY88 (3<<3)
605 #define MT_8BIT_IDX_ABGR8888 (4<<3)
606 #define MT_8BIT_IDX_BUMP_88DVDU (5<<3)
607 #define MT_8BIT_IDX_BUMP_655LDVDU (6<<3)
608 #define MT_8BIT_IDX_ARGB8888 (7<<3)
609 #define MT_8BIT_I8 (0<<3) /* SURFACE_8BIT */
610 #define MT_8BIT_L8 (1<<3)
611 #define MT_16BIT_RGB565 (0<<3) /* SURFACE_16BIT */
612 #define MT_16BIT_ARGB1555 (1<<3)
613 #define MT_16BIT_ARGB4444 (2<<3)
614 #define MT_16BIT_AY88 (3<<3)
615 #define MT_16BIT_DIB_ARGB1555_8888 (4<<3)
616 #define MT_16BIT_BUMP_88DVDU (5<<3)
617 #define MT_16BIT_BUMP_655LDVDU (6<<3)
618 #define MT_16BIT_DIB_RGB565_8888 (7<<3)
619 #define MT_32BIT_ARGB8888 (0<<3) /* SURFACE_32BIT */
620 #define MT_32BIT_ABGR8888 (1<<3)
621 #define MT_32BIT_BUMP_XLDVDU_8888 (6<<3)
622 #define MT_32BIT_DIB_8888 (7<<3)
623 #define MT_411_YUV411 (0<<3) /* SURFACE_411 */
624 #define MT_422_YCRCB_SWAPY (0<<3) /* SURFACE_422 */
625 #define MT_422_YCRCB_NORMAL (1<<3)
626 #define MT_422_YCRCB_SWAPUV (2<<3)
627 #define MT_422_YCRCB_SWAPUVY (3<<3)
628 #define MT_COMPRESS_DXT1 (0<<3) /* SURFACE_COMPRESSED */
629 #define MT_COMPRESS_DXT2_3 (1<<3)
630 #define MT_COMPRESS_DXT4_5 (2<<3)
631 #define MT_COMPRESS_FXT1 (3<<3)
632 #define TM0S1_COLORSPACE_CONVERSION (1 << 2)
633 #define TM0S1_TILED_SURFACE (1 << 1)
634 #define TM0S1_TILE_WALK (1 << 0)
635
636 #define TM0S2_PITCH_SHIFT 21
637 #define TM0S2_CUBE_FACE_ENA_SHIFT 15
638 #define TM0S2_MAP_FORMAT (1<<14)
639 #define TM0S2_VERTICAL_LINE_STRIDE (1<<13)
640 #define TM0S2_VERITCAL_LINE_STRIDE_OFF (1<<12)
641 #define TM0S2_OUTPUT_CHAN_SHIFT 10
642 #define TM0S2_OUTPUT_CHAN_MASK (3<<10)
643
644 #define TM0S3_MIP_FILTER_MASK (0x3<<30)
645 #define TM0S3_MIP_FILTER_SHIFT 30
646 #define MIPFILTER_NONE 0
647 #define MIPFILTER_NEAREST 1
648 #define MIPFILTER_LINEAR 3
649 #define TM0S3_MAG_FILTER_MASK (0x3<<28)
650 #define TM0S3_MAG_FILTER_SHIFT 28
651 #define TM0S3_MIN_FILTER_MASK (0x3<<26)
652 #define TM0S3_MIN_FILTER_SHIFT 26
653 #define FILTER_NEAREST 0
654 #define FILTER_LINEAR 1
655 #define FILTER_ANISOTROPIC 2
656
657 #define TM0S3_LOD_BIAS_SHIFT 17
658 #define TM0S3_LOD_BIAS_MASK (0x1ff<<17)
659 #define TM0S3_MAX_MIP_SHIFT 9
660 #define TM0S3_MAX_MIP_MASK (0xff<<9)
661 #define TM0S3_MIN_MIP_SHIFT 3
662 #define TM0S3_MIN_MIP_MASK (0x3f<<3)
663 #define TM0S3_KILL_PIXEL (1<<2)
664 #define TM0S3_KEYED_FILTER (1<<1)
665 #define TM0S3_CHROMA_KEY (1<<0)
666
667
668 /* STATE3D_MAP_TEXEL_STREAM, p188 */
669 #define STATE3D_MAP_TEX_STREAM_CMD (CMD_3D|(0x1c<<24)|(0x05<<19))
670 #define DISABLE_TEX_STREAM_BUMP (1<<12)
671 #define ENABLE_TEX_STREAM_BUMP ((1<<12)|(1<<11))
672 #define TEX_MODIFY_UNIT_0 0
673 #define TEX_MODIFY_UNIT_1 (1<<8)
674 #define ENABLE_TEX_STREAM_COORD_SET (1<<7)
675 #define TEX_STREAM_COORD_SET(x) ((x)<<4)
676 #define ENABLE_TEX_STREAM_MAP_IDX (1<<3)
677 #define TEX_STREAM_MAP_IDX(x) (x)