i830_3d.c revision fa225cbc
1fa225cbcSrjs/************************************************************************** 2fa225cbcSrjs * 3fa225cbcSrjs * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 4fa225cbcSrjs * All Rights Reserved. 5fa225cbcSrjs * 6fa225cbcSrjs * Permission is hereby granted, free of charge, to any person obtaining a 7fa225cbcSrjs * copy of this software and associated documentation files (the 8fa225cbcSrjs * "Software"), to deal in the Software without restriction, including 9fa225cbcSrjs * without limitation the rights to use, copy, modify, merge, publish, 10fa225cbcSrjs * distribute, sub license, and/or sell copies of the Software, and to 11fa225cbcSrjs * permit persons to whom the Software is furnished to do so, subject to 12fa225cbcSrjs * the following conditions: 13fa225cbcSrjs * 14fa225cbcSrjs * The above copyright notice and this permission notice (including the 15fa225cbcSrjs * next paragraph) shall be included in all copies or substantial portions 16fa225cbcSrjs * of the Software. 17fa225cbcSrjs * 18fa225cbcSrjs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19fa225cbcSrjs * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20fa225cbcSrjs * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21fa225cbcSrjs * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22fa225cbcSrjs * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23fa225cbcSrjs * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24fa225cbcSrjs * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25fa225cbcSrjs * 26fa225cbcSrjs **************************************************************************/ 27fa225cbcSrjs 28fa225cbcSrjs#ifdef HAVE_CONFIG_H 29fa225cbcSrjs#include "config.h" 30fa225cbcSrjs#endif 31fa225cbcSrjs 32fa225cbcSrjs#include "xf86.h" 33fa225cbcSrjs#include "i830.h" 34fa225cbcSrjs 35fa225cbcSrjs#include "i830_reg.h" 36fa225cbcSrjs 37fa225cbcSrjsvoid I830EmitInvarientState( ScrnInfoPtr pScrn ) 38fa225cbcSrjs{ 39fa225cbcSrjs I830Ptr pI830 = I830PTR(pScrn); 40fa225cbcSrjs 41fa225cbcSrjs BEGIN_BATCH(58); 42fa225cbcSrjs 43fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(0)); 44fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(1)); 45fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(2)); 46fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(3)); 47fa225cbcSrjs 48fa225cbcSrjs OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD); 49fa225cbcSrjs OUT_BATCH(0); 50fa225cbcSrjs 51fa225cbcSrjs OUT_BATCH(_3DSTATE_DFLT_SPEC_CMD); 52fa225cbcSrjs OUT_BATCH(0); 53fa225cbcSrjs 54fa225cbcSrjs OUT_BATCH(_3DSTATE_DFLT_Z_CMD); 55fa225cbcSrjs OUT_BATCH(0); 56fa225cbcSrjs 57fa225cbcSrjs OUT_BATCH(_3DSTATE_FOG_MODE_CMD); 58fa225cbcSrjs OUT_BATCH(FOGFUNC_ENABLE | 59fa225cbcSrjs FOG_LINEAR_CONST | 60fa225cbcSrjs FOGSRC_INDEX_Z | 61fa225cbcSrjs ENABLE_FOG_DENSITY); 62fa225cbcSrjs OUT_BATCH(0); 63fa225cbcSrjs OUT_BATCH(0); 64fa225cbcSrjs 65fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 66fa225cbcSrjs MAP_UNIT(0) | 67fa225cbcSrjs DISABLE_TEX_STREAM_BUMP | 68fa225cbcSrjs ENABLE_TEX_STREAM_COORD_SET | 69fa225cbcSrjs TEX_STREAM_COORD_SET(0) | 70fa225cbcSrjs ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(0)); 71fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 72fa225cbcSrjs MAP_UNIT(1) | 73fa225cbcSrjs DISABLE_TEX_STREAM_BUMP | 74fa225cbcSrjs ENABLE_TEX_STREAM_COORD_SET | 75fa225cbcSrjs TEX_STREAM_COORD_SET(1) | 76fa225cbcSrjs ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(1)); 77fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 78fa225cbcSrjs MAP_UNIT(2) | 79fa225cbcSrjs DISABLE_TEX_STREAM_BUMP | 80fa225cbcSrjs ENABLE_TEX_STREAM_COORD_SET | 81fa225cbcSrjs TEX_STREAM_COORD_SET(2) | 82fa225cbcSrjs ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(2)); 83fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 84fa225cbcSrjs MAP_UNIT(3) | 85fa225cbcSrjs DISABLE_TEX_STREAM_BUMP | 86fa225cbcSrjs ENABLE_TEX_STREAM_COORD_SET | 87fa225cbcSrjs TEX_STREAM_COORD_SET(3) | 88fa225cbcSrjs ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(3)); 89fa225cbcSrjs 90fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 91fa225cbcSrjs OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(0)); 92fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 93fa225cbcSrjs OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(1)); 94fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 95fa225cbcSrjs OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(2)); 96fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 97fa225cbcSrjs OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(3)); 98fa225cbcSrjs 99fa225cbcSrjs OUT_BATCH(_3DSTATE_RASTER_RULES_CMD | 100fa225cbcSrjs ENABLE_POINT_RASTER_RULE | 101fa225cbcSrjs OGL_POINT_RASTER_RULE | 102fa225cbcSrjs ENABLE_LINE_STRIP_PROVOKE_VRTX | 103fa225cbcSrjs ENABLE_TRI_FAN_PROVOKE_VRTX | 104fa225cbcSrjs ENABLE_TRI_STRIP_PROVOKE_VRTX | 105fa225cbcSrjs LINE_STRIP_PROVOKE_VRTX(1) | 106fa225cbcSrjs TRI_FAN_PROVOKE_VRTX(2) | 107fa225cbcSrjs TRI_STRIP_PROVOKE_VRTX(2)); 108fa225cbcSrjs 109fa225cbcSrjs OUT_BATCH(_3DSTATE_SCISSOR_ENABLE_CMD | 110fa225cbcSrjs DISABLE_SCISSOR_RECT); 111fa225cbcSrjs 112fa225cbcSrjs OUT_BATCH(_3DSTATE_SCISSOR_RECT_0_CMD); 113fa225cbcSrjs OUT_BATCH(0); 114fa225cbcSrjs OUT_BATCH(0); 115fa225cbcSrjs 116fa225cbcSrjs OUT_BATCH(_3DSTATE_VERTEX_TRANSFORM); 117fa225cbcSrjs OUT_BATCH(DISABLE_VIEWPORT_TRANSFORM | DISABLE_PERSPECTIVE_DIVIDE); 118fa225cbcSrjs 119fa225cbcSrjs OUT_BATCH(_3DSTATE_W_STATE_CMD); 120fa225cbcSrjs OUT_BATCH(MAGIC_W_STATE_DWORD1); 121fa225cbcSrjs OUT_BATCH(0x3f800000 /* 1.0 in IEEE float */ ); 122fa225cbcSrjs 123fa225cbcSrjs OUT_BATCH(_3DSTATE_COLOR_FACTOR_CMD); 124fa225cbcSrjs OUT_BATCH(0x80808080); /* .5 required in alpha for GL_DOT3_RGBA_EXT */ 125fa225cbcSrjs 126fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_COORD_SETBIND_CMD); 127fa225cbcSrjs OUT_BATCH(TEXBIND_SET3(TEXCOORDSRC_VTXSET_3) | 128fa225cbcSrjs TEXBIND_SET2(TEXCOORDSRC_VTXSET_2) | 129fa225cbcSrjs TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) | 130fa225cbcSrjs TEXBIND_SET0(TEXCOORDSRC_VTXSET_0)); 131fa225cbcSrjs 132fa225cbcSrjs /* copy from mesa */ 133fa225cbcSrjs OUT_BATCH(_3DSTATE_INDPT_ALPHA_BLEND_CMD | 134fa225cbcSrjs DISABLE_INDPT_ALPHA_BLEND | 135fa225cbcSrjs ENABLE_ALPHA_BLENDFUNC | 136fa225cbcSrjs ABLENDFUNC_ADD); 137fa225cbcSrjs 138fa225cbcSrjs OUT_BATCH(_3DSTATE_FOG_COLOR_CMD | 139fa225cbcSrjs FOG_COLOR_RED(0) | 140fa225cbcSrjs FOG_COLOR_GREEN(0) | 141fa225cbcSrjs FOG_COLOR_BLUE(0)); 142fa225cbcSrjs 143fa225cbcSrjs OUT_BATCH(_3DSTATE_CONST_BLEND_COLOR_CMD); 144fa225cbcSrjs OUT_BATCH(0); 145fa225cbcSrjs 146fa225cbcSrjs OUT_BATCH(_3DSTATE_MODES_1_CMD | 147fa225cbcSrjs ENABLE_COLR_BLND_FUNC | 148fa225cbcSrjs BLENDFUNC_ADD | 149fa225cbcSrjs ENABLE_SRC_BLND_FACTOR | 150fa225cbcSrjs SRC_BLND_FACT(BLENDFACTOR_ONE) | 151fa225cbcSrjs ENABLE_DST_BLND_FACTOR | 152fa225cbcSrjs DST_BLND_FACT(BLENDFACTOR_ZERO)); 153fa225cbcSrjs OUT_BATCH(_3DSTATE_MODES_2_CMD | 154fa225cbcSrjs ENABLE_GLOBAL_DEPTH_BIAS | 155fa225cbcSrjs GLOBAL_DEPTH_BIAS(0) | 156fa225cbcSrjs ENABLE_ALPHA_TEST_FUNC| 157fa225cbcSrjs ALPHA_TEST_FUNC(0) | /* always */ 158fa225cbcSrjs ALPHA_REF_VALUE(0)); 159fa225cbcSrjs OUT_BATCH(_3DSTATE_MODES_3_CMD | 160fa225cbcSrjs ENABLE_DEPTH_TEST_FUNC | 161fa225cbcSrjs DEPTH_TEST_FUNC(0x2) | /* COMPAREFUNC_LESS */ 162fa225cbcSrjs ENABLE_ALPHA_SHADE_MODE | 163fa225cbcSrjs ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) | 164fa225cbcSrjs ENABLE_FOG_SHADE_MODE | 165fa225cbcSrjs FOG_SHADE_MODE(SHADE_MODE_LINEAR) | 166fa225cbcSrjs ENABLE_SPEC_SHADE_MODE | 167fa225cbcSrjs SPEC_SHADE_MODE(SHADE_MODE_LINEAR) | 168fa225cbcSrjs ENABLE_COLOR_SHADE_MODE | 169fa225cbcSrjs COLOR_SHADE_MODE(SHADE_MODE_LINEAR) | 170fa225cbcSrjs ENABLE_CULL_MODE | CULLMODE_NONE); 171fa225cbcSrjs 172fa225cbcSrjs OUT_BATCH(_3DSTATE_MODES_4_CMD | 173fa225cbcSrjs ENABLE_LOGIC_OP_FUNC | 174fa225cbcSrjs LOGIC_OP_FUNC(LOGICOP_COPY) | 175fa225cbcSrjs ENABLE_STENCIL_TEST_MASK | 176fa225cbcSrjs STENCIL_TEST_MASK(0xff) | 177fa225cbcSrjs ENABLE_STENCIL_WRITE_MASK | 178fa225cbcSrjs STENCIL_WRITE_MASK(0xff)); 179fa225cbcSrjs 180fa225cbcSrjs OUT_BATCH(_3DSTATE_STENCIL_TEST_CMD | 181fa225cbcSrjs ENABLE_STENCIL_PARMS | 182fa225cbcSrjs STENCIL_FAIL_OP(0) | /* STENCILOP_KEEP */ 183fa225cbcSrjs STENCIL_PASS_DEPTH_FAIL_OP(0) | /* STENCILOP_KEEP */ 184fa225cbcSrjs STENCIL_PASS_DEPTH_PASS_OP(0) | /* STENCILOP_KEEP */ 185fa225cbcSrjs ENABLE_STENCIL_TEST_FUNC | 186fa225cbcSrjs STENCIL_TEST_FUNC(0) | /* COMPAREFUNC_ALWAYS */ 187fa225cbcSrjs ENABLE_STENCIL_REF_VALUE | 188fa225cbcSrjs STENCIL_REF_VALUE(0)); 189fa225cbcSrjs 190fa225cbcSrjs OUT_BATCH(_3DSTATE_MODES_5_CMD | 191fa225cbcSrjs FLUSH_TEXTURE_CACHE | 192fa225cbcSrjs ENABLE_SPRITE_POINT_TEX | 193fa225cbcSrjs SPRITE_POINT_TEX_OFF | 194fa225cbcSrjs ENABLE_FIXED_LINE_WIDTH | 195fa225cbcSrjs FIXED_LINE_WIDTH(0x2) | /* 1.0 */ 196fa225cbcSrjs ENABLE_FIXED_POINT_WIDTH | 197fa225cbcSrjs FIXED_POINT_WIDTH(1)); 198fa225cbcSrjs 199fa225cbcSrjs OUT_BATCH(_3DSTATE_ENABLES_1_CMD | 200fa225cbcSrjs DISABLE_LOGIC_OP | 201fa225cbcSrjs DISABLE_STENCIL_TEST | 202fa225cbcSrjs DISABLE_DEPTH_BIAS | 203fa225cbcSrjs DISABLE_SPEC_ADD | 204fa225cbcSrjs DISABLE_FOG | 205fa225cbcSrjs DISABLE_ALPHA_TEST | 206fa225cbcSrjs ENABLE_COLOR_BLEND | 207fa225cbcSrjs DISABLE_DEPTH_TEST); 208fa225cbcSrjs OUT_BATCH(_3DSTATE_ENABLES_2_CMD | 209fa225cbcSrjs DISABLE_STENCIL_WRITE | 210fa225cbcSrjs ENABLE_TEX_CACHE | 211fa225cbcSrjs DISABLE_DITHER | 212fa225cbcSrjs ENABLE_COLOR_MASK | 213fa225cbcSrjs ENABLE_COLOR_WRITE | 214fa225cbcSrjs DISABLE_DEPTH_WRITE); 215fa225cbcSrjs 216fa225cbcSrjs OUT_BATCH(_3DSTATE_STIPPLE); 217fa225cbcSrjs 218fa225cbcSrjs /* Set default blend state */ 219fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) | 220fa225cbcSrjs TEXPIPE_COLOR | 221fa225cbcSrjs ENABLE_TEXOUTPUT_WRT_SEL | 222fa225cbcSrjs TEXOP_OUTPUT_CURRENT | 223fa225cbcSrjs DISABLE_TEX_CNTRL_STAGE | 224fa225cbcSrjs TEXOP_SCALE_1X | 225fa225cbcSrjs TEXOP_MODIFY_PARMS | 226fa225cbcSrjs TEXOP_LAST_STAGE | TEXBLENDOP_ARG1); 227fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) | 228fa225cbcSrjs TEXPIPE_ALPHA | 229fa225cbcSrjs ENABLE_TEXOUTPUT_WRT_SEL | 230fa225cbcSrjs TEXOP_OUTPUT_CURRENT | 231fa225cbcSrjs TEXOP_SCALE_1X | 232fa225cbcSrjs TEXOP_MODIFY_PARMS | TEXBLENDOP_ARG1); 233fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) | 234fa225cbcSrjs TEXPIPE_COLOR | 235fa225cbcSrjs TEXBLEND_ARG1 | 236fa225cbcSrjs TEXBLENDARG_MODIFY_PARMS | 237fa225cbcSrjs TEXBLENDARG_DIFFUSE); 238fa225cbcSrjs OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) | 239fa225cbcSrjs TEXPIPE_ALPHA | 240fa225cbcSrjs TEXBLEND_ARG1 | 241fa225cbcSrjs TEXBLENDARG_MODIFY_PARMS | 242fa225cbcSrjs TEXBLENDARG_DIFFUSE); 243fa225cbcSrjs 244fa225cbcSrjs OUT_BATCH(_3DSTATE_AA_CMD | 245fa225cbcSrjs AA_LINE_ECAAR_WIDTH_ENABLE | 246fa225cbcSrjs AA_LINE_ECAAR_WIDTH_1_0 | 247fa225cbcSrjs AA_LINE_REGION_WIDTH_ENABLE | 248fa225cbcSrjs AA_LINE_REGION_WIDTH_1_0 | 249fa225cbcSrjs AA_LINE_DISABLE); 250fa225cbcSrjs 251fa225cbcSrjs ADVANCE_BATCH(); 252fa225cbcSrjs} 253