1/************************************************************************** 2 * 3 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28#ifndef GEN2_RENDER_H 29#define GEN2_RENDER_H 30 31#define CMD_3D (0x3<<29) 32 33#define PRIM3D_INLINE (CMD_3D | (0x1f<<24)) 34#define PRIM3D_TRILIST (0x0<<18) 35#define PRIM3D_TRISTRIP (0x1<<18) 36#define PRIM3D_TRISTRIP_RVRSE (0x2<<18) 37#define PRIM3D_TRIFAN (0x3<<18) 38#define PRIM3D_POLY (0x4<<18) 39#define PRIM3D_LINELIST (0x5<<18) 40#define PRIM3D_LINESTRIP (0x6<<18) 41#define PRIM3D_RECTLIST (0x7<<18) 42#define PRIM3D_POINTLIST (0x8<<18) 43#define PRIM3D_DIB (0x9<<18) 44#define PRIM3D_CLEAR_RECT (0xa<<18) 45#define PRIM3D_ZONE_INIT (0xd<<18) 46#define PRIM3D_MASK (0x1f<<18) 47 48#define _3DSTATE_AA_CMD (CMD_3D | (0x06<<24)) 49#define AA_LINE_ECAAR_WIDTH_ENABLE (1<<16) 50#define AA_LINE_ECAAR_WIDTH_0_5 0 51#define AA_LINE_ECAAR_WIDTH_1_0 (1<<14) 52#define AA_LINE_ECAAR_WIDTH_2_0 (2<<14) 53#define AA_LINE_ECAAR_WIDTH_4_0 (3<<14) 54#define AA_LINE_REGION_WIDTH_ENABLE (1<<8) 55#define AA_LINE_REGION_WIDTH_0_5 0 56#define AA_LINE_REGION_WIDTH_1_0 (1<<6) 57#define AA_LINE_REGION_WIDTH_2_0 (2<<6) 58#define AA_LINE_REGION_WIDTH_4_0 (3<<6) 59#define AA_LINE_ENABLE ((1<<1) | 1) 60#define AA_LINE_DISABLE (1<<1) 61 62#define _3DSTATE_BUF_INFO_CMD (CMD_3D | (0x1d<<24) | (0x8e<<16) | 1) 63/* Dword 1 */ 64#define BUF_3D_ID_COLOR_BACK (0x3<<24) 65#define BUF_3D_ID_DEPTH (0x7<<24) 66#define BUF_3D_USE_FENCE (1<<23) 67#define BUF_3D_TILED_SURFACE (1<<22) 68#define BUF_3D_TILE_WALK_X 0 69#define BUF_3D_TILE_WALK_Y (1<<21) 70#define BUF_3D_PITCH(x) (((x)/4)<<2) 71/* Dword 2 */ 72#define BUF_3D_ADDR(x) ((x) & ~0x3) 73 74#define _3DSTATE_COLOR_FACTOR_CMD (CMD_3D | (0x1d<<24) | (0x1<<16)) 75 76#define _3DSTATE_COLOR_FACTOR_N_CMD(stage) (CMD_3D | (0x1d<<24) | \ 77 ((0x90+(stage))<<16)) 78 79#define _3DSTATE_CONST_BLEND_COLOR_CMD (CMD_3D | (0x1d<<24) | (0x88<<16)) 80 81#define _3DSTATE_DFLT_DIFFUSE_CMD (CMD_3D | (0x1d<<24) | (0x99<<16)) 82 83#define _3DSTATE_DFLT_SPECULAR_CMD (CMD_3D | (0x1d<<24) | (0x9a<<16)) 84 85#define _3DSTATE_DFLT_Z_CMD (CMD_3D | (0x1d<<24) | (0x98<<16)) 86 87#define _3DSTATE_DST_BUF_VARS_CMD (CMD_3D | (0x1d<<24) | (0x85<<16)) 88/* Dword 1 */ 89#define DSTORG_HORT_BIAS(x) ((x)<<20) 90#define DSTORG_VERT_BIAS(x) ((x)<<16) 91#define COLOR_4_2_2_CHNL_WRT_ALL 0 92#define COLOR_4_2_2_CHNL_WRT_Y (1<<12) 93#define COLOR_4_2_2_CHNL_WRT_CR (2<<12) 94#define COLOR_4_2_2_CHNL_WRT_CB (3<<12) 95#define COLOR_4_2_2_CHNL_WRT_CRCB (4<<12) 96#define COLR_BUF_8BIT 0 97#define COLR_BUF_RGB555 (1<<8) 98#define COLR_BUF_RGB565 (2<<8) 99#define COLR_BUF_ARGB8888 (3<<8) 100#define COLR_BUF_ARGB4444 (8<<8) 101#define COLR_BUF_ARGB1555 (9<<8) 102#define DEPTH_IS_Z 0 103#define DEPTH_IS_W (1<<6) 104#define DEPTH_FRMT_16_FIXED 0 105#define DEPTH_FRMT_16_FLOAT (1<<2) 106#define DEPTH_FRMT_24_FIXED_8_OTHER (2<<2) 107#define DEPTH_FRMT_24_FLOAT_8_OTHER (3<<2) 108#define VERT_LINE_STRIDE_1 (1<<1) 109#define VERT_LINE_STRIDE_0 0 110#define VERT_LINE_STRIDE_OFS_1 1 111#define VERT_LINE_STRIDE_OFS_0 0 112 113#define _3DSTATE_DRAW_RECT_CMD (CMD_3D|(0x1d<<24)|(0x80<<16)|3) 114/* Dword 1 */ 115#define DRAW_RECT_DIS_DEPTH_OFS (1<<30) 116#define DRAW_DITHER_OFS_X(x) ((x)<<26) 117#define DRAW_DITHER_OFS_Y(x) ((x)<<24) 118/* Dword 2 */ 119#define DRAW_YMIN(x) ((x)<<16) 120#define DRAW_XMIN(x) (x) 121/* Dword 3 */ 122#define DRAW_YMAX(x) ((x)<<16) 123#define DRAW_XMAX(x) (x) 124/* Dword 4 */ 125#define DRAW_YORG(x) ((x)<<16) 126#define DRAW_XORG(x) (x) 127 128#define _3DSTATE_ENABLES_1_CMD (CMD_3D|(0x3<<24)) 129#define ENABLE_LOGIC_OP_MASK ((1<<23)|(1<<22)) 130#define ENABLE_LOGIC_OP ((1<<23)|(1<<22)) 131#define DISABLE_LOGIC_OP (1<<23) 132#define ENABLE_STENCIL_TEST ((1<<21)|(1<<20)) 133#define DISABLE_STENCIL_TEST (1<<21) 134#define ENABLE_DEPTH_BIAS ((1<<11)|(1<<10)) 135#define DISABLE_DEPTH_BIAS (1<<11) 136#define ENABLE_SPEC_ADD_MASK ((1<<9)|(1<<8)) 137#define ENABLE_SPEC_ADD ((1<<9)|(1<<8)) 138#define DISABLE_SPEC_ADD (1<<9) 139#define ENABLE_DIS_FOG_MASK ((1<<7)|(1<<6)) 140#define ENABLE_FOG ((1<<7)|(1<<6)) 141#define DISABLE_FOG (1<<7) 142#define ENABLE_DIS_ALPHA_TEST_MASK ((1<<5)|(1<<4)) 143#define ENABLE_ALPHA_TEST ((1<<5)|(1<<4)) 144#define DISABLE_ALPHA_TEST (1<<5) 145#define ENABLE_DIS_CBLEND_MASK ((1<<3)|(1<<2)) 146#define ENABLE_COLOR_BLEND ((1<<3)|(1<<2)) 147#define DISABLE_COLOR_BLEND (1<<3) 148#define ENABLE_DIS_DEPTH_TEST_MASK ((1<<1)|1) 149#define ENABLE_DEPTH_TEST ((1<<1)|1) 150#define DISABLE_DEPTH_TEST (1<<1) 151 152/* _3DSTATE_ENABLES_2, p138 */ 153#define _3DSTATE_ENABLES_2_CMD (CMD_3D|(0x4<<24)) 154#define ENABLE_STENCIL_WRITE ((1<<21)|(1<<20)) 155#define DISABLE_STENCIL_WRITE (1<<21) 156#define ENABLE_TEX_CACHE ((1<<17)|(1<<16)) 157#define DISABLE_TEX_CACHE (1<<17) 158#define ENABLE_DITHER ((1<<9)|(1<<8)) 159#define DISABLE_DITHER (1<<9) 160#define ENABLE_COLOR_MASK (1<<10) 161#define WRITEMASK_ALPHA (1<<7) 162#define WRITEMASK_ALPHA_SHIFT 7 163#define WRITEMASK_RED (1<<6) 164#define WRITEMASK_RED_SHIFT 6 165#define WRITEMASK_GREEN (1<<5) 166#define WRITEMASK_GREEN_SHIFT 5 167#define WRITEMASK_BLUE (1<<4) 168#define WRITEMASK_BLUE_SHIFT 4 169#define WRITEMASK_MASK ((1<<4)|(1<<5)|(1<<6)|(1<<7)) 170#define ENABLE_COLOR_WRITE ((1<<3)|(1<<2)) 171#define DISABLE_COLOR_WRITE (1<<3) 172#define ENABLE_DIS_DEPTH_WRITE_MASK 0x3 173#define ENABLE_DEPTH_WRITE ((1<<1)|1) 174#define DISABLE_DEPTH_WRITE (1<<1) 175 176/* _3DSTATE_FOG_COLOR, p139 */ 177#define _3DSTATE_FOG_COLOR_CMD (CMD_3D|(0x15<<24)) 178#define FOG_COLOR_RED(x) ((x)<<16) 179#define FOG_COLOR_GREEN(x) ((x)<<8) 180#define FOG_COLOR_BLUE(x) (x) 181 182/* _3DSTATE_FOG_MODE, p140 */ 183#define _3DSTATE_FOG_MODE_CMD (CMD_3D|(0x1d<<24)|(0x89<<16)|2) 184/* Dword 1 */ 185#define FOGFUNC_ENABLE (1<<31) 186#define FOGFUNC_VERTEX 0 187#define FOGFUNC_PIXEL_EXP (1<<28) 188#define FOGFUNC_PIXEL_EXP2 (2<<28) 189#define FOGFUNC_PIXEL_LINEAR (3<<28) 190#define FOGSRC_INDEX_Z (1<<27) 191#define FOGSRC_INDEX_W ((1<<27)|(1<<25)) 192#define FOG_LINEAR_CONST (1<<24) 193#define FOG_CONST_1(x) ((x)<<4) 194#define ENABLE_FOG_DENSITY (1<<23) 195/* Dword 2 */ 196#define FOG_CONST_2(x) (x) 197/* Dword 3 */ 198#define FOG_DENSITY(x) (x) 199 200/* _3DSTATE_INDEPENDENT_ALPHA_BLEND, p142 */ 201#define _3DSTATE_INDPT_ALPHA_BLEND_CMD (CMD_3D|(0x0b<<24)) 202#define ENABLE_INDPT_ALPHA_BLEND ((1<<23)|(1<<22)) 203#define DISABLE_INDPT_ALPHA_BLEND (1<<23) 204#define ALPHA_BLENDFUNC_MASK 0x3f0000 205#define ENABLE_ALPHA_BLENDFUNC (1<<21) 206#define ABLENDFUNC_ADD 0 207#define ABLENDFUNC_SUB (1<<16) 208#define ABLENDFUNC_RVSE_SUB (2<<16) 209#define ABLENDFUNC_MIN (3<<16) 210#define ABLENDFUNC_MAX (4<<16) 211#define SRC_DST_ABLEND_MASK 0xfff 212#define ENABLE_SRC_ABLEND_FACTOR (1<<11) 213#define SRC_ABLEND_FACT(x) ((x)<<6) 214#define ENABLE_DST_ABLEND_FACTOR (1<<5) 215#define DST_ABLEND_FACT(x) (x) 216 217#define BLENDFACTOR_ZERO 0x01 218#define BLENDFACTOR_ONE 0x02 219#define BLENDFACTOR_SRC_COLR 0x03 220#define BLENDFACTOR_INV_SRC_COLR 0x04 221#define BLENDFACTOR_SRC_ALPHA 0x05 222#define BLENDFACTOR_INV_SRC_ALPHA 0x06 223#define BLENDFACTOR_DST_ALPHA 0x07 224#define BLENDFACTOR_INV_DST_ALPHA 0x08 225#define BLENDFACTOR_DST_COLR 0x09 226#define BLENDFACTOR_INV_DST_COLR 0x0a 227#define BLENDFACTOR_SRC_ALPHA_SATURATE 0x0b 228#define BLENDFACTOR_CONST_COLOR 0x0c 229#define BLENDFACTOR_INV_CONST_COLOR 0x0d 230#define BLENDFACTOR_CONST_ALPHA 0x0e 231#define BLENDFACTOR_INV_CONST_ALPHA 0x0f 232#define BLENDFACTOR_MASK 0x0f 233 234/* _3DSTATE_MAP_BLEND_ARG, p152 */ 235#define _3DSTATE_MAP_BLEND_ARG_CMD(stage) (CMD_3D|(0x0e<<24)|((stage)<<20)) 236 237#define TEXPIPE_COLOR 0 238#define TEXPIPE_ALPHA (1<<18) 239#define TEXPIPE_KILL (2<<18) 240#define TEXBLEND_ARG0 0 241#define TEXBLEND_ARG1 (1<<15) 242#define TEXBLEND_ARG2 (2<<15) 243#define TEXBLEND_ARG3 (3<<15) 244#define TEXBLENDARG_MODIFY_PARMS (1<<6) 245#define TEXBLENDARG_REPLICATE_ALPHA (1<<5) 246#define TEXBLENDARG_INV_ARG (1<<4) 247#define TEXBLENDARG_ONE 0 248#define TEXBLENDARG_FACTOR 0x01 249#define TEXBLENDARG_ACCUM 0x02 250#define TEXBLENDARG_DIFFUSE 0x03 251#define TEXBLENDARG_SPEC 0x04 252#define TEXBLENDARG_CURRENT 0x05 253#define TEXBLENDARG_TEXEL0 0x06 254#define TEXBLENDARG_TEXEL1 0x07 255#define TEXBLENDARG_TEXEL2 0x08 256#define TEXBLENDARG_TEXEL3 0x09 257#define TEXBLENDARG_FACTOR_N 0x0e 258 259/* _3DSTATE_MAP_BLEND_OP, p155 */ 260#define _3DSTATE_MAP_BLEND_OP_CMD(stage) (CMD_3D|(0x0d<<24)|((stage)<<20)) 261#if 0 262# define TEXPIPE_COLOR 0 263# define TEXPIPE_ALPHA (1<<18) 264# define TEXPIPE_KILL (2<<18) 265#endif 266#define ENABLE_TEXOUTPUT_WRT_SEL (1<<17) 267#define TEXOP_OUTPUT_CURRENT 0 268#define TEXOP_OUTPUT_ACCUM (1<<15) 269#define ENABLE_TEX_CNTRL_STAGE ((1<<12)|(1<<11)) 270#define DISABLE_TEX_CNTRL_STAGE (1<<12) 271#define TEXOP_SCALE_SHIFT 9 272#define TEXOP_SCALE_1X (0 << TEXOP_SCALE_SHIFT) 273#define TEXOP_SCALE_2X (1 << TEXOP_SCALE_SHIFT) 274#define TEXOP_SCALE_4X (2 << TEXOP_SCALE_SHIFT) 275#define TEXOP_MODIFY_PARMS (1<<8) 276#define TEXOP_LAST_STAGE (1<<7) 277#define TEXBLENDOP_KILLPIXEL 0x02 278#define TEXBLENDOP_ARG1 0x01 279#define TEXBLENDOP_ARG2 0x02 280#define TEXBLENDOP_MODULATE 0x03 281#define TEXBLENDOP_ADD 0x06 282#define TEXBLENDOP_ADDSIGNED 0x07 283#define TEXBLENDOP_BLEND 0x08 284#define TEXBLENDOP_BLEND_AND_ADD 0x09 285#define TEXBLENDOP_SUBTRACT 0x0a 286#define TEXBLENDOP_DOT3 0x0b 287#define TEXBLENDOP_DOT4 0x0c 288#define TEXBLENDOP_MODULATE_AND_ADD 0x0d 289#define TEXBLENDOP_MODULATE_2X_AND_ADD 0x0e 290#define TEXBLENDOP_MODULATE_4X_AND_ADD 0x0f 291 292/* _3DSTATE_MAP_BUMP_TABLE, p160 TODO */ 293/* _3DSTATE_MAP_COLOR_CHROMA_KEY, p161 TODO */ 294 295#define _3DSTATE_MAP_COORD_TRANSFORM ((3<<29)|(0x1d<<24)|(0x8c<<16)) 296#define DISABLE_TEX_TRANSFORM (1<<28) 297#define TEXTURE_SET(x) (x<<29) 298 299#define _3DSTATE_VERTEX_TRANSFORM ((3<<29)|(0x1d<<24)|(0x8b<<16)) 300#define DISABLE_VIEWPORT_TRANSFORM (1<<31) 301#define DISABLE_PERSPECTIVE_DIVIDE (1<<29) 302 303/* _3DSTATE_MAP_COORD_SET_BINDINGS, p162 */ 304#define _3DSTATE_MAP_COORD_SETBIND_CMD (CMD_3D|(0x1d<<24)|(0x02<<16)) 305#define TEXBIND_MASK3 ((1<<15)|(1<<14)|(1<<13)|(1<<12)) 306#define TEXBIND_MASK2 ((1<<11)|(1<<10)|(1<<9)|(1<<8)) 307#define TEXBIND_MASK1 ((1<<7)|(1<<6)|(1<<5)|(1<<4)) 308#define TEXBIND_MASK0 ((1<<3)|(1<<2)|(1<<1)|1) 309 310#define TEXBIND_SET3(x) ((x)<<12) 311#define TEXBIND_SET2(x) ((x)<<8) 312#define TEXBIND_SET1(x) ((x)<<4) 313#define TEXBIND_SET0(x) (x) 314 315#define TEXCOORDSRC_KEEP 0 316#define TEXCOORDSRC_DEFAULT 0x01 317#define TEXCOORDSRC_VTXSET_0 0x08 318#define TEXCOORDSRC_VTXSET_1 0x09 319#define TEXCOORDSRC_VTXSET_2 0x0a 320#define TEXCOORDSRC_VTXSET_3 0x0b 321#define TEXCOORDSRC_VTXSET_4 0x0c 322#define TEXCOORDSRC_VTXSET_5 0x0d 323#define TEXCOORDSRC_VTXSET_6 0x0e 324#define TEXCOORDSRC_VTXSET_7 0x0f 325 326#define MAP_UNIT(unit) ((unit)<<16) 327#define MAP_UNIT_MASK (0x7<<16) 328 329/* _3DSTATE_MAP_COORD_SETS, p164 */ 330#define _3DSTATE_MAP_COORD_SET_CMD (CMD_3D|(0x1c<<24)|(0x01<<19)) 331#define TEXCOORD_SET(n) ((n)<<16) 332#define ENABLE_TEXCOORD_PARAMS (1<<15) 333#define TEXCOORDS_ARE_NORMAL (1<<14) 334#define TEXCOORDS_ARE_IN_TEXELUNITS 0 335#define TEXCOORDTYPE_CARTESIAN 0 336#define TEXCOORDTYPE_HOMOGENEOUS (1<<11) 337#define TEXCOORDTYPE_VECTOR (2<<11) 338#define TEXCOORDTYPE_MASK (0x7<<11) 339#define ENABLE_ADDR_V_CNTL (1<<7) 340#define ENABLE_ADDR_U_CNTL (1<<3) 341#define TEXCOORD_ADDR_V_MODE(x) ((x)<<4) 342#define TEXCOORD_ADDR_U_MODE(x) (x) 343#define TEXCOORDMODE_WRAP 0 344#define TEXCOORDMODE_MIRROR 1 345#define TEXCOORDMODE_CLAMP 2 346#define TEXCOORDMODE_WRAP_SHORTEST 3 347#define TEXCOORDMODE_CLAMP_BORDER 4 348#define TEXCOORD_ADDR_V_MASK 0x70 349#define TEXCOORD_ADDR_U_MASK 0x7 350 351/* _3DSTATE_MAP_CUBE, p168 TODO */ 352#define _3DSTATE_MAP_CUBE (CMD_3D|(0x1c<<24)|(0x0a<<19)) 353#define CUBE_NEGX_ENABLE (1<<5) 354#define CUBE_POSX_ENABLE (1<<4) 355#define CUBE_NEGY_ENABLE (1<<3) 356#define CUBE_POSY_ENABLE (1<<2) 357#define CUBE_NEGZ_ENABLE (1<<1) 358#define CUBE_POSZ_ENABLE (1<<0) 359 360#define _3DSTATE_MAP_INFO_CMD (CMD_3D|(0x1d<<24)|(0x0<<16)|3) 361#define TEXMAP_INDEX(x) ((x)<<28) 362#define MAP_SURFACE_8BIT (1<<24) 363#define MAP_SURFACE_16BIT (2<<24) 364#define MAP_SURFACE_32BIT (3<<24) 365#define MAP_FORMAT_2D (0) 366#define MAP_FORMAT_3D_CUBE (1<<11) 367 368/* _3DSTATE_MODES_1, p190 */ 369#define _3DSTATE_MODES_1_CMD (CMD_3D|(0x08<<24)) 370#define BLENDFUNC_MASK 0x3f0000 371#define ENABLE_COLR_BLND_FUNC (1<<21) 372#define BLENDFUNC_ADD 0 373#define BLENDFUNC_SUB (1<<16) 374#define BLENDFUNC_RVRSE_SUB (2<<16) 375#define BLENDFUNC_MIN (3<<16) 376#define BLENDFUNC_MAX (4<<16) 377#define SRC_DST_BLND_MASK 0xfff 378#define ENABLE_SRC_BLND_FACTOR (1<<11) 379#define ENABLE_DST_BLND_FACTOR (1<<5) 380#define SRC_BLND_FACT(x) ((x)<<6) 381#define DST_BLND_FACT(x) (x) 382 383/* _3DSTATE_MODES_2, p192 */ 384#define _3DSTATE_MODES_2_CMD (CMD_3D|(0x0f<<24)) 385#define ENABLE_GLOBAL_DEPTH_BIAS (1<<22) 386#define GLOBAL_DEPTH_BIAS(x) ((x)<<14) 387#define ENABLE_ALPHA_TEST_FUNC (1<<13) 388#define ENABLE_ALPHA_REF_VALUE (1<<8) 389#define ALPHA_TEST_FUNC(x) ((x)<<9) 390#define ALPHA_REF_VALUE(x) (x) 391 392#define ALPHA_TEST_REF_MASK 0x3fff 393 394/* _3DSTATE_MODES_3, p193 */ 395#define _3DSTATE_MODES_3_CMD (CMD_3D|(0x02<<24)) 396#define DEPTH_TEST_FUNC_MASK 0x1f0000 397#define ENABLE_DEPTH_TEST_FUNC (1<<20) 398/* Uses COMPAREFUNC */ 399#define DEPTH_TEST_FUNC(x) ((x)<<16) 400#define ENABLE_ALPHA_SHADE_MODE (1<<11) 401#define ENABLE_FOG_SHADE_MODE (1<<9) 402#define ENABLE_SPEC_SHADE_MODE (1<<7) 403#define ENABLE_COLOR_SHADE_MODE (1<<5) 404#define ALPHA_SHADE_MODE(x) ((x)<<10) 405#define FOG_SHADE_MODE(x) ((x)<<8) 406#define SPEC_SHADE_MODE(x) ((x)<<6) 407#define COLOR_SHADE_MODE(x) ((x)<<4) 408#define CULLMODE_MASK 0xf 409#define ENABLE_CULL_MODE (1<<3) 410#define CULLMODE_BOTH 0 411#define CULLMODE_NONE 1 412#define CULLMODE_CW 2 413#define CULLMODE_CCW 3 414 415#define SHADE_MODE_LINEAR 0 416#define SHADE_MODE_FLAT 0x1 417 418/* _3DSTATE_MODES_4, p195 */ 419#define _3DSTATE_MODES_4_CMD (CMD_3D|(0x16<<24)) 420#define ENABLE_LOGIC_OP_FUNC (1<<23) 421#define LOGIC_OP_FUNC(x) ((x)<<18) 422#define LOGICOP_MASK ((1<<18)|(1<<19)|(1<<20)|(1<<21)) 423#define LOGICOP_CLEAR 0 424#define LOGICOP_NOR 0x1 425#define LOGICOP_AND_INV 0x2 426#define LOGICOP_COPY_INV 0x3 427#define LOGICOP_AND_RVRSE 0x4 428#define LOGICOP_INV 0x5 429#define LOGICOP_XOR 0x6 430#define LOGICOP_NAND 0x7 431#define LOGICOP_AND 0x8 432#define LOGICOP_EQUIV 0x9 433#define LOGICOP_NOOP 0xa 434#define LOGICOP_OR_INV 0xb 435#define LOGICOP_COPY 0xc 436#define LOGICOP_OR_RVRSE 0xd 437#define LOGICOP_OR 0xe 438#define LOGICOP_SET 0xf 439#define MODE4_ENABLE_STENCIL_TEST_MASK ((1<<17)|(0xff00)) 440#define ENABLE_STENCIL_TEST_MASK (1<<17) 441#define STENCIL_TEST_MASK(x) ((x)<<8) 442#define MODE4_ENABLE_STENCIL_WRITE_MASK ((1<<16)|(0x00ff)) 443#define ENABLE_STENCIL_WRITE_MASK (1<<16) 444#define STENCIL_WRITE_MASK(x) ((x)&0xff) 445 446/* _3DSTATE_MODES_5, p196 */ 447#define _3DSTATE_MODES_5_CMD (CMD_3D|(0x0c<<24)) 448#define ENABLE_SPRITE_POINT_TEX (1<<23) 449#define SPRITE_POINT_TEX_ON (1<<22) 450#define PIPELINE_FLUSH_RENDER_CACHE (1<<18) 451#define PIPELINE_FLUSH_TEXTURE_CACHE (1<<16) 452#define FIXED_LINE_WIDTH_MASK 0xfc00 453#define ENABLE_FIXED_LINE_WIDTH (1<<15) 454#define FIXED_LINE_WIDTH(x) ((x)<<10) 455#define FIXED_POINT_WIDTH_MASK 0x3ff 456#define ENABLE_FIXED_POINT_WIDTH (1<<9) 457#define FIXED_POINT_WIDTH(x) (x) 458 459/* _3DSTATE_RASTERIZATION_RULES, p198 */ 460#define _3DSTATE_RASTER_RULES_CMD (CMD_3D|(0x07<<24)) 461#define ENABLE_POINT_RASTER_RULE (1<<15) 462#define OGL_POINT_RASTER_RULE (1<<13) 463#define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8) 464#define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5) 465#define ENABLE_TRI_STRIP_PROVOKE_VRTX (1<<2) 466#define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6) 467#define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3) 468#define TRI_STRIP_PROVOKE_VRTX(x) (x) 469 470/* _3DSTATE_SCISSOR_ENABLE, p200 */ 471#define _3DSTATE_SCISSOR_ENABLE_CMD (CMD_3D|(0x1c<<24)|(0x10<<19)) 472#define ENABLE_SCISSOR_RECT ((1<<1) | 1) 473#define DISABLE_SCISSOR_RECT (1<<1) 474 475/* _3DSTATE_SCISSOR_RECTANGLE_0, p201 */ 476#define _3DSTATE_SCISSOR_RECT_0_CMD (CMD_3D|(0x1d<<24)|(0x81<<16)|1) 477/* Dword 1 */ 478#define SCISSOR_RECT_0_YMIN(x) ((x)<<16) 479#define SCISSOR_RECT_0_XMIN(x) (x) 480/* Dword 2 */ 481#define SCISSOR_RECT_0_YMAX(x) ((x)<<16) 482#define SCISSOR_RECT_0_XMAX(x) (x) 483 484/* _3DSTATE_STENCIL_TEST, p202 */ 485#define _3DSTATE_STENCIL_TEST_CMD (CMD_3D|(0x09<<24)) 486#define ENABLE_STENCIL_PARMS (1<<23) 487#define STENCIL_OPS_MASK (0xffc000) 488#define STENCIL_FAIL_OP(x) ((x)<<20) 489#define STENCIL_PASS_DEPTH_FAIL_OP(x) ((x)<<17) 490#define STENCIL_PASS_DEPTH_PASS_OP(x) ((x)<<14) 491 492#define ENABLE_STENCIL_TEST_FUNC_MASK ((1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)) 493#define ENABLE_STENCIL_TEST_FUNC (1<<13) 494/* Uses COMPAREFUNC */ 495#define STENCIL_TEST_FUNC(x) ((x)<<9) 496#define STENCIL_REF_VALUE_MASK ((1<<8)|0xff) 497#define ENABLE_STENCIL_REF_VALUE (1<<8) 498#define STENCIL_REF_VALUE(x) (x) 499 500/* _3DSTATE_VERTEX_FORMAT, p204 */ 501#define _3DSTATE_VFT0_CMD (CMD_3D|(0x05<<24)) 502#define VFT0_POINT_WIDTH (1<<12) 503#define VFT0_TEX_COUNT_MASK (7<<8) 504#define VFT0_TEX_COUNT_SHIFT 8 505#define VFT0_TEX_COUNT(x) ((x)<<8) 506#define VFT0_SPEC (1<<7) 507#define VFT0_DIFFUSE (1<<6) 508#define VFT0_DEPTH_OFFSET (1<<5) 509#define VFT0_XYZ (1<<1) 510#define VFT0_XYZW (2<<1) 511#define VFT0_XY (3<<1) 512#define VFT0_XYW (4<<1) 513#define VFT0_XYZW_MASK (7<<1) 514 515/* _3DSTATE_VERTEX_FORMAT_2, p206 */ 516#define _3DSTATE_VERTEX_FORMAT_2_CMD (CMD_3D|(0x0a<<24)) 517#define VFT1_TEX7_FMT(x) ((x)<<14) 518#define VFT1_TEX6_FMT(x) ((x)<<12) 519#define VFT1_TEX5_FMT(x) ((x)<<10) 520#define VFT1_TEX4_FMT(x) ((x)<<8) 521#define VFT1_TEX3_FMT(x) ((x)<<6) 522#define VFT1_TEX2_FMT(x) ((x)<<4) 523#define VFT1_TEX1_FMT(x) ((x)<<2) 524#define VFT1_TEX0_FMT(x) (x) 525#define VFT1_TEX0_MASK 3 526#define VFT1_TEX1_SHIFT 2 527#define TEXCOORDFMT_2D 0 528#define TEXCOORDFMT_3D 1 529#define TEXCOORDFMT_4D 2 530#define TEXCOORDFMT_1D 3 531 532/*New stuff picked up along the way */ 533 534#define MLC_LOD_BIAS_MASK ((1<<7)-1) 535 536/* _3DSTATE_VERTEX_TRANSFORM, p207 */ 537#define _3DSTATE_VERTEX_TRANS_CMD (CMD_3D|(0x1d<<24)|(0x8b<<16)|0) 538#define _3DSTATE_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/* _3DSTATE_W_STATE, p209 */ 549#define _3DSTATE_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/* Stipple command, carried over from the i810, apparently: 556 */ 557#define _3DSTATE_STIPPLE (CMD_3D|(0x1d<<24)|(0x83<<16)) 558#define ST1_ENABLE (1<<16) 559#define ST1_MASK (0xffff) 560 561#define _3DSTATE_LOAD_STATE_IMMEDIATE_1 (CMD_3D|(0x1d<<24)|(0x04<<16)) 562#define I1_LOAD_S(n) (1<<((n)+4)) 563#define S3_POINT_WIDTH_SHIFT 23 564#define S3_LINE_WIDTH_SHIFT 19 565#define S3_ALPHA_SHADE_MODE_SHIFT 18 566#define S3_FOG_SHADE_MODE_SHIFT 17 567#define S3_SPEC_SHADE_MODE_SHIFT 16 568#define S3_COLOR_SHADE_MODE_SHIFT 15 569#define S3_CULL_MODE_SHIFT 13 570#define S3_CULLMODE_BOTH (0) 571#define S3_CULLMODE_NONE (1<<13) 572#define S3_CULLMODE_CW (2<<13) 573#define S3_CULLMODE_CCW (3<<13) 574#define S3_POINT_WIDTH_PRESENT (1<<12) 575#define S3_SPEC_FOG_PRESENT (1<<11) 576#define S3_DIFFUSE_PRESENT (1<<10) 577#define S3_DEPTH_OFFSET_PRESENT (1<<9) 578#define S3_POSITION_SHIFT 6 579#define S3_VERTEXHAS_XYZ (1<<6) 580#define S3_VERTEXHAS_XYZW (2<<6) 581#define S3_VERTEXHAS_XY (3<<6) 582#define S3_VERTEXHAS_XYW (4<<6) 583#define S3_ENABLE_SPEC_ADD (1<<5) 584#define S3_ENABLE_FOG (1<<4) 585#define S3_ENABLE_LOCAL_DEPTH_BIAS (1<<3) 586#define S3_ENABLE_SPRITE_POINT (1<<1) 587#define S3_ENABLE_ANTIALIASING 1 588#define S7_ENABLE_LOGIC_OP (1<<0) 589#define S8_ENABLE_ALPHA_TEST (1<<31) 590#define S8_ALPHA_TEST_FUNC_SHIFT 28 591#define S8_ALPHA_REFVALUE_SHIFT 20 592#define S8_ENABLE_DEPTH_TEST (1<<19) 593#define S8_DEPTH_TEST_FUNC_SHIFT 16 594#define S8_ENABLE_COLOR_BLEND (1<<15) 595#define S8_COLOR_BLEND_FUNC_SHIFT 12 596#define S8_BLENDFUNC_ADD (0) 597#define S8_BLENDFUNC_SUB (1<<12) 598#define S8_BLENDFUNC_RVRSE_SUB (2<<12) 599#define S8_BLENDFUNC_MIN (3<<12) 600#define S8_BLENDFUNC_MAX (4<<12) 601#define S8_SRC_BLEND_FACTOR_SHIFT 8 602#define S8_DST_BLEND_FACTOR_SHIFT 4 603#define S8_ENABLE_DEPTH_BUFFER_WRITE (1<<3) 604#define S8_ENABLE_COLOR_BUFFER_WRITE (1<<2) 605 606#define _3DSTATE_LOAD_STATE_IMMEDIATE_2 (CMD_3D|(0x1d<<24)|(0x03<<16)) 607#define LOAD_TEXTURE_MAP(x) (1<<((x)+11)) 608#define LOAD_TEXTURE_BLEND_STAGE(x) (1<<((x)+7)) 609#define LOAD_GLOBAL_COLOR_FACTOR (1<<6) 610 611#define TM0S0_ADDRESS_MASK 0xfffffffc 612#define TM0S0_USE_FENCE (1<<1) 613 614#define TM0S1_HEIGHT_SHIFT 21 615#define TM0S1_WIDTH_SHIFT 10 616#define TM0S1_PALETTE_SELECT (1<<9) 617#define TM0S1_MAPSURF_FORMAT_MASK (0x7 << 6) 618#define TM0S1_MAPSURF_FORMAT_SHIFT 6 619#define MAPSURF_8BIT_INDEXED (0<<6) 620#define MAPSURF_8BIT (1<<6) 621#define MAPSURF_16BIT (2<<6) 622#define MAPSURF_32BIT (3<<6) 623#define MAPSURF_411 (4<<6) 624#define MAPSURF_422 (5<<6) 625#define MAPSURF_COMPRESSED (6<<6) 626#define MAPSURF_4BIT_INDEXED (7<<6) 627#define TM0S1_MT_FORMAT_MASK (0x7 << 3) 628#define TM0S1_MT_FORMAT_SHIFT 3 629#define MT_4BIT_IDX_ARGB8888 (7<<3) /* SURFACE_4BIT_INDEXED */ 630#define MT_8BIT_IDX_RGB565 (0<<3) /* SURFACE_8BIT_INDEXED */ 631#define MT_8BIT_IDX_ARGB1555 (1<<3) 632#define MT_8BIT_IDX_ARGB4444 (2<<3) 633#define MT_8BIT_IDX_AY88 (3<<3) 634#define MT_8BIT_IDX_ABGR8888 (4<<3) 635#define MT_8BIT_IDX_BUMP_88DVDU (5<<3) 636#define MT_8BIT_IDX_BUMP_655LDVDU (6<<3) 637#define MT_8BIT_IDX_ARGB8888 (7<<3) 638#define MT_8BIT_I8 (0<<3) /* SURFACE_8BIT */ 639#define MT_8BIT_L8 (1<<3) 640#define MT_8BIT_A8 (4<<3) 641#define MT_16BIT_RGB565 (0<<3) /* SURFACE_16BIT */ 642#define MT_16BIT_ARGB1555 (1<<3) 643#define MT_16BIT_ARGB4444 (2<<3) 644#define MT_16BIT_AY88 (3<<3) 645#define MT_16BIT_DIB_ARGB1555_8888 (4<<3) 646#define MT_16BIT_BUMP_88DVDU (5<<3) 647#define MT_16BIT_BUMP_655LDVDU (6<<3) 648#define MT_16BIT_DIB_RGB565_8888 (7<<3) 649#define MT_32BIT_ARGB8888 (0<<3) /* SURFACE_32BIT */ 650#define MT_32BIT_ABGR8888 (1<<3) 651#define MT_32BIT_XRGB8888 (2<<3) 652#define MT_32BIT_XBGR8888 (3<<3) 653#define MT_32BIT_BUMP_XLDVDU_8888 (6<<3) 654#define MT_32BIT_DIB_8888 (7<<3) 655#define MT_411_YUV411 (0<<3) /* SURFACE_411 */ 656#define MT_422_YCRCB_SWAPY (0<<3) /* SURFACE_422 */ 657#define MT_422_YCRCB_NORMAL (1<<3) 658#define MT_422_YCRCB_SWAPUV (2<<3) 659#define MT_422_YCRCB_SWAPUVY (3<<3) 660#define MT_COMPRESS_DXT1 (0<<3) /* SURFACE_COMPRESSED */ 661#define MT_COMPRESS_DXT2_3 (1<<3) 662#define MT_COMPRESS_DXT4_5 (2<<3) 663#define MT_COMPRESS_FXT1 (3<<3) 664#define TM0S1_COLORSPACE_CONVERSION (1 << 2) 665#define TM0S1_TILED_SURFACE (1 << 1) 666#define TM0S1_TILE_WALK (1 << 0) 667 668#define TM0S2_PITCH_SHIFT 21 669#define TM0S2_CUBE_FACE_ENA_SHIFT 15 670#define TM0S2_CUBE_FACE_ENA_MASK (1<<15) 671#define TM0S2_MAP_FORMAT (1<<14) 672#define TM0S2_MAP_2D (0<<14) 673#define TM0S2_MAP_3D_CUBE (1<<14) 674#define TM0S2_VERTICAL_LINE_STRIDE (1<<13) 675#define TM0S2_VERITCAL_LINE_STRIDE_OFF (1<<12) 676#define TM0S2_OUTPUT_CHAN_SHIFT 10 677#define TM0S2_OUTPUT_CHAN_MASK (3<<10) 678 679#define TM0S3_MIP_FILTER_MASK (0x3<<30) 680#define TM0S3_MIP_FILTER_SHIFT 30 681#define MIPFILTER_NONE 0 682#define MIPFILTER_NEAREST 1 683#define MIPFILTER_LINEAR 3 684#define TM0S3_MAG_FILTER_MASK (0x3<<28) 685#define TM0S3_MAG_FILTER_SHIFT 28 686#define TM0S3_MIN_FILTER_MASK (0x3<<26) 687#define TM0S3_MIN_FILTER_SHIFT 26 688#define FILTER_NEAREST 0 689#define FILTER_LINEAR 1 690#define FILTER_ANISOTROPIC 2 691 692#define TM0S3_LOD_BIAS_SHIFT 17 693#define TM0S3_LOD_BIAS_MASK (0x1ff<<17) 694#define TM0S3_MAX_MIP_SHIFT 9 695#define TM0S3_MAX_MIP_MASK (0xff<<9) 696#define TM0S3_MIN_MIP_SHIFT 3 697#define TM0S3_MIN_MIP_MASK (0x3f<<3) 698#define TM0S3_KILL_PIXEL (1<<2) 699#define TM0S3_KEYED_FILTER (1<<1) 700#define TM0S3_CHROMA_KEY (1<<0) 701 702/* _3DSTATE_MAP_TEXEL_STREAM, p188 */ 703#define _3DSTATE_MAP_TEX_STREAM_CMD (CMD_3D|(0x1c<<24)|(0x05<<19)) 704#define DISABLE_TEX_STREAM_BUMP (1<<12) 705#define ENABLE_TEX_STREAM_BUMP ((1<<12)|(1<<11)) 706#define TEX_MODIFY_UNIT_0 0 707#define TEX_MODIFY_UNIT_1 (1<<8) 708#define ENABLE_TEX_STREAM_COORD_SET (1<<7) 709#define TEX_STREAM_COORD_SET(x) ((x)<<4) 710#define ENABLE_TEX_STREAM_MAP_IDX (1<<3) 711#define TEX_STREAM_MAP_IDX(x) (x) 712 713#define FLUSH_MAP_CACHE (1<<0) 714 715#define _3DSTATE_MAP_FILTER_CMD (CMD_3D|(0x1c<<24)|(0x02<<19)) 716#define FILTER_TEXMAP_INDEX(x) ((x) << 16) 717#define MAG_MODE_FILTER_ENABLE (1 << 5) 718#define MIN_MODE_FILTER_ENABLE (1 << 2) 719#define MAG_MAPFILTER_NEAREST (0 << 3) 720#define MAG_MAPFILTER_LINEAR (1 << 3) 721#define MAG_MAPFILTER_ANISOTROPIC (2 << 3) 722#define MIN_MAPFILTER_NEAREST (0) 723#define MIN_MAPFILTER_LINEAR (1) 724#define MIN_MAPFILTER_ANISOTROPIC (2) 725#define ENABLE_KEYS (1<<15) 726#define DISABLE_COLOR_KEY 0 727#define DISABLE_CHROMA_KEY 0 728#define DISABLE_KILL_PIXEL 0 729#define ENABLE_MIP_MODE_FILTER (1 << 9) 730#define MIPFILTER_NONE 0 731#define MIPFILTER_NEAREST 1 732#define MIPFILTER_LINEAR 3 733 734#define TB0C_LAST_STAGE (1 << 31) 735#define TB0C_RESULT_SCALE_1X (0 << 29) 736#define TB0C_RESULT_SCALE_2X (1 << 29) 737#define TB0C_RESULT_SCALE_4X (2 << 29) 738#define TB0C_OP_ARG1 (1 << 25) 739#define TB0C_OP_MODULATE (3 << 25) 740#define TB0C_OUTPUT_WRITE_CURRENT (0 << 24) 741#define TB0C_OUTPUT_WRITE_ACCUM (1 << 24) 742#define TB0C_ARG3_REPLICATE_ALPHA (1<<23) 743#define TB0C_ARG3_INVERT (1<<22) 744#define TB0C_ARG3_SEL_XXX 745#define TB0C_ARG2_REPLICATE_ALPHA (1<<17) 746#define TB0C_ARG2_INVERT (1<<16) 747#define TB0C_ARG2_SEL_ONE (0 << 12) 748#define TB0C_ARG2_SEL_DIFFUSE (3 << 12) 749#define TB0C_ARG2_SEL_SPECULAR (4 << 12) 750#define TB0C_ARG2_SEL_FACTOR (1 << 12) 751#define TB0C_ARG2_SEL_TEXEL0 (6 << 12) 752#define TB0C_ARG2_SEL_TEXEL1 (7 << 12) 753#define TB0C_ARG2_SEL_TEXEL2 (8 << 12) 754#define TB0C_ARG2_SEL_TEXEL3 (9 << 12) 755#define TB0C_ARG1_REPLICATE_ALPHA (1<<11) 756#define TB0C_ARG1_INVERT (1<<10) 757#define TB0C_ARG1_SEL_ONE (0 << 6) 758#define TB0C_ARG1_SEL_DIFFUSE (3 << 6) 759#define TB0C_ARG1_SEL_SPECULAR (4 << 6) 760#define TB0C_ARG1_SEL_TEXEL0 (6 << 6) 761#define TB0C_ARG1_SEL_TEXEL1 (7 << 6) 762#define TB0C_ARG1_SEL_TEXEL2 (8 << 6) 763#define TB0C_ARG1_SEL_TEXEL3 (9 << 6) 764#define TB0C_ARG0_REPLICATE_ALPHA (1<<5) 765#define TB0C_ARG0_SEL_XXX 766 767#define TB0A_CTR_STAGE_ENABLE (1<<31) 768#define TB0A_RESULT_SCALE_1X (0 << 29) 769#define TB0A_RESULT_SCALE_2X (1 << 29) 770#define TB0A_RESULT_SCALE_4X (2 << 29) 771#define TB0A_OP_ARG1 (1 << 25) 772#define TB0A_OP_MODULATE (3 << 25) 773#define TB0A_OUTPUT_WRITE_CURRENT (0<<24) 774#define TB0A_OUTPUT_WRITE_ACCUM (1<<24) 775#define TB0A_CTR_STAGE_SEL_BITS_XXX 776#define TB0A_ARG3_SEL_XXX 777#define TB0A_ARG3_INVERT (1<<17) 778#define TB0A_ARG2_INVERT (1<<16) 779#define TB0A_ARG2_SEL_ONE (0 << 12) 780#define TB0A_ARG2_SEL_DIFFUSE (3 << 12) 781#define TB0A_ARG2_SEL_SPECULAR (4 << 12) 782#define TB0A_ARG2_SEL_TEXEL0 (6 << 12) 783#define TB0A_ARG2_SEL_TEXEL1 (7 << 12) 784#define TB0A_ARG2_SEL_TEXEL2 (8 << 12) 785#define TB0A_ARG2_SEL_TEXEL3 (9 << 12) 786#define TB0A_ARG1_INVERT (1<<10) 787#define TB0A_ARG1_SEL_ONE (0 << 6) 788#define TB0A_ARG1_SEL_DIFFUSE (3 << 6) 789#define TB0A_ARG1_SEL_SPECULAR (4 << 6) 790#define TB0A_ARG1_SEL_TEXEL0 (6 << 6) 791#define TB0A_ARG1_SEL_TEXEL1 (7 << 6) 792#define TB0A_ARG1_SEL_TEXEL2 (8 << 6) 793#define TB0A_ARG1_SEL_TEXEL3 (9 << 6) 794 795#endif /* GEN2_RENDER_H */ 796