1848b8605Smrg/************************************************************************** 2848b8605Smrg * 3848b8605Smrg * Copyright 2003 VMware, Inc. 4848b8605Smrg * All Rights Reserved. 5848b8605Smrg * 6848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 7848b8605Smrg * copy of this software and associated documentation files (the 8848b8605Smrg * "Software"), to deal in the Software without restriction, including 9848b8605Smrg * without limitation the rights to use, copy, modify, merge, publish, 10848b8605Smrg * distribute, sub license, and/or sell copies of the Software, and to 11848b8605Smrg * permit persons to whom the Software is furnished to do so, subject to 12848b8605Smrg * the following conditions: 13848b8605Smrg * 14848b8605Smrg * The above copyright notice and this permission notice (including the 15848b8605Smrg * next paragraph) shall be included in all copies or substantial portions 16848b8605Smrg * of the Software. 17848b8605Smrg * 18848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19848b8605Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20848b8605Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21848b8605Smrg * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22848b8605Smrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23848b8605Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24848b8605Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25848b8605Smrg * 26848b8605Smrg **************************************************************************/ 27848b8605Smrg 28848b8605Smrg 29848b8605Smrg#ifndef I915_REG_H 30848b8605Smrg#define I915_REG_H 31848b8605Smrg 32848b8605Smrg 33848b8605Smrg#define I915_SET_FIELD( var, mask, value ) (var &= ~(mask), var |= value) 34848b8605Smrg 35848b8605Smrg#define CMD_3D (0x3<<29) 36848b8605Smrg 37848b8605Smrg#define PRIM3D_INLINE (CMD_3D | (0x1f<<24)) 38848b8605Smrg#define PRIM3D_TRILIST (0x0<<18) 39848b8605Smrg#define PRIM3D_TRISTRIP (0x1<<18) 40848b8605Smrg#define PRIM3D_TRISTRIP_RVRSE (0x2<<18) 41848b8605Smrg#define PRIM3D_TRIFAN (0x3<<18) 42848b8605Smrg#define PRIM3D_POLY (0x4<<18) 43848b8605Smrg#define PRIM3D_LINELIST (0x5<<18) 44848b8605Smrg#define PRIM3D_LINESTRIP (0x6<<18) 45848b8605Smrg#define PRIM3D_RECTLIST (0x7<<18) 46848b8605Smrg#define PRIM3D_POINTLIST (0x8<<18) 47848b8605Smrg#define PRIM3D_DIB (0x9<<18) 48848b8605Smrg#define PRIM3D_CLEAR_RECT (0xa<<18) 49848b8605Smrg#define PRIM3D_ZONE_INIT (0xd<<18) 50848b8605Smrg#define PRIM3D_MASK (0x1f<<18) 51848b8605Smrg 52848b8605Smrg/* p137 */ 53848b8605Smrg#define _3DSTATE_AA_CMD (CMD_3D | (0x06<<24)) 54848b8605Smrg#define AA_LINE_ECAAR_WIDTH_ENABLE (1<<16) 55848b8605Smrg#define AA_LINE_ECAAR_WIDTH_0_5 0 56848b8605Smrg#define AA_LINE_ECAAR_WIDTH_1_0 (1<<14) 57848b8605Smrg#define AA_LINE_ECAAR_WIDTH_2_0 (2<<14) 58848b8605Smrg#define AA_LINE_ECAAR_WIDTH_4_0 (3<<14) 59848b8605Smrg#define AA_LINE_REGION_WIDTH_ENABLE (1<<8) 60848b8605Smrg#define AA_LINE_REGION_WIDTH_0_5 0 61848b8605Smrg#define AA_LINE_REGION_WIDTH_1_0 (1<<6) 62848b8605Smrg#define AA_LINE_REGION_WIDTH_2_0 (2<<6) 63848b8605Smrg#define AA_LINE_REGION_WIDTH_4_0 (3<<6) 64848b8605Smrg 65848b8605Smrg/* 3DSTATE_BACKFACE_STENCIL_OPS, p138*/ 66848b8605Smrg#define _3DSTATE_BACKFACE_STENCIL_OPS (CMD_3D | (0x8<<24)) 67848b8605Smrg#define BFO_ENABLE_STENCIL_REF (1<<23) 68848b8605Smrg#define BFO_STENCIL_REF_SHIFT 15 69848b8605Smrg#define BFO_STENCIL_REF_MASK (0xff<<15) 70848b8605Smrg#define BFO_ENABLE_STENCIL_FUNCS (1<<14) 71848b8605Smrg#define BFO_STENCIL_TEST_SHIFT 11 72848b8605Smrg#define BFO_STENCIL_TEST_MASK (0x7<<11) 73848b8605Smrg#define BFO_STENCIL_FAIL_SHIFT 8 74848b8605Smrg#define BFO_STENCIL_FAIL_MASK (0x7<<8) 75848b8605Smrg#define BFO_STENCIL_PASS_Z_FAIL_SHIFT 5 76848b8605Smrg#define BFO_STENCIL_PASS_Z_FAIL_MASK (0x7<<5) 77848b8605Smrg#define BFO_STENCIL_PASS_Z_PASS_SHIFT 2 78848b8605Smrg#define BFO_STENCIL_PASS_Z_PASS_MASK (0x7<<2) 79848b8605Smrg#define BFO_ENABLE_STENCIL_TWO_SIDE (1<<1) 80848b8605Smrg#define BFO_STENCIL_TWO_SIDE (1<<0) 81848b8605Smrg 82848b8605Smrg 83848b8605Smrg/* 3DSTATE_BACKFACE_STENCIL_MASKS, p140 */ 84848b8605Smrg#define _3DSTATE_BACKFACE_STENCIL_MASKS (CMD_3D | (0x9<<24)) 85848b8605Smrg#define BFM_ENABLE_STENCIL_TEST_MASK (1<<17) 86848b8605Smrg#define BFM_ENABLE_STENCIL_WRITE_MASK (1<<16) 87848b8605Smrg#define BFM_STENCIL_TEST_MASK_SHIFT 8 88848b8605Smrg#define BFM_STENCIL_TEST_MASK_MASK (0xff<<8) 89848b8605Smrg#define BFM_STENCIL_WRITE_MASK_SHIFT 0 90848b8605Smrg#define BFM_STENCIL_WRITE_MASK_MASK (0xff<<0) 91848b8605Smrg 92848b8605Smrg 93848b8605Smrg 94848b8605Smrg/* 3DSTATE_BIN_CONTROL p141 */ 95848b8605Smrg 96848b8605Smrg/* p143 */ 97848b8605Smrg#define _3DSTATE_BUF_INFO_CMD (CMD_3D | (0x1d<<24) | (0x8e<<16) | 1) 98848b8605Smrg/* Dword 1 */ 99848b8605Smrg#define BUF_3D_ID_COLOR_BACK (0x3<<24) 100848b8605Smrg#define BUF_3D_ID_DEPTH (0x7<<24) 101848b8605Smrg#define BUF_3D_USE_FENCE (1<<23) 102848b8605Smrg#define BUF_3D_TILED_SURFACE (1<<22) 103848b8605Smrg#define BUF_3D_TILE_WALK_X 0 104848b8605Smrg#define BUF_3D_TILE_WALK_Y (1<<21) 105848b8605Smrg#define BUF_3D_PITCH(x) (((x)/4)<<2) 106848b8605Smrg/* Dword 2 */ 107848b8605Smrg#define BUF_3D_ADDR(x) ((x) & ~0x3) 108848b8605Smrg 109848b8605Smrg 110848b8605Smrg/* 3DSTATE_CHROMA_KEY */ 111848b8605Smrg 112848b8605Smrg/* 3DSTATE_CLEAR_PARAMETERS, p150 */ 113848b8605Smrg#define _3DSTATE_CLEAR_PARAMETERS (CMD_3D | (0x1d<<24) | (0x9c<<16) | 5) 114848b8605Smrg/* Dword 1 */ 115848b8605Smrg#define CLEARPARAM_CLEAR_RECT (1 << 16) 116848b8605Smrg#define CLEARPARAM_ZONE_INIT (0 << 16) 117848b8605Smrg#define CLEARPARAM_WRITE_COLOR (1 << 2) 118848b8605Smrg#define CLEARPARAM_WRITE_DEPTH (1 << 1) 119848b8605Smrg#define CLEARPARAM_WRITE_STENCIL (1 << 0) 120848b8605Smrg 121848b8605Smrg/* 3DSTATE_CONSTANT_BLEND_COLOR, p153 */ 122848b8605Smrg#define _3DSTATE_CONST_BLEND_COLOR_CMD (CMD_3D | (0x1d<<24) | (0x88<<16)) 123848b8605Smrg 124848b8605Smrg 125848b8605Smrg 126848b8605Smrg/* 3DSTATE_COORD_SET_BINDINGS, p154 */ 127848b8605Smrg#define _3DSTATE_COORD_SET_BINDINGS (CMD_3D | (0x16<<24)) 128848b8605Smrg#define CSB_TCB(iunit, eunit) ((eunit)<<(iunit*3)) 129848b8605Smrg 130848b8605Smrg/* p156 */ 131848b8605Smrg#define _3DSTATE_DFLT_DIFFUSE_CMD (CMD_3D | (0x1d<<24) | (0x99<<16)) 132848b8605Smrg 133848b8605Smrg/* p157 */ 134848b8605Smrg#define _3DSTATE_DFLT_SPEC_CMD (CMD_3D | (0x1d<<24) | (0x9a<<16)) 135848b8605Smrg 136848b8605Smrg/* p158 */ 137848b8605Smrg#define _3DSTATE_DFLT_Z_CMD (CMD_3D | (0x1d<<24) | (0x98<<16)) 138848b8605Smrg 139848b8605Smrg 140848b8605Smrg/* 3DSTATE_DEPTH_OFFSET_SCALE, p159 */ 141848b8605Smrg#define _3DSTATE_DEPTH_OFFSET_SCALE (CMD_3D | (0x1d<<24) | (0x97<<16)) 142848b8605Smrg/* scale in dword 1 */ 143848b8605Smrg 144848b8605Smrg 145848b8605Smrg/* 3DSTATE_DEPTH_SUBRECT_DISABLE, p160 */ 146848b8605Smrg#define _3DSTATE_DEPTH_SUBRECT_DISABLE (CMD_3D | (0x1c<<24) | (0x11<<19) | 0x2) 147848b8605Smrg 148848b8605Smrg/* p161 */ 149848b8605Smrg#define _3DSTATE_DST_BUF_VARS_CMD (CMD_3D | (0x1d<<24) | (0x85<<16)) 150848b8605Smrg/* Dword 1 */ 151848b8605Smrg#define CLASSIC_EARLY_DEPTH (1<<31) 152848b8605Smrg#define TEX_DEFAULT_COLOR_OGL (0<<30) 153848b8605Smrg#define TEX_DEFAULT_COLOR_D3D (1<<30) 154848b8605Smrg#define ZR_EARLY_DEPTH (1<<29) 155848b8605Smrg#define LOD_PRECLAMP_OGL (1<<28) 156848b8605Smrg#define LOD_PRECLAMP_D3D (0<<28) 157848b8605Smrg#define DITHER_FULL_ALWAYS (0<<26) 158848b8605Smrg#define DITHER_FULL_ON_FB_BLEND (1<<26) 159848b8605Smrg#define DITHER_CLAMPED_ALWAYS (2<<26) 160848b8605Smrg#define LINEAR_GAMMA_BLEND_32BPP (1<<25) 161848b8605Smrg#define DEBUG_DISABLE_ENH_DITHER (1<<24) 162848b8605Smrg#define DSTORG_HORT_BIAS(x) ((x)<<20) 163848b8605Smrg#define DSTORG_VERT_BIAS(x) ((x)<<16) 164848b8605Smrg#define COLOR_4_2_2_CHNL_WRT_ALL 0 165848b8605Smrg#define COLOR_4_2_2_CHNL_WRT_Y (1<<12) 166848b8605Smrg#define COLOR_4_2_2_CHNL_WRT_CR (2<<12) 167848b8605Smrg#define COLOR_4_2_2_CHNL_WRT_CB (3<<12) 168848b8605Smrg#define COLOR_4_2_2_CHNL_WRT_CRCB (4<<12) 169848b8605Smrg#define COLOR_BUF_8BIT 0 170848b8605Smrg#define COLOR_BUF_RGB555 (1<<8) 171848b8605Smrg#define COLOR_BUF_RGB565 (2<<8) 172848b8605Smrg#define COLOR_BUF_ARGB8888 (3<<8) 173848b8605Smrg#define COLOR_BUF_YCRCB_SWAP (4<<8) 174848b8605Smrg#define COLOR_BUF_YCRCB_NORMAL (5<<8) 175848b8605Smrg#define COLOR_BUF_YCRCB_SWAPUV (6<<8) 176848b8605Smrg#define COLOR_BUF_YCRCB_SWAPUVY (7<<8) 177848b8605Smrg#define COLOR_BUF_ARGB4444 (8<<8) 178848b8605Smrg#define COLOR_BUF_ARGB1555 (9<<8) 179848b8605Smrg#define COLOR_BUF_ARGB2101010 (10<<8) 180848b8605Smrg#define DEPTH_FRMT_16_FIXED 0 181848b8605Smrg#define DEPTH_FRMT_16_FLOAT (1<<2) 182848b8605Smrg#define DEPTH_FRMT_24_FIXED_8_OTHER (2<<2) 183848b8605Smrg#define VERT_LINE_STRIDE_1 (1<<1) 184848b8605Smrg#define VERT_LINE_STRIDE_0 (0<<1) 185848b8605Smrg#define VERT_LINE_STRIDE_OFS_1 1 186848b8605Smrg#define VERT_LINE_STRIDE_OFS_0 0 187848b8605Smrg 188848b8605Smrg/* p166 */ 189848b8605Smrg#define _3DSTATE_DRAW_RECT_CMD (CMD_3D|(0x1d<<24)|(0x80<<16)|3) 190848b8605Smrg/* Dword 1 */ 191848b8605Smrg#define DRAW_RECT_DIS_DEPTH_OFS (1<<30) 192848b8605Smrg#define DRAW_DITHER_OFS_X(x) ((x)<<26) 193848b8605Smrg#define DRAW_DITHER_OFS_Y(x) ((x)<<24) 194848b8605Smrg/* Dword 2 */ 195848b8605Smrg#define DRAW_YMIN(x) ((x)<<16) 196848b8605Smrg#define DRAW_XMIN(x) (x) 197848b8605Smrg/* Dword 3 */ 198848b8605Smrg#define DRAW_YMAX(x) ((x)<<16) 199848b8605Smrg#define DRAW_XMAX(x) (x) 200848b8605Smrg/* Dword 4 */ 201848b8605Smrg#define DRAW_YORG(x) ((x)<<16) 202848b8605Smrg#define DRAW_XORG(x) (x) 203848b8605Smrg 204848b8605Smrg 205848b8605Smrg/* 3DSTATE_FILTER_COEFFICIENTS_4X4, p170 */ 206848b8605Smrg 207848b8605Smrg/* 3DSTATE_FILTER_COEFFICIENTS_6X5, p172 */ 208848b8605Smrg 209848b8605Smrg 210848b8605Smrg/* _3DSTATE_FOG_COLOR, p173 */ 211848b8605Smrg#define _3DSTATE_FOG_COLOR_CMD (CMD_3D|(0x15<<24)) 212848b8605Smrg#define FOG_COLOR_RED(x) ((x)<<16) 213848b8605Smrg#define FOG_COLOR_GREEN(x) ((x)<<8) 214848b8605Smrg#define FOG_COLOR_BLUE(x) (x) 215848b8605Smrg 216848b8605Smrg/* _3DSTATE_FOG_MODE, p174 */ 217848b8605Smrg#define _3DSTATE_FOG_MODE_CMD (CMD_3D|(0x1d<<24)|(0x89<<16)|2) 218848b8605Smrg/* Dword 1 */ 219848b8605Smrg#define FMC1_FOGFUNC_MODIFY_ENABLE (1<<31) 220848b8605Smrg#define FMC1_FOGFUNC_VERTEX (0<<28) 221848b8605Smrg#define FMC1_FOGFUNC_PIXEL_EXP (1<<28) 222848b8605Smrg#define FMC1_FOGFUNC_PIXEL_EXP2 (2<<28) 223848b8605Smrg#define FMC1_FOGFUNC_PIXEL_LINEAR (3<<28) 224848b8605Smrg#define FMC1_FOGFUNC_MASK (3<<28) 225848b8605Smrg#define FMC1_FOGINDEX_MODIFY_ENABLE (1<<27) 226848b8605Smrg#define FMC1_FOGINDEX_Z (0<<25) 227848b8605Smrg#define FMC1_FOGINDEX_W (1<<25) 228848b8605Smrg#define FMC1_C1_C2_MODIFY_ENABLE (1<<24) 229848b8605Smrg#define FMC1_DENSITY_MODIFY_ENABLE (1<<23) 230848b8605Smrg#define FMC1_C1_ONE (1<<13) 231848b8605Smrg#define FMC1_C1_MASK (0xffff<<4) 232848b8605Smrg/* Dword 2 */ 233848b8605Smrg#define FMC2_C2_ONE (1<<16) 234848b8605Smrg/* Dword 3 */ 235848b8605Smrg#define FMC3_D_ONE (1<<16) 236848b8605Smrg 237848b8605Smrg 238848b8605Smrg 239848b8605Smrg/* _3DSTATE_INDEPENDENT_ALPHA_BLEND, p177 */ 240848b8605Smrg#define _3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD (CMD_3D|(0x0b<<24)) 241848b8605Smrg#define IAB_MODIFY_ENABLE (1<<23) 242848b8605Smrg#define IAB_ENABLE (1<<22) 243848b8605Smrg#define IAB_MODIFY_FUNC (1<<21) 244848b8605Smrg#define IAB_FUNC_SHIFT 16 245848b8605Smrg#define IAB_MODIFY_SRC_FACTOR (1<<11) 246848b8605Smrg#define IAB_SRC_FACTOR_SHIFT 6 247848b8605Smrg#define IAB_SRC_FACTOR_MASK (BLENDFACT_MASK<<6) 248848b8605Smrg#define IAB_MODIFY_DST_FACTOR (1<<5) 249848b8605Smrg#define IAB_DST_FACTOR_SHIFT 0 250848b8605Smrg#define IAB_DST_FACTOR_MASK (BLENDFACT_MASK<<0) 251848b8605Smrg 252848b8605Smrg 253848b8605Smrg#define BLENDFUNC_ADD 0x0 254848b8605Smrg#define BLENDFUNC_SUBTRACT 0x1 255848b8605Smrg#define BLENDFUNC_REVERSE_SUBTRACT 0x2 256848b8605Smrg#define BLENDFUNC_MIN 0x3 257848b8605Smrg#define BLENDFUNC_MAX 0x4 258848b8605Smrg#define BLENDFUNC_MASK 0x7 259848b8605Smrg 260848b8605Smrg/* 3DSTATE_LOAD_INDIRECT, p180 */ 261848b8605Smrg 262848b8605Smrg#define _3DSTATE_LOAD_INDIRECT (CMD_3D|(0x1d<<24)|(0x7<<16)) 263848b8605Smrg#define LI0_STATE_STATIC_INDIRECT (0x01<<8) 264848b8605Smrg#define LI0_STATE_DYNAMIC_INDIRECT (0x02<<8) 265848b8605Smrg#define LI0_STATE_SAMPLER (0x04<<8) 266848b8605Smrg#define LI0_STATE_MAP (0x08<<8) 267848b8605Smrg#define LI0_STATE_PROGRAM (0x10<<8) 268848b8605Smrg#define LI0_STATE_CONSTANTS (0x20<<8) 269848b8605Smrg 270848b8605Smrg#define SIS0_BUFFER_ADDRESS(x) ((x)&~0x3) 271848b8605Smrg#define SIS0_FORCE_LOAD (1<<1) 272848b8605Smrg#define SIS0_BUFFER_VALID (1<<0) 273848b8605Smrg#define SIS1_BUFFER_LENGTH(x) ((x)&0xff) 274848b8605Smrg 275848b8605Smrg#define DIS0_BUFFER_ADDRESS(x) ((x)&~0x3) 276848b8605Smrg#define DIS0_BUFFER_RESET (1<<1) 277848b8605Smrg#define DIS0_BUFFER_VALID (1<<0) 278848b8605Smrg 279848b8605Smrg#define SSB0_BUFFER_ADDRESS(x) ((x)&~0x3) 280848b8605Smrg#define SSB0_FORCE_LOAD (1<<1) 281848b8605Smrg#define SSB0_BUFFER_VALID (1<<0) 282848b8605Smrg#define SSB1_BUFFER_LENGTH(x) ((x)&0xff) 283848b8605Smrg 284848b8605Smrg#define MSB0_BUFFER_ADDRESS(x) ((x)&~0x3) 285848b8605Smrg#define MSB0_FORCE_LOAD (1<<1) 286848b8605Smrg#define MSB0_BUFFER_VALID (1<<0) 287848b8605Smrg#define MSB1_BUFFER_LENGTH(x) ((x)&0xff) 288848b8605Smrg 289848b8605Smrg#define PSP0_BUFFER_ADDRESS(x) ((x)&~0x3) 290848b8605Smrg#define PSP0_FORCE_LOAD (1<<1) 291848b8605Smrg#define PSP0_BUFFER_VALID (1<<0) 292848b8605Smrg#define PSP1_BUFFER_LENGTH(x) ((x)&0xff) 293848b8605Smrg 294848b8605Smrg#define PSC0_BUFFER_ADDRESS(x) ((x)&~0x3) 295848b8605Smrg#define PSC0_FORCE_LOAD (1<<1) 296848b8605Smrg#define PSC0_BUFFER_VALID (1<<0) 297848b8605Smrg#define PSC1_BUFFER_LENGTH(x) ((x)&0xff) 298848b8605Smrg 299848b8605Smrg 300848b8605Smrg 301848b8605Smrg 302848b8605Smrg 303848b8605Smrg/* _3DSTATE_RASTERIZATION_RULES */ 304848b8605Smrg#define _3DSTATE_RASTER_RULES_CMD (CMD_3D|(0x07<<24)) 305848b8605Smrg#define ENABLE_POINT_RASTER_RULE (1<<15) 306848b8605Smrg#define OGL_POINT_RASTER_RULE (1<<13) 307848b8605Smrg#define ENABLE_TEXKILL_3D_4D (1<<10) 308848b8605Smrg#define TEXKILL_3D (0<<9) 309848b8605Smrg#define TEXKILL_4D (1<<9) 310848b8605Smrg#define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8) 311848b8605Smrg#define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5) 312848b8605Smrg#define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6) 313848b8605Smrg#define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3) 314848b8605Smrg 315848b8605Smrg/* _3DSTATE_SCISSOR_ENABLE, p256 */ 316848b8605Smrg#define _3DSTATE_SCISSOR_ENABLE_CMD (CMD_3D|(0x1c<<24)|(0x10<<19)) 317848b8605Smrg#define ENABLE_SCISSOR_RECT ((1<<1) | 1) 318848b8605Smrg#define DISABLE_SCISSOR_RECT (1<<1) 319848b8605Smrg 320848b8605Smrg/* _3DSTATE_SCISSOR_RECTANGLE_0, p257 */ 321848b8605Smrg#define _3DSTATE_SCISSOR_RECT_0_CMD (CMD_3D|(0x1d<<24)|(0x81<<16)|1) 322848b8605Smrg/* Dword 1 */ 323848b8605Smrg#define SCISSOR_RECT_0_YMIN(x) ((x)<<16) 324848b8605Smrg#define SCISSOR_RECT_0_XMIN(x) (x) 325848b8605Smrg/* Dword 2 */ 326848b8605Smrg#define SCISSOR_RECT_0_YMAX(x) ((x)<<16) 327848b8605Smrg#define SCISSOR_RECT_0_XMAX(x) (x) 328848b8605Smrg 329848b8605Smrg/* p189 */ 330848b8605Smrg#define _3DSTATE_LOAD_STATE_IMMEDIATE_1 ((0x3<<29)|(0x1d<<24)|(0x04<<16)) 331848b8605Smrg#define I1_LOAD_S(n) (1<<(4+n)) 332848b8605Smrg 333848b8605Smrg#define S0_VB_OFFSET_MASK 0xffffffc 334848b8605Smrg#define S0_AUTO_CACHE_INV_DISABLE (1<<0) 335848b8605Smrg 336848b8605Smrg#define S1_VERTEX_WIDTH_SHIFT 24 337848b8605Smrg#define S1_VERTEX_WIDTH_MASK (0x3f<<24) 338848b8605Smrg#define S1_VERTEX_PITCH_SHIFT 16 339848b8605Smrg#define S1_VERTEX_PITCH_MASK (0x3f<<16) 340848b8605Smrg 341848b8605Smrg#define TEXCOORDFMT_2D 0x0 342848b8605Smrg#define TEXCOORDFMT_3D 0x1 343848b8605Smrg#define TEXCOORDFMT_4D 0x2 344848b8605Smrg#define TEXCOORDFMT_1D 0x3 345848b8605Smrg#define TEXCOORDFMT_2D_16 0x4 346848b8605Smrg#define TEXCOORDFMT_4D_16 0x5 347848b8605Smrg#define TEXCOORDFMT_NOT_PRESENT 0xf 348848b8605Smrg#define S2_TEXCOORD_FMT0_MASK 0xf 349848b8605Smrg#define S2_TEXCOORD_FMT1_SHIFT 4 350848b8605Smrg#define S2_TEXCOORD_FMT(unit, type) ((type)<<(unit*4)) 351848b8605Smrg#define S2_TEXCOORD_NONE (~0) 352848b8605Smrg 353848b8605Smrg/* S3 not interesting */ 354848b8605Smrg 355848b8605Smrg#define S4_POINT_WIDTH_SHIFT 23 356848b8605Smrg#define S4_POINT_WIDTH_MASK (0x1ff<<23) 357848b8605Smrg#define S4_LINE_WIDTH_SHIFT 19 358848b8605Smrg#define S4_LINE_WIDTH_ONE (0x2<<19) 359848b8605Smrg#define S4_LINE_WIDTH_MASK (0xf<<19) 360848b8605Smrg#define S4_FLATSHADE_ALPHA (1<<18) 361848b8605Smrg#define S4_FLATSHADE_FOG (1<<17) 362848b8605Smrg#define S4_FLATSHADE_SPECULAR (1<<16) 363848b8605Smrg#define S4_FLATSHADE_COLOR (1<<15) 364848b8605Smrg#define S4_CULLMODE_BOTH (0<<13) 365848b8605Smrg#define S4_CULLMODE_NONE (1<<13) 366848b8605Smrg#define S4_CULLMODE_CW (2<<13) 367848b8605Smrg#define S4_CULLMODE_CCW (3<<13) 368848b8605Smrg#define S4_CULLMODE_MASK (3<<13) 369848b8605Smrg#define S4_VFMT_POINT_WIDTH (1<<12) 370848b8605Smrg#define S4_VFMT_SPEC_FOG (1<<11) 371848b8605Smrg#define S4_VFMT_COLOR (1<<10) 372848b8605Smrg#define S4_VFMT_DEPTH_OFFSET (1<<9) 373848b8605Smrg#define S4_VFMT_XYZ (1<<6) 374848b8605Smrg#define S4_VFMT_XYZW (2<<6) 375848b8605Smrg#define S4_VFMT_XY (3<<6) 376848b8605Smrg#define S4_VFMT_XYW (4<<6) 377848b8605Smrg#define S4_VFMT_XYZW_MASK (7<<6) 378848b8605Smrg#define S4_FORCE_DEFAULT_DIFFUSE (1<<5) 379848b8605Smrg#define S4_FORCE_DEFAULT_SPECULAR (1<<4) 380848b8605Smrg#define S4_LOCAL_DEPTH_OFFSET_ENABLE (1<<3) 381848b8605Smrg#define S4_VFMT_FOG_PARAM (1<<2) 382848b8605Smrg#define S4_SPRITE_POINT_ENABLE (1<<1) 383848b8605Smrg#define S4_LINE_ANTIALIAS_ENABLE (1<<0) 384848b8605Smrg 385848b8605Smrg#define S4_VFMT_MASK (S4_VFMT_POINT_WIDTH | \ 386848b8605Smrg S4_VFMT_SPEC_FOG | \ 387848b8605Smrg S4_VFMT_COLOR | \ 388848b8605Smrg S4_VFMT_DEPTH_OFFSET | \ 389848b8605Smrg S4_VFMT_XYZW_MASK | \ 390848b8605Smrg S4_VFMT_FOG_PARAM) 391848b8605Smrg 392848b8605Smrg 393848b8605Smrg#define S5_WRITEDISABLE_ALPHA (1<<31) 394848b8605Smrg#define S5_WRITEDISABLE_RED (1<<30) 395848b8605Smrg#define S5_WRITEDISABLE_GREEN (1<<29) 396848b8605Smrg#define S5_WRITEDISABLE_BLUE (1<<28) 397848b8605Smrg#define S5_WRITEDISABLE_MASK (0xf<<28) 398848b8605Smrg#define S5_FORCE_DEFAULT_POINT_SIZE (1<<27) 399848b8605Smrg#define S5_LAST_PIXEL_ENABLE (1<<26) 400848b8605Smrg#define S5_GLOBAL_DEPTH_OFFSET_ENABLE (1<<25) 401848b8605Smrg#define S5_FOG_ENABLE (1<<24) 402848b8605Smrg#define S5_STENCIL_REF_SHIFT 16 403848b8605Smrg#define S5_STENCIL_REF_MASK (0xff<<16) 404848b8605Smrg#define S5_STENCIL_TEST_FUNC_SHIFT 13 405848b8605Smrg#define S5_STENCIL_TEST_FUNC_MASK (0x7<<13) 406848b8605Smrg#define S5_STENCIL_FAIL_SHIFT 10 407848b8605Smrg#define S5_STENCIL_FAIL_MASK (0x7<<10) 408848b8605Smrg#define S5_STENCIL_PASS_Z_FAIL_SHIFT 7 409848b8605Smrg#define S5_STENCIL_PASS_Z_FAIL_MASK (0x7<<7) 410848b8605Smrg#define S5_STENCIL_PASS_Z_PASS_SHIFT 4 411848b8605Smrg#define S5_STENCIL_PASS_Z_PASS_MASK (0x7<<4) 412848b8605Smrg#define S5_STENCIL_WRITE_ENABLE (1<<3) 413848b8605Smrg#define S5_STENCIL_TEST_ENABLE (1<<2) 414848b8605Smrg#define S5_COLOR_DITHER_ENABLE (1<<1) 415848b8605Smrg#define S5_LOGICOP_ENABLE (1<<0) 416848b8605Smrg 417848b8605Smrg 418848b8605Smrg#define S6_ALPHA_TEST_ENABLE (1<<31) 419848b8605Smrg#define S6_ALPHA_TEST_FUNC_SHIFT 28 420848b8605Smrg#define S6_ALPHA_TEST_FUNC_MASK (0x7<<28) 421848b8605Smrg#define S6_ALPHA_REF_SHIFT 20 422848b8605Smrg#define S6_ALPHA_REF_MASK (0xff<<20) 423848b8605Smrg#define S6_DEPTH_TEST_ENABLE (1<<19) 424848b8605Smrg#define S6_DEPTH_TEST_FUNC_SHIFT 16 425848b8605Smrg#define S6_DEPTH_TEST_FUNC_MASK (0x7<<16) 426848b8605Smrg#define S6_CBUF_BLEND_ENABLE (1<<15) 427848b8605Smrg#define S6_CBUF_BLEND_FUNC_SHIFT 12 428848b8605Smrg#define S6_CBUF_BLEND_FUNC_MASK (0x7<<12) 429848b8605Smrg#define S6_CBUF_SRC_BLEND_FACT_SHIFT 8 430848b8605Smrg#define S6_CBUF_SRC_BLEND_FACT_MASK (0xf<<8) 431848b8605Smrg#define S6_CBUF_DST_BLEND_FACT_SHIFT 4 432848b8605Smrg#define S6_CBUF_DST_BLEND_FACT_MASK (0xf<<4) 433848b8605Smrg#define S6_DEPTH_WRITE_ENABLE (1<<3) 434848b8605Smrg#define S6_COLOR_WRITE_ENABLE (1<<2) 435848b8605Smrg#define S6_TRISTRIP_PV_SHIFT 0 436848b8605Smrg#define S6_TRISTRIP_PV_MASK (0x3<<0) 437848b8605Smrg 438848b8605Smrg#define S7_DEPTH_OFFSET_CONST_MASK ~0 439848b8605Smrg 440848b8605Smrg 441848b8605Smrg 442848b8605Smrg#define DST_BLND_FACT(f) ((f)<<S6_CBUF_DST_BLEND_FACT_SHIFT) 443848b8605Smrg#define SRC_BLND_FACT(f) ((f)<<S6_CBUF_SRC_BLEND_FACT_SHIFT) 444848b8605Smrg#define DST_ABLND_FACT(f) ((f)<<IAB_DST_FACTOR_SHIFT) 445848b8605Smrg#define SRC_ABLND_FACT(f) ((f)<<IAB_SRC_FACTOR_SHIFT) 446848b8605Smrg 447848b8605Smrg 448848b8605Smrg 449848b8605Smrg 450848b8605Smrg/* 3DSTATE_MAP_DEINTERLACER_PARAMETERS */ 451848b8605Smrg 452848b8605Smrg/* 3DSTATE_MAP_PALETTE_LOAD_32, p206 */ 453848b8605Smrg#define _3DSTATE_MAP_PALETTE_LOAD_32 (CMD_3D|(0x1d<<24)|(0x8f<<16)) 454848b8605Smrg/* subsequent dwords up to length (max 16) are ARGB8888 color values */ 455848b8605Smrg 456848b8605Smrg/* _3DSTATE_MODES_4, p218 */ 457848b8605Smrg#define _3DSTATE_MODES_4_CMD (CMD_3D|(0x0d<<24)) 458848b8605Smrg#define ENABLE_LOGIC_OP_FUNC (1<<23) 459848b8605Smrg#define LOGIC_OP_FUNC(x) ((x)<<18) 460848b8605Smrg#define LOGICOP_MASK (0xf<<18) 461848b8605Smrg#define MODE4_ENABLE_STENCIL_TEST_MASK ((1<<17)|(0xff00)) 462848b8605Smrg#define ENABLE_STENCIL_TEST_MASK (1<<17) 463848b8605Smrg#define STENCIL_TEST_MASK(x) (((x)&0xff)<<8) 464848b8605Smrg#define MODE4_ENABLE_STENCIL_WRITE_MASK ((1<<16)|(0x00ff)) 465848b8605Smrg#define ENABLE_STENCIL_WRITE_MASK (1<<16) 466848b8605Smrg#define STENCIL_WRITE_MASK(x) ((x)&0xff) 467848b8605Smrg 468848b8605Smrg/* _3DSTATE_MODES_5, p220 */ 469848b8605Smrg#define _3DSTATE_MODES_5_CMD (CMD_3D|(0x0c<<24)) 470848b8605Smrg#define PIPELINE_FLUSH_RENDER_CACHE (1<<18) 471848b8605Smrg#define PIPELINE_FLUSH_TEXTURE_CACHE (1<<16) 472848b8605Smrg 473848b8605Smrg 474848b8605Smrg/* p221 */ 475848b8605Smrg#define _3DSTATE_PIXEL_SHADER_CONSTANTS (CMD_3D|(0x1d<<24)|(0x6<<16)) 476848b8605Smrg#define PS1_REG(n) (1<<(n)) 477848b8605Smrg#define PS2_CONST_X(n) (n) 478848b8605Smrg#define PS3_CONST_Y(n) (n) 479848b8605Smrg#define PS4_CONST_Z(n) (n) 480848b8605Smrg#define PS5_CONST_W(n) (n) 481848b8605Smrg 482848b8605Smrg/* p222 */ 483848b8605Smrg 484848b8605Smrg 485848b8605Smrg#define I915_MAX_TEX_INDIRECT 4 486848b8605Smrg#define I915_MAX_TEX_INSN 32 487848b8605Smrg#define I915_MAX_ALU_INSN 64 488848b8605Smrg#define I915_MAX_DECL_INSN 27 489848b8605Smrg#define I915_MAX_TEMPORARY 16 490848b8605Smrg 491848b8605Smrg 492848b8605Smrg/* Each instruction is 3 dwords long, though most don't require all 493848b8605Smrg * this space. Maximum of 123 instructions. Smaller maxes per insn 494848b8605Smrg * type. 495848b8605Smrg */ 496848b8605Smrg#define _3DSTATE_PIXEL_SHADER_PROGRAM (CMD_3D|(0x1d<<24)|(0x5<<16)) 497848b8605Smrg 498848b8605Smrg#define REG_TYPE_R 0 /* temporary regs, no need to 499848b8605Smrg * dcl, must be written before 500848b8605Smrg * read -- Preserved between 501848b8605Smrg * phases. 502848b8605Smrg */ 503848b8605Smrg#define REG_TYPE_T 1 /* Interpolated values, must be 504848b8605Smrg * dcl'ed before use. 505848b8605Smrg * 506848b8605Smrg * 0..7: texture coord, 507848b8605Smrg * 8: diffuse spec, 508848b8605Smrg * 9: specular color, 509848b8605Smrg * 10: fog parameter in w. 510848b8605Smrg */ 511848b8605Smrg#define REG_TYPE_CONST 2 /* Restriction: only one const 512848b8605Smrg * can be referenced per 513848b8605Smrg * instruction, though it may be 514848b8605Smrg * selected for multiple inputs. 515848b8605Smrg * Constants not initialized 516848b8605Smrg * default to zero. 517848b8605Smrg */ 518848b8605Smrg#define REG_TYPE_S 3 /* sampler */ 519848b8605Smrg#define REG_TYPE_OC 4 /* output color (rgba) */ 520848b8605Smrg#define REG_TYPE_OD 5 /* output depth (w), xyz are 521848b8605Smrg * temporaries. If not written, 522848b8605Smrg * interpolated depth is used? 523848b8605Smrg */ 524848b8605Smrg#define REG_TYPE_U 6 /* unpreserved temporaries */ 525848b8605Smrg#define REG_TYPE_MASK 0x7 526848b8605Smrg#define REG_NR_MASK 0xf 527848b8605Smrg 528848b8605Smrg 529848b8605Smrg/* REG_TYPE_T: 530848b8605Smrg */ 531848b8605Smrg#define T_TEX0 0 532848b8605Smrg#define T_TEX1 1 533848b8605Smrg#define T_TEX2 2 534848b8605Smrg#define T_TEX3 3 535848b8605Smrg#define T_TEX4 4 536848b8605Smrg#define T_TEX5 5 537848b8605Smrg#define T_TEX6 6 538848b8605Smrg#define T_TEX7 7 539848b8605Smrg#define T_DIFFUSE 8 540848b8605Smrg#define T_SPECULAR 9 541848b8605Smrg#define T_FOG_W 10 /* interpolated fog is in W coord */ 542848b8605Smrg 543848b8605Smrg/* Arithmetic instructions */ 544848b8605Smrg 545848b8605Smrg/* .replicate_swizzle == selection and replication of a particular 546848b8605Smrg * scalar channel, ie., .xxxx, .yyyy, .zzzz or .wwww 547848b8605Smrg */ 548848b8605Smrg#define A0_NOP (0x0<<24) /* no operation */ 549848b8605Smrg#define A0_ADD (0x1<<24) /* dst = src0 + src1 */ 550848b8605Smrg#define A0_MOV (0x2<<24) /* dst = src0 */ 551848b8605Smrg#define A0_MUL (0x3<<24) /* dst = src0 * src1 */ 552848b8605Smrg#define A0_MAD (0x4<<24) /* dst = src0 * src1 + src2 */ 553848b8605Smrg#define A0_DP2ADD (0x5<<24) /* dst.xyzw = src0.xy dot src1.xy + src2.replicate_swizzle */ 554848b8605Smrg#define A0_DP3 (0x6<<24) /* dst.xyzw = src0.xyz dot src1.xyz */ 555848b8605Smrg#define A0_DP4 (0x7<<24) /* dst.xyzw = src0.xyzw dot src1.xyzw */ 556848b8605Smrg#define A0_FRC (0x8<<24) /* dst = src0 - floor(src0) */ 557848b8605Smrg#define A0_RCP (0x9<<24) /* dst.xyzw = 1/(src0.replicate_swizzle) */ 558848b8605Smrg#define A0_RSQ (0xa<<24) /* dst.xyzw = 1/(sqrt(abs(src0.replicate_swizzle))) */ 559848b8605Smrg#define A0_EXP (0xb<<24) /* dst.xyzw = exp2(src0.replicate_swizzle) */ 560848b8605Smrg#define A0_LOG (0xc<<24) /* dst.xyzw = log2(abs(src0.replicate_swizzle)) */ 561848b8605Smrg#define A0_CMP (0xd<<24) /* dst = (src0 >= 0.0) ? src1 : src2 */ 562848b8605Smrg#define A0_MIN (0xe<<24) /* dst = (src0 < src1) ? src0 : src1 */ 563848b8605Smrg#define A0_MAX (0xf<<24) /* dst = (src0 >= src1) ? src0 : src1 */ 564848b8605Smrg#define A0_FLR (0x10<<24) /* dst = floor(src0) */ 565848b8605Smrg#define A0_MOD (0x11<<24) /* dst = src0 fmod 1.0 */ 566848b8605Smrg#define A0_TRC (0x12<<24) /* dst = int(src0) */ 567848b8605Smrg#define A0_SGE (0x13<<24) /* dst = src0 >= src1 ? 1.0 : 0.0 */ 568848b8605Smrg#define A0_SLT (0x14<<24) /* dst = src0 < src1 ? 1.0 : 0.0 */ 569848b8605Smrg#define A0_DEST_SATURATE (1<<22) 570848b8605Smrg#define A0_DEST_TYPE_SHIFT 19 571848b8605Smrg/* Allow: R, OC, OD, U */ 572848b8605Smrg#define A0_DEST_NR_SHIFT 14 573848b8605Smrg/* Allow R: 0..15, OC,OD: 0..0, U: 0..2 */ 574848b8605Smrg#define A0_DEST_CHANNEL_X (1<<10) 575848b8605Smrg#define A0_DEST_CHANNEL_Y (2<<10) 576848b8605Smrg#define A0_DEST_CHANNEL_Z (4<<10) 577848b8605Smrg#define A0_DEST_CHANNEL_W (8<<10) 578848b8605Smrg#define A0_DEST_CHANNEL_ALL (0xf<<10) 579848b8605Smrg#define A0_DEST_CHANNEL_SHIFT 10 580848b8605Smrg#define A0_SRC0_TYPE_SHIFT 7 581848b8605Smrg#define A0_SRC0_NR_SHIFT 2 582848b8605Smrg 583848b8605Smrg#define A0_DEST_CHANNEL_XY (A0_DEST_CHANNEL_X|A0_DEST_CHANNEL_Y) 584848b8605Smrg#define A0_DEST_CHANNEL_XYZ (A0_DEST_CHANNEL_XY|A0_DEST_CHANNEL_Z) 585848b8605Smrg 586848b8605Smrg 587848b8605Smrg#define SRC_X 0 588848b8605Smrg#define SRC_Y 1 589848b8605Smrg#define SRC_Z 2 590848b8605Smrg#define SRC_W 3 591848b8605Smrg#define SRC_ZERO 4 592848b8605Smrg#define SRC_ONE 5 593848b8605Smrg 594848b8605Smrg#define A1_SRC0_CHANNEL_X_NEGATE (1<<31) 595848b8605Smrg#define A1_SRC0_CHANNEL_X_SHIFT 28 596848b8605Smrg#define A1_SRC0_CHANNEL_Y_NEGATE (1<<27) 597848b8605Smrg#define A1_SRC0_CHANNEL_Y_SHIFT 24 598848b8605Smrg#define A1_SRC0_CHANNEL_Z_NEGATE (1<<23) 599848b8605Smrg#define A1_SRC0_CHANNEL_Z_SHIFT 20 600848b8605Smrg#define A1_SRC0_CHANNEL_W_NEGATE (1<<19) 601848b8605Smrg#define A1_SRC0_CHANNEL_W_SHIFT 16 602848b8605Smrg#define A1_SRC1_TYPE_SHIFT 13 603848b8605Smrg#define A1_SRC1_NR_SHIFT 8 604848b8605Smrg#define A1_SRC1_CHANNEL_X_NEGATE (1<<7) 605848b8605Smrg#define A1_SRC1_CHANNEL_X_SHIFT 4 606848b8605Smrg#define A1_SRC1_CHANNEL_Y_NEGATE (1<<3) 607848b8605Smrg#define A1_SRC1_CHANNEL_Y_SHIFT 0 608848b8605Smrg 609848b8605Smrg#define A2_SRC1_CHANNEL_Z_NEGATE (1<<31) 610848b8605Smrg#define A2_SRC1_CHANNEL_Z_SHIFT 28 611848b8605Smrg#define A2_SRC1_CHANNEL_W_NEGATE (1<<27) 612848b8605Smrg#define A2_SRC1_CHANNEL_W_SHIFT 24 613848b8605Smrg#define A2_SRC2_TYPE_SHIFT 21 614848b8605Smrg#define A2_SRC2_NR_SHIFT 16 615848b8605Smrg#define A2_SRC2_CHANNEL_X_NEGATE (1<<15) 616848b8605Smrg#define A2_SRC2_CHANNEL_X_SHIFT 12 617848b8605Smrg#define A2_SRC2_CHANNEL_Y_NEGATE (1<<11) 618848b8605Smrg#define A2_SRC2_CHANNEL_Y_SHIFT 8 619848b8605Smrg#define A2_SRC2_CHANNEL_Z_NEGATE (1<<7) 620848b8605Smrg#define A2_SRC2_CHANNEL_Z_SHIFT 4 621848b8605Smrg#define A2_SRC2_CHANNEL_W_NEGATE (1<<3) 622848b8605Smrg#define A2_SRC2_CHANNEL_W_SHIFT 0 623848b8605Smrg 624848b8605Smrg 625848b8605Smrg 626848b8605Smrg/* Texture instructions */ 627848b8605Smrg#define T0_TEXLD (0x15<<24) /* Sample texture using predeclared 628848b8605Smrg * sampler and address, and output 629848b8605Smrg * filtered texel data to destination 630848b8605Smrg * register */ 631848b8605Smrg#define T0_TEXLDP (0x16<<24) /* Same as texld but performs a 632848b8605Smrg * perspective divide of the texture 633848b8605Smrg * coordinate .xyz values by .w before 634848b8605Smrg * sampling. */ 635848b8605Smrg#define T0_TEXLDB (0x17<<24) /* Same as texld but biases the 636848b8605Smrg * computed LOD by w. Only S4.6 two's 637848b8605Smrg * comp is used. This implies that a 638848b8605Smrg * float to fixed conversion is 639848b8605Smrg * done. */ 640848b8605Smrg#define T0_TEXKILL (0x18<<24) /* Does not perform a sampling 641848b8605Smrg * operation. Simply kills the pixel 642848b8605Smrg * if any channel of the address 643848b8605Smrg * register is < 0.0. */ 644848b8605Smrg#define T0_DEST_TYPE_SHIFT 19 645848b8605Smrg/* Allow: R, OC, OD, U */ 646848b8605Smrg/* Note: U (unpreserved) regs do not retain their values between 647848b8605Smrg * phases (cannot be used for feedback) 648848b8605Smrg * 649848b8605Smrg * Note: oC and OD registers can only be used as the destination of a 650848b8605Smrg * texture instruction once per phase (this is an implementation 651848b8605Smrg * restriction). 652848b8605Smrg */ 653848b8605Smrg#define T0_DEST_NR_SHIFT 14 654848b8605Smrg/* Allow R: 0..15, OC,OD: 0..0, U: 0..2 */ 655848b8605Smrg#define T0_SAMPLER_NR_SHIFT 0 /* This field ignored for TEXKILL */ 656848b8605Smrg#define T0_SAMPLER_NR_MASK (0xf<<0) 657848b8605Smrg 658848b8605Smrg#define T1_ADDRESS_REG_TYPE_SHIFT 24 /* Reg to use as texture coord */ 659848b8605Smrg/* Allow R, T, OC, OD -- R, OC, OD are 'dependent' reads, new program phase */ 660848b8605Smrg#define T1_ADDRESS_REG_NR_SHIFT 17 661848b8605Smrg#define T2_MBZ 0 662848b8605Smrg 663848b8605Smrg/* Declaration instructions */ 664848b8605Smrg#define D0_DCL (0x19<<24) /* Declare a t (interpolated attrib) 665848b8605Smrg * register or an s (sampler) 666848b8605Smrg * register. */ 667848b8605Smrg#define D0_SAMPLE_TYPE_SHIFT 22 668848b8605Smrg#define D0_SAMPLE_TYPE_2D (0x0<<22) 669848b8605Smrg#define D0_SAMPLE_TYPE_CUBE (0x1<<22) 670848b8605Smrg#define D0_SAMPLE_TYPE_VOLUME (0x2<<22) 671848b8605Smrg#define D0_SAMPLE_TYPE_MASK (0x3<<22) 672848b8605Smrg 673848b8605Smrg#define D0_TYPE_SHIFT 19 674848b8605Smrg/* Allow: T, S */ 675848b8605Smrg#define D0_NR_SHIFT 14 676848b8605Smrg/* Allow T: 0..10, S: 0..15 */ 677848b8605Smrg#define D0_CHANNEL_X (1<<10) 678848b8605Smrg#define D0_CHANNEL_Y (2<<10) 679848b8605Smrg#define D0_CHANNEL_Z (4<<10) 680848b8605Smrg#define D0_CHANNEL_W (8<<10) 681848b8605Smrg#define D0_CHANNEL_ALL (0xf<<10) 682848b8605Smrg#define D0_CHANNEL_NONE (0<<10) 683848b8605Smrg 684848b8605Smrg#define D0_CHANNEL_XY (D0_CHANNEL_X|D0_CHANNEL_Y) 685848b8605Smrg#define D0_CHANNEL_XYZ (D0_CHANNEL_XY|D0_CHANNEL_Z) 686848b8605Smrg 687848b8605Smrg/* I915 Errata: Do not allow (xz), (xw), (xzw) combinations for diffuse 688848b8605Smrg * or specular declarations. 689848b8605Smrg * 690848b8605Smrg * For T dcls, only allow: (x), (xy), (xyz), (w), (xyzw) 691848b8605Smrg * 692848b8605Smrg * Must be zero for S (sampler) dcls 693848b8605Smrg */ 694848b8605Smrg#define D1_MBZ 0 695848b8605Smrg#define D2_MBZ 0 696848b8605Smrg 697848b8605Smrg 698848b8605Smrg 699848b8605Smrg/* p207 */ 700848b8605Smrg#define _3DSTATE_MAP_STATE (CMD_3D|(0x1d<<24)|(0x0<<16)) 701848b8605Smrg 702848b8605Smrg#define MS1_MAPMASK_SHIFT 0 703848b8605Smrg#define MS1_MAPMASK_MASK (0x8fff<<0) 704848b8605Smrg 705848b8605Smrg#define MS2_UNTRUSTED_SURFACE (1<<31) 706848b8605Smrg#define MS2_ADDRESS_MASK 0xfffffffc 707848b8605Smrg#define MS2_VERTICAL_LINE_STRIDE (1<<1) 708848b8605Smrg#define MS2_VERTICAL_OFFSET (1<<1) 709848b8605Smrg 710848b8605Smrg#define MS3_HEIGHT_SHIFT 21 711848b8605Smrg#define MS3_WIDTH_SHIFT 10 712848b8605Smrg#define MS3_PALETTE_SELECT (1<<9) 713848b8605Smrg#define MS3_MAPSURF_FORMAT_SHIFT 7 714848b8605Smrg#define MS3_MAPSURF_FORMAT_MASK (0x7<<7) 715848b8605Smrg#define MAPSURF_8BIT (1<<7) 716848b8605Smrg#define MAPSURF_16BIT (2<<7) 717848b8605Smrg#define MAPSURF_32BIT (3<<7) 718848b8605Smrg#define MAPSURF_422 (5<<7) 719848b8605Smrg#define MAPSURF_COMPRESSED (6<<7) 720848b8605Smrg#define MAPSURF_4BIT_INDEXED (7<<7) 721848b8605Smrg#define MS3_MT_FORMAT_MASK (0x7 << 3) 722848b8605Smrg#define MS3_MT_FORMAT_SHIFT 3 723848b8605Smrg#define MT_4BIT_P4 (7<<3) /* SURFACE_4BIT_INDEXED */ 724848b8605Smrg#define MT_8BIT_I8 (0<<3) /* SURFACE_8BIT */ 725848b8605Smrg#define MT_8BIT_L8 (1<<3) 726848b8605Smrg#define MT_8BIT_A4P4 (2<<3) 727848b8605Smrg#define MT_8BIT_P4A4 (3<<3) 728848b8605Smrg#define MT_8BIT_A8 (4<<3) 729848b8605Smrg#define MT_8BIT_MONO8 (5<<3) 730848b8605Smrg#define MT_16BIT_RGB565 (0<<3) /* SURFACE_16BIT */ 731848b8605Smrg#define MT_16BIT_ARGB1555 (1<<3) 732848b8605Smrg#define MT_16BIT_ARGB4444 (2<<3) 733848b8605Smrg#define MT_16BIT_AY88 (3<<3) 734848b8605Smrg#define MT_16BIT_88DVDU (5<<3) 735848b8605Smrg#define MT_16BIT_BUMP_655LDVDU (6<<3) 736848b8605Smrg#define MT_16BIT_I16 (7<<3) 737848b8605Smrg#define MT_16BIT_L16 (8<<3) 738848b8605Smrg#define MT_16BIT_A16 (9<<3) 739848b8605Smrg#define MT_32BIT_ARGB8888 (0<<3) /* SURFACE_32BIT */ 740848b8605Smrg#define MT_32BIT_ABGR8888 (1<<3) 741848b8605Smrg#define MT_32BIT_XRGB8888 (2<<3) 742848b8605Smrg#define MT_32BIT_XBGR8888 (3<<3) 743848b8605Smrg#define MT_32BIT_QWVU8888 (4<<3) 744848b8605Smrg#define MT_32BIT_AXVU8888 (5<<3) 745848b8605Smrg#define MT_32BIT_LXVU8888 (6<<3) 746848b8605Smrg#define MT_32BIT_XLVU8888 (7<<3) 747848b8605Smrg#define MT_32BIT_ARGB2101010 (8<<3) 748848b8605Smrg#define MT_32BIT_ABGR2101010 (9<<3) 749848b8605Smrg#define MT_32BIT_AWVU2101010 (0xA<<3) 750848b8605Smrg#define MT_32BIT_GR1616 (0xB<<3) 751848b8605Smrg#define MT_32BIT_VU1616 (0xC<<3) 752848b8605Smrg#define MT_32BIT_xI824 (0xD<<3) 753848b8605Smrg#define MT_32BIT_xA824 (0xE<<3) 754848b8605Smrg#define MT_32BIT_xL824 (0xF<<3) 755848b8605Smrg#define MT_422_YCRCB_SWAPY (0<<3) /* SURFACE_422 */ 756848b8605Smrg#define MT_422_YCRCB_NORMAL (1<<3) 757848b8605Smrg#define MT_422_YCRCB_SWAPUV (2<<3) 758848b8605Smrg#define MT_422_YCRCB_SWAPUVY (3<<3) 759848b8605Smrg#define MT_COMPRESS_DXT1 (0<<3) /* SURFACE_COMPRESSED */ 760848b8605Smrg#define MT_COMPRESS_DXT2_3 (1<<3) 761848b8605Smrg#define MT_COMPRESS_DXT4_5 (2<<3) 762848b8605Smrg#define MT_COMPRESS_FXT1 (3<<3) 763848b8605Smrg#define MT_COMPRESS_DXT1_RGB (4<<3) 764848b8605Smrg#define MS3_USE_FENCE_REGS (1<<2) 765848b8605Smrg#define MS3_TILED_SURFACE (1<<1) 766848b8605Smrg#define MS3_TILE_WALK_Y (1<<0) 767848b8605Smrg 768848b8605Smrg#define MS4_PITCH_SHIFT 21 769848b8605Smrg#define MS4_CUBE_FACE_ENA_NEGX (1<<20) 770848b8605Smrg#define MS4_CUBE_FACE_ENA_POSX (1<<19) 771848b8605Smrg#define MS4_CUBE_FACE_ENA_NEGY (1<<18) 772848b8605Smrg#define MS4_CUBE_FACE_ENA_POSY (1<<17) 773848b8605Smrg#define MS4_CUBE_FACE_ENA_NEGZ (1<<16) 774848b8605Smrg#define MS4_CUBE_FACE_ENA_POSZ (1<<15) 775848b8605Smrg#define MS4_CUBE_FACE_ENA_MASK (0x3f<<15) 776848b8605Smrg#define MS4_MAX_LOD_SHIFT 9 777848b8605Smrg#define MS4_MAX_LOD_MASK (0x3f<<9) 778848b8605Smrg#define MS4_MIP_LAYOUT_LEGACY (0<<8) 779848b8605Smrg#define MS4_MIP_LAYOUT_BELOW_LPT (0<<8) 780848b8605Smrg#define MS4_MIP_LAYOUT_RIGHT_LPT (1<<8) 781848b8605Smrg#define MS4_VOLUME_DEPTH_SHIFT 0 782848b8605Smrg#define MS4_VOLUME_DEPTH_MASK (0xff<<0) 783848b8605Smrg 784848b8605Smrg/* p244 */ 785848b8605Smrg#define _3DSTATE_SAMPLER_STATE (CMD_3D|(0x1d<<24)|(0x1<<16)) 786848b8605Smrg 787848b8605Smrg#define SS1_MAPMASK_SHIFT 0 788848b8605Smrg#define SS1_MAPMASK_MASK (0x8fff<<0) 789848b8605Smrg 790848b8605Smrg#define SS2_REVERSE_GAMMA_ENABLE (1<<31) 791848b8605Smrg#define SS2_PACKED_TO_PLANAR_ENABLE (1<<30) 792848b8605Smrg#define SS2_COLORSPACE_CONVERSION (1<<29) 793848b8605Smrg#define SS2_CHROMAKEY_SHIFT 27 794848b8605Smrg#define SS2_BASE_MIP_LEVEL_SHIFT 22 795848b8605Smrg#define SS2_BASE_MIP_LEVEL_MASK (0x1f<<22) 796848b8605Smrg#define SS2_MIP_FILTER_SHIFT 20 797848b8605Smrg#define SS2_MIP_FILTER_MASK (0x3<<20) 798848b8605Smrg#define MIPFILTER_NONE 0 799848b8605Smrg#define MIPFILTER_NEAREST 1 800848b8605Smrg#define MIPFILTER_LINEAR 3 801848b8605Smrg#define SS2_MAG_FILTER_SHIFT 17 802848b8605Smrg#define SS2_MAG_FILTER_MASK (0x7<<17) 803848b8605Smrg#define FILTER_NEAREST 0 804848b8605Smrg#define FILTER_LINEAR 1 805848b8605Smrg#define FILTER_ANISOTROPIC 2 806848b8605Smrg#define FILTER_4X4_1 3 807848b8605Smrg#define FILTER_4X4_2 4 808848b8605Smrg#define FILTER_4X4_FLAT 5 809848b8605Smrg#define FILTER_6X5_MONO 6 /* XXX - check */ 810848b8605Smrg#define SS2_MIN_FILTER_SHIFT 14 811848b8605Smrg#define SS2_MIN_FILTER_MASK (0x7<<14) 812848b8605Smrg#define SS2_LOD_BIAS_SHIFT 5 813848b8605Smrg#define SS2_LOD_BIAS_ONE (0x10<<5) 814848b8605Smrg#define SS2_LOD_BIAS_MASK (0x1ff<<5) 815848b8605Smrg/* Shadow requires: 816848b8605Smrg * MT_X8{I,L,A}24 or MT_{I,L,A}16 texture format 817848b8605Smrg * FILTER_4X4_x MIN and MAG filters 818848b8605Smrg */ 819848b8605Smrg#define SS2_SHADOW_ENABLE (1<<4) 820848b8605Smrg#define SS2_MAX_ANISO_MASK (1<<3) 821848b8605Smrg#define SS2_MAX_ANISO_2 (0<<3) 822848b8605Smrg#define SS2_MAX_ANISO_4 (1<<3) 823848b8605Smrg#define SS2_SHADOW_FUNC_SHIFT 0 824848b8605Smrg#define SS2_SHADOW_FUNC_MASK (0x7<<0) 825848b8605Smrg/* SS2_SHADOW_FUNC values: see COMPAREFUNC_* */ 826848b8605Smrg 827848b8605Smrg#define SS3_MIN_LOD_SHIFT 24 828848b8605Smrg#define SS3_MIN_LOD_ONE (0x10<<24) 829848b8605Smrg#define SS3_MIN_LOD_MASK (0xff<<24) 830848b8605Smrg#define SS3_KILL_PIXEL_ENABLE (1<<17) 831848b8605Smrg#define SS3_TCX_ADDR_MODE_SHIFT 12 832848b8605Smrg#define SS3_TCX_ADDR_MODE_MASK (0x7<<12) 833848b8605Smrg#define TEXCOORDMODE_WRAP 0 834848b8605Smrg#define TEXCOORDMODE_MIRROR 1 835848b8605Smrg#define TEXCOORDMODE_CLAMP_EDGE 2 836848b8605Smrg#define TEXCOORDMODE_CUBE 3 837848b8605Smrg#define TEXCOORDMODE_CLAMP_BORDER 4 838848b8605Smrg#define TEXCOORDMODE_MIRROR_ONCE 5 839848b8605Smrg#define SS3_TCY_ADDR_MODE_SHIFT 9 840848b8605Smrg#define SS3_TCY_ADDR_MODE_MASK (0x7<<9) 841848b8605Smrg#define SS3_TCZ_ADDR_MODE_SHIFT 6 842848b8605Smrg#define SS3_TCZ_ADDR_MODE_MASK (0x7<<6) 843848b8605Smrg#define SS3_NORMALIZED_COORDS (1<<5) 844848b8605Smrg#define SS3_TEXTUREMAP_INDEX_SHIFT 1 845848b8605Smrg#define SS3_TEXTUREMAP_INDEX_MASK (0xf<<1) 846848b8605Smrg#define SS3_DEINTERLACER_ENABLE (1<<0) 847848b8605Smrg 848848b8605Smrg#define SS4_BORDER_COLOR_MASK (~0) 849848b8605Smrg 850848b8605Smrg/* 3DSTATE_SPAN_STIPPLE, p258 851848b8605Smrg */ 852848b8605Smrg#define _3DSTATE_STIPPLE ((0x3<<29)|(0x1d<<24)|(0x83<<16)) 853848b8605Smrg#define ST1_ENABLE (1<<16) 854848b8605Smrg#define ST1_MASK (0xffff) 855848b8605Smrg 856848b8605Smrg#define _3DSTATE_DEFAULT_Z ((0x3<<29)|(0x1d<<24)|(0x98<<16)) 857848b8605Smrg#define _3DSTATE_DEFAULT_DIFFUSE ((0x3<<29)|(0x1d<<24)|(0x99<<16)) 858848b8605Smrg#define _3DSTATE_DEFAULT_SPECULAR ((0x3<<29)|(0x1d<<24)|(0x9a<<16)) 859848b8605Smrg 860848b8605Smrg 861848b8605Smrg#define MI_FLUSH ((0<<29)|(4<<23)) 862848b8605Smrg#define FLUSH_MAP_CACHE (1<<0) 863848b8605Smrg#define INHIBIT_FLUSH_RENDER_CACHE (1<<2) 864848b8605Smrg#define MI_NOOP 0 865848b8605Smrg 866848b8605Smrg 867848b8605Smrg#define CMD_3D (0x3<<29) 868848b8605Smrg 869848b8605Smrg 870848b8605Smrg#define _3DPRIMITIVE ((0x3<<29)|(0x1f<<24)) 871848b8605Smrg#define PRIM_INDIRECT (1<<23) 872848b8605Smrg#define PRIM_INLINE (0<<23) 873848b8605Smrg#define PRIM_INDIRECT_SEQUENTIAL (0<<17) 874848b8605Smrg#define PRIM_INDIRECT_ELTS (1<<17) 875848b8605Smrg 876848b8605Smrg#define PRIM3D_TRILIST (0x0<<18) 877848b8605Smrg#define PRIM3D_TRISTRIP (0x1<<18) 878848b8605Smrg#define PRIM3D_TRISTRIP_RVRSE (0x2<<18) 879848b8605Smrg#define PRIM3D_TRIFAN (0x3<<18) 880848b8605Smrg#define PRIM3D_POLY (0x4<<18) 881848b8605Smrg#define PRIM3D_LINELIST (0x5<<18) 882848b8605Smrg#define PRIM3D_LINESTRIP (0x6<<18) 883848b8605Smrg#define PRIM3D_RECTLIST (0x7<<18) 884848b8605Smrg#define PRIM3D_POINTLIST (0x8<<18) 885848b8605Smrg#define PRIM3D_DIB (0x9<<18) 886848b8605Smrg#define PRIM3D_MASK (0x1f<<18) 887848b8605Smrg 888848b8605Smrg#define I915PACKCOLOR4444(r,g,b,a) \ 889848b8605Smrg ((((a) & 0xf0) << 8) | (((r) & 0xf0) << 4) | ((g) & 0xf0) | ((b) >> 4)) 890848b8605Smrg 891848b8605Smrg#define I915PACKCOLOR1555(r,g,b,a) \ 892848b8605Smrg ((((r) & 0xf8) << 7) | (((g) & 0xf8) << 2) | (((b) & 0xf8) >> 3) | \ 893848b8605Smrg ((a) ? 0x8000 : 0)) 894848b8605Smrg 895848b8605Smrg#define I915PACKCOLOR565(r,g,b) \ 896848b8605Smrg ((((r) & 0xf8) << 8) | (((g) & 0xfc) << 3) | (((b) & 0xf8) >> 3)) 897848b8605Smrg 898848b8605Smrg#define I915PACKCOLOR8888(r,g,b,a) \ 899848b8605Smrg ((a<<24) | (r<<16) | (g<<8) | b) 900848b8605Smrg 901848b8605Smrg 902848b8605Smrg 903848b8605Smrg 904848b8605Smrg#define BR00_BITBLT_CLIENT 0x40000000 905848b8605Smrg#define BR00_OP_COLOR_BLT 0x10000000 906848b8605Smrg#define BR00_OP_SRC_COPY_BLT 0x10C00000 907848b8605Smrg#define BR13_SOLID_PATTERN 0x80000000 908848b8605Smrg 909848b8605Smrg#define XY_COLOR_BLT_CMD ((2<<29)|(0x50<<22)|0x4) 910848b8605Smrg#define XY_COLOR_BLT_WRITE_ALPHA (1<<21) 911848b8605Smrg#define XY_COLOR_BLT_WRITE_RGB (1<<20) 912848b8605Smrg 913848b8605Smrg#define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6) 914848b8605Smrg#define XY_SRC_COPY_BLT_WRITE_ALPHA (1<<21) 915848b8605Smrg#define XY_SRC_COPY_BLT_WRITE_RGB (1<<20) 916848b8605Smrg 917848b8605Smrg#define MI_WAIT_FOR_EVENT ((0x3<<23)) 918848b8605Smrg#define MI_WAIT_FOR_PLANE_B_FLIP (1<<6) 919848b8605Smrg#define MI_WAIT_FOR_PLANE_A_FLIP (1<<2) 920848b8605Smrg 921848b8605Smrg#define MI_BATCH_BUFFER (0x30<<23) 922848b8605Smrg#define MI_BATCH_BUFFER_START (0x31<<23) 923848b8605Smrg#define MI_BATCH_BUFFER_END (0xa<<23) 924848b8605Smrg 925848b8605Smrg 926848b8605Smrg 927848b8605Smrg#define COMPAREFUNC_ALWAYS 0 928848b8605Smrg#define COMPAREFUNC_NEVER 0x1 929848b8605Smrg#define COMPAREFUNC_LESS 0x2 930848b8605Smrg#define COMPAREFUNC_EQUAL 0x3 931848b8605Smrg#define COMPAREFUNC_LEQUAL 0x4 932848b8605Smrg#define COMPAREFUNC_GREATER 0x5 933848b8605Smrg#define COMPAREFUNC_NOTEQUAL 0x6 934848b8605Smrg#define COMPAREFUNC_GEQUAL 0x7 935848b8605Smrg 936848b8605Smrg#define STENCILOP_KEEP 0 937848b8605Smrg#define STENCILOP_ZERO 0x1 938848b8605Smrg#define STENCILOP_REPLACE 0x2 939848b8605Smrg#define STENCILOP_INCRSAT 0x3 940848b8605Smrg#define STENCILOP_DECRSAT 0x4 941848b8605Smrg#define STENCILOP_INCR 0x5 942848b8605Smrg#define STENCILOP_DECR 0x6 943848b8605Smrg#define STENCILOP_INVERT 0x7 944848b8605Smrg 945848b8605Smrg#define LOGICOP_CLEAR 0 946848b8605Smrg#define LOGICOP_NOR 0x1 947848b8605Smrg#define LOGICOP_AND_INV 0x2 948848b8605Smrg#define LOGICOP_COPY_INV 0x3 949848b8605Smrg#define LOGICOP_AND_RVRSE 0x4 950848b8605Smrg#define LOGICOP_INV 0x5 951848b8605Smrg#define LOGICOP_XOR 0x6 952848b8605Smrg#define LOGICOP_NAND 0x7 953848b8605Smrg#define LOGICOP_AND 0x8 954848b8605Smrg#define LOGICOP_EQUIV 0x9 955848b8605Smrg#define LOGICOP_NOOP 0xa 956848b8605Smrg#define LOGICOP_OR_INV 0xb 957848b8605Smrg#define LOGICOP_COPY 0xc 958848b8605Smrg#define LOGICOP_OR_RVRSE 0xd 959848b8605Smrg#define LOGICOP_OR 0xe 960848b8605Smrg#define LOGICOP_SET 0xf 961848b8605Smrg 962848b8605Smrg#define BLENDFACT_ZERO 0x01 963848b8605Smrg#define BLENDFACT_ONE 0x02 964848b8605Smrg#define BLENDFACT_SRC_COLR 0x03 965848b8605Smrg#define BLENDFACT_INV_SRC_COLR 0x04 966848b8605Smrg#define BLENDFACT_SRC_ALPHA 0x05 967848b8605Smrg#define BLENDFACT_INV_SRC_ALPHA 0x06 968848b8605Smrg#define BLENDFACT_DST_ALPHA 0x07 969848b8605Smrg#define BLENDFACT_INV_DST_ALPHA 0x08 970848b8605Smrg#define BLENDFACT_DST_COLR 0x09 971848b8605Smrg#define BLENDFACT_INV_DST_COLR 0x0a 972848b8605Smrg#define BLENDFACT_SRC_ALPHA_SATURATE 0x0b 973848b8605Smrg#define BLENDFACT_CONST_COLOR 0x0c 974848b8605Smrg#define BLENDFACT_INV_CONST_COLOR 0x0d 975848b8605Smrg#define BLENDFACT_CONST_ALPHA 0x0e 976848b8605Smrg#define BLENDFACT_INV_CONST_ALPHA 0x0f 977848b8605Smrg#define BLENDFACT_MASK 0x0f 978848b8605Smrg 979848b8605Smrg#define PCI_CHIP_I915_G 0x2582 980848b8605Smrg#define PCI_CHIP_I915_GM 0x2592 981848b8605Smrg#define PCI_CHIP_I945_G 0x2772 982848b8605Smrg#define PCI_CHIP_I945_GM 0x27A2 983848b8605Smrg#define PCI_CHIP_I945_GME 0x27AE 984848b8605Smrg#define PCI_CHIP_G33_G 0x29C2 985848b8605Smrg#define PCI_CHIP_Q35_G 0x29B2 986848b8605Smrg#define PCI_CHIP_Q33_G 0x29D2 987848b8605Smrg#define PCI_CHIP_PINEVIEW_G 0xA001 988848b8605Smrg#define PCI_CHIP_PINEVIEW_M 0xA011 989848b8605Smrg 990848b8605Smrg 991848b8605Smrg#endif 992