i830_3d.c revision 42542f5f
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#ifdef HAVE_CONFIG_H 29#include "config.h" 30#endif 31 32#include "xorg-server.h" 33#include "xf86.h" 34#include "intel.h" 35 36#include "i830_reg.h" 37 38void I830EmitInvarientState(ScrnInfoPtr scrn) 39{ 40 intel_screen_private *intel = intel_get_screen_private(scrn); 41 42 assert(intel->in_batch_atomic); 43 44 OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(0)); 45 OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(1)); 46 OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(2)); 47 OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(3)); 48 49 OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD); 50 OUT_BATCH(0); 51 52 OUT_BATCH(_3DSTATE_DFLT_SPEC_CMD); 53 OUT_BATCH(0); 54 55 OUT_BATCH(_3DSTATE_DFLT_Z_CMD); 56 OUT_BATCH(0); 57 58 OUT_BATCH(_3DSTATE_FOG_MODE_CMD); 59 OUT_BATCH(FOGFUNC_ENABLE | 60 FOG_LINEAR_CONST | FOGSRC_INDEX_Z | ENABLE_FOG_DENSITY); 61 OUT_BATCH(0); 62 OUT_BATCH(0); 63 64 OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 65 MAP_UNIT(0) | 66 DISABLE_TEX_STREAM_BUMP | 67 ENABLE_TEX_STREAM_COORD_SET | 68 TEX_STREAM_COORD_SET(0) | 69 ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(0)); 70 OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 71 MAP_UNIT(1) | 72 DISABLE_TEX_STREAM_BUMP | 73 ENABLE_TEX_STREAM_COORD_SET | 74 TEX_STREAM_COORD_SET(1) | 75 ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(1)); 76 OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 77 MAP_UNIT(2) | 78 DISABLE_TEX_STREAM_BUMP | 79 ENABLE_TEX_STREAM_COORD_SET | 80 TEX_STREAM_COORD_SET(2) | 81 ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(2)); 82 OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 83 MAP_UNIT(3) | 84 DISABLE_TEX_STREAM_BUMP | 85 ENABLE_TEX_STREAM_COORD_SET | 86 TEX_STREAM_COORD_SET(3) | 87 ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(3)); 88 89 OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 90 OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(0)); 91 OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 92 OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(1)); 93 OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 94 OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(2)); 95 OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 96 OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(3)); 97 98 OUT_BATCH(_3DSTATE_RASTER_RULES_CMD | 99 ENABLE_POINT_RASTER_RULE | 100 OGL_POINT_RASTER_RULE | 101 ENABLE_LINE_STRIP_PROVOKE_VRTX | 102 ENABLE_TRI_FAN_PROVOKE_VRTX | 103 ENABLE_TRI_STRIP_PROVOKE_VRTX | 104 LINE_STRIP_PROVOKE_VRTX(1) | 105 TRI_FAN_PROVOKE_VRTX(2) | TRI_STRIP_PROVOKE_VRTX(2)); 106 107 OUT_BATCH(_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT); 108 109 OUT_BATCH(_3DSTATE_SCISSOR_RECT_0_CMD); 110 OUT_BATCH(0); 111 OUT_BATCH(0); 112 113 OUT_BATCH(_3DSTATE_VERTEX_TRANSFORM); 114 OUT_BATCH(DISABLE_VIEWPORT_TRANSFORM | DISABLE_PERSPECTIVE_DIVIDE); 115 116 OUT_BATCH(_3DSTATE_W_STATE_CMD); 117 OUT_BATCH(MAGIC_W_STATE_DWORD1); 118 OUT_BATCH(0x3f800000 /* 1.0 in IEEE float */ ); 119 120 OUT_BATCH(_3DSTATE_COLOR_FACTOR_CMD); 121 OUT_BATCH(0x80808080); /* .5 required in alpha for GL_DOT3_RGBA_EXT */ 122 123 OUT_BATCH(_3DSTATE_MAP_COORD_SETBIND_CMD); 124 OUT_BATCH(TEXBIND_SET3(TEXCOORDSRC_VTXSET_3) | 125 TEXBIND_SET2(TEXCOORDSRC_VTXSET_2) | 126 TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) | 127 TEXBIND_SET0(TEXCOORDSRC_VTXSET_0)); 128 129 /* copy from mesa */ 130 OUT_BATCH(_3DSTATE_INDPT_ALPHA_BLEND_CMD | 131 DISABLE_INDPT_ALPHA_BLEND | 132 ENABLE_ALPHA_BLENDFUNC | ABLENDFUNC_ADD); 133 134 OUT_BATCH(_3DSTATE_FOG_COLOR_CMD | 135 FOG_COLOR_RED(0) | FOG_COLOR_GREEN(0) | FOG_COLOR_BLUE(0)); 136 137 OUT_BATCH(_3DSTATE_CONST_BLEND_COLOR_CMD); 138 OUT_BATCH(0); 139 140 OUT_BATCH(_3DSTATE_MODES_1_CMD | 141 ENABLE_COLR_BLND_FUNC | 142 BLENDFUNC_ADD | 143 ENABLE_SRC_BLND_FACTOR | 144 SRC_BLND_FACT(BLENDFACTOR_ONE) | 145 ENABLE_DST_BLND_FACTOR | DST_BLND_FACT(BLENDFACTOR_ZERO)); 146 OUT_BATCH(_3DSTATE_MODES_2_CMD | ENABLE_GLOBAL_DEPTH_BIAS | GLOBAL_DEPTH_BIAS(0) | ENABLE_ALPHA_TEST_FUNC | ALPHA_TEST_FUNC(0) | /* always */ 147 ALPHA_REF_VALUE(0)); 148 OUT_BATCH(_3DSTATE_MODES_3_CMD | 149 ENABLE_DEPTH_TEST_FUNC | 150 DEPTH_TEST_FUNC(0x2) | /* COMPAREFUNC_LESS */ 151 ENABLE_ALPHA_SHADE_MODE | 152 ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) | 153 ENABLE_FOG_SHADE_MODE | 154 FOG_SHADE_MODE(SHADE_MODE_LINEAR) | 155 ENABLE_SPEC_SHADE_MODE | 156 SPEC_SHADE_MODE(SHADE_MODE_LINEAR) | 157 ENABLE_COLOR_SHADE_MODE | 158 COLOR_SHADE_MODE(SHADE_MODE_LINEAR) | 159 ENABLE_CULL_MODE | CULLMODE_NONE); 160 161 OUT_BATCH(_3DSTATE_MODES_4_CMD | 162 ENABLE_LOGIC_OP_FUNC | 163 LOGIC_OP_FUNC(LOGICOP_COPY) | 164 ENABLE_STENCIL_TEST_MASK | 165 STENCIL_TEST_MASK(0xff) | 166 ENABLE_STENCIL_WRITE_MASK | STENCIL_WRITE_MASK(0xff)); 167 168 OUT_BATCH(_3DSTATE_STENCIL_TEST_CMD | 169 ENABLE_STENCIL_PARMS | 170 STENCIL_FAIL_OP(0) | /* STENCILOP_KEEP */ 171 STENCIL_PASS_DEPTH_FAIL_OP(0) | /* STENCILOP_KEEP */ 172 STENCIL_PASS_DEPTH_PASS_OP(0) | /* STENCILOP_KEEP */ 173 ENABLE_STENCIL_TEST_FUNC | 174 STENCIL_TEST_FUNC(0) | /* COMPAREFUNC_ALWAYS */ 175 ENABLE_STENCIL_REF_VALUE | 176 STENCIL_REF_VALUE(0)); 177 178 OUT_BATCH(_3DSTATE_MODES_5_CMD | 179 FLUSH_TEXTURE_CACHE | 180 ENABLE_SPRITE_POINT_TEX | SPRITE_POINT_TEX_OFF | 181 ENABLE_FIXED_LINE_WIDTH | FIXED_LINE_WIDTH(0x2) | /* 1.0 */ 182 ENABLE_FIXED_POINT_WIDTH | FIXED_POINT_WIDTH(1)); 183 184 OUT_BATCH(_3DSTATE_ENABLES_1_CMD | 185 DISABLE_LOGIC_OP | 186 DISABLE_STENCIL_TEST | 187 DISABLE_DEPTH_BIAS | 188 DISABLE_SPEC_ADD | 189 DISABLE_FOG | 190 DISABLE_ALPHA_TEST | ENABLE_COLOR_BLEND | DISABLE_DEPTH_TEST); 191 OUT_BATCH(_3DSTATE_ENABLES_2_CMD | 192 DISABLE_STENCIL_WRITE | 193 ENABLE_TEX_CACHE | 194 DISABLE_DITHER | 195 ENABLE_COLOR_MASK | ENABLE_COLOR_WRITE | DISABLE_DEPTH_WRITE); 196 197 OUT_BATCH(_3DSTATE_STIPPLE); 198 199 /* Set default blend state */ 200 OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) | 201 TEXPIPE_COLOR | 202 ENABLE_TEXOUTPUT_WRT_SEL | 203 TEXOP_OUTPUT_CURRENT | 204 DISABLE_TEX_CNTRL_STAGE | 205 TEXOP_SCALE_1X | 206 TEXOP_MODIFY_PARMS | TEXOP_LAST_STAGE | TEXBLENDOP_ARG1); 207 OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) | 208 TEXPIPE_ALPHA | 209 ENABLE_TEXOUTPUT_WRT_SEL | 210 TEXOP_OUTPUT_CURRENT | 211 TEXOP_SCALE_1X | TEXOP_MODIFY_PARMS | TEXBLENDOP_ARG1); 212 OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) | 213 TEXPIPE_COLOR | 214 TEXBLEND_ARG1 | 215 TEXBLENDARG_MODIFY_PARMS | TEXBLENDARG_DIFFUSE); 216 OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) | 217 TEXPIPE_ALPHA | 218 TEXBLEND_ARG1 | 219 TEXBLENDARG_MODIFY_PARMS | TEXBLENDARG_DIFFUSE); 220 221 OUT_BATCH(_3DSTATE_AA_CMD | 222 AA_LINE_ECAAR_WIDTH_ENABLE | 223 AA_LINE_ECAAR_WIDTH_1_0 | 224 AA_LINE_REGION_WIDTH_ENABLE | 225 AA_LINE_REGION_WIDTH_1_0 | AA_LINE_DISABLE); 226} 227