103b705cfSriastradh/************************************************************************** 203b705cfSriastradh * 303b705cfSriastradh * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 403b705cfSriastradh * All Rights Reserved. 503b705cfSriastradh * 603b705cfSriastradh * Permission is hereby granted, free of charge, to any person obtaining a 703b705cfSriastradh * copy of this software and associated documentation files (the 803b705cfSriastradh * "Software"), to deal in the Software without restriction, including 903b705cfSriastradh * without limitation the rights to use, copy, modify, merge, publish, 1003b705cfSriastradh * distribute, sub license, and/or sell copies of the Software, and to 1103b705cfSriastradh * permit persons to whom the Software is furnished to do so, subject to 1203b705cfSriastradh * the following conditions: 1303b705cfSriastradh * 1403b705cfSriastradh * The above copyright notice and this permission notice (including the 1503b705cfSriastradh * next paragraph) shall be included in all copies or substantial portions 1603b705cfSriastradh * of the Software. 1703b705cfSriastradh * 1803b705cfSriastradh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1903b705cfSriastradh * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2003b705cfSriastradh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2103b705cfSriastradh * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2203b705cfSriastradh * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2303b705cfSriastradh * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2403b705cfSriastradh * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2503b705cfSriastradh * 2603b705cfSriastradh **************************************************************************/ 2703b705cfSriastradh 2803b705cfSriastradh#ifdef HAVE_CONFIG_H 2903b705cfSriastradh#include "config.h" 3003b705cfSriastradh#endif 3103b705cfSriastradh 3242542f5fSchristos#include "xorg-server.h" 3303b705cfSriastradh#include "xf86.h" 3403b705cfSriastradh#include "intel.h" 3513496ba1Ssnj#include "intel_uxa.h" 3603b705cfSriastradh 3703b705cfSriastradh#include "i830_reg.h" 3803b705cfSriastradh 3903b705cfSriastradhvoid I830EmitInvarientState(ScrnInfoPtr scrn) 4003b705cfSriastradh{ 4103b705cfSriastradh intel_screen_private *intel = intel_get_screen_private(scrn); 4203b705cfSriastradh 4303b705cfSriastradh assert(intel->in_batch_atomic); 4403b705cfSriastradh 4503b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(0)); 4603b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(1)); 4703b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(2)); 4803b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(3)); 4903b705cfSriastradh 5003b705cfSriastradh OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD); 5103b705cfSriastradh OUT_BATCH(0); 5203b705cfSriastradh 5303b705cfSriastradh OUT_BATCH(_3DSTATE_DFLT_SPEC_CMD); 5403b705cfSriastradh OUT_BATCH(0); 5503b705cfSriastradh 5603b705cfSriastradh OUT_BATCH(_3DSTATE_DFLT_Z_CMD); 5703b705cfSriastradh OUT_BATCH(0); 5803b705cfSriastradh 5903b705cfSriastradh OUT_BATCH(_3DSTATE_FOG_MODE_CMD); 6003b705cfSriastradh OUT_BATCH(FOGFUNC_ENABLE | 6103b705cfSriastradh FOG_LINEAR_CONST | FOGSRC_INDEX_Z | ENABLE_FOG_DENSITY); 6203b705cfSriastradh OUT_BATCH(0); 6303b705cfSriastradh OUT_BATCH(0); 6403b705cfSriastradh 6503b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 6603b705cfSriastradh MAP_UNIT(0) | 6703b705cfSriastradh DISABLE_TEX_STREAM_BUMP | 6803b705cfSriastradh ENABLE_TEX_STREAM_COORD_SET | 6903b705cfSriastradh TEX_STREAM_COORD_SET(0) | 7003b705cfSriastradh ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(0)); 7103b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 7203b705cfSriastradh MAP_UNIT(1) | 7303b705cfSriastradh DISABLE_TEX_STREAM_BUMP | 7403b705cfSriastradh ENABLE_TEX_STREAM_COORD_SET | 7503b705cfSriastradh TEX_STREAM_COORD_SET(1) | 7603b705cfSriastradh ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(1)); 7703b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 7803b705cfSriastradh MAP_UNIT(2) | 7903b705cfSriastradh DISABLE_TEX_STREAM_BUMP | 8003b705cfSriastradh ENABLE_TEX_STREAM_COORD_SET | 8103b705cfSriastradh TEX_STREAM_COORD_SET(2) | 8203b705cfSriastradh ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(2)); 8303b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD | 8403b705cfSriastradh MAP_UNIT(3) | 8503b705cfSriastradh DISABLE_TEX_STREAM_BUMP | 8603b705cfSriastradh ENABLE_TEX_STREAM_COORD_SET | 8703b705cfSriastradh TEX_STREAM_COORD_SET(3) | 8803b705cfSriastradh ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(3)); 8903b705cfSriastradh 9003b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 9103b705cfSriastradh OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(0)); 9203b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 9303b705cfSriastradh OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(1)); 9403b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 9503b705cfSriastradh OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(2)); 9603b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM); 9703b705cfSriastradh OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(3)); 9803b705cfSriastradh 9903b705cfSriastradh OUT_BATCH(_3DSTATE_RASTER_RULES_CMD | 10003b705cfSriastradh ENABLE_POINT_RASTER_RULE | 10103b705cfSriastradh OGL_POINT_RASTER_RULE | 10203b705cfSriastradh ENABLE_LINE_STRIP_PROVOKE_VRTX | 10303b705cfSriastradh ENABLE_TRI_FAN_PROVOKE_VRTX | 10403b705cfSriastradh ENABLE_TRI_STRIP_PROVOKE_VRTX | 10503b705cfSriastradh LINE_STRIP_PROVOKE_VRTX(1) | 10603b705cfSriastradh TRI_FAN_PROVOKE_VRTX(2) | TRI_STRIP_PROVOKE_VRTX(2)); 10703b705cfSriastradh 10803b705cfSriastradh OUT_BATCH(_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT); 10903b705cfSriastradh 11003b705cfSriastradh OUT_BATCH(_3DSTATE_SCISSOR_RECT_0_CMD); 11103b705cfSriastradh OUT_BATCH(0); 11203b705cfSriastradh OUT_BATCH(0); 11303b705cfSriastradh 11403b705cfSriastradh OUT_BATCH(_3DSTATE_VERTEX_TRANSFORM); 11503b705cfSriastradh OUT_BATCH(DISABLE_VIEWPORT_TRANSFORM | DISABLE_PERSPECTIVE_DIVIDE); 11603b705cfSriastradh 11703b705cfSriastradh OUT_BATCH(_3DSTATE_W_STATE_CMD); 11803b705cfSriastradh OUT_BATCH(MAGIC_W_STATE_DWORD1); 11903b705cfSriastradh OUT_BATCH(0x3f800000 /* 1.0 in IEEE float */ ); 12003b705cfSriastradh 12103b705cfSriastradh OUT_BATCH(_3DSTATE_COLOR_FACTOR_CMD); 12203b705cfSriastradh OUT_BATCH(0x80808080); /* .5 required in alpha for GL_DOT3_RGBA_EXT */ 12303b705cfSriastradh 12403b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_COORD_SETBIND_CMD); 12503b705cfSriastradh OUT_BATCH(TEXBIND_SET3(TEXCOORDSRC_VTXSET_3) | 12603b705cfSriastradh TEXBIND_SET2(TEXCOORDSRC_VTXSET_2) | 12703b705cfSriastradh TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) | 12803b705cfSriastradh TEXBIND_SET0(TEXCOORDSRC_VTXSET_0)); 12903b705cfSriastradh 13003b705cfSriastradh /* copy from mesa */ 13103b705cfSriastradh OUT_BATCH(_3DSTATE_INDPT_ALPHA_BLEND_CMD | 13203b705cfSriastradh DISABLE_INDPT_ALPHA_BLEND | 13303b705cfSriastradh ENABLE_ALPHA_BLENDFUNC | ABLENDFUNC_ADD); 13403b705cfSriastradh 13503b705cfSriastradh OUT_BATCH(_3DSTATE_FOG_COLOR_CMD | 13603b705cfSriastradh FOG_COLOR_RED(0) | FOG_COLOR_GREEN(0) | FOG_COLOR_BLUE(0)); 13703b705cfSriastradh 13803b705cfSriastradh OUT_BATCH(_3DSTATE_CONST_BLEND_COLOR_CMD); 13903b705cfSriastradh OUT_BATCH(0); 14003b705cfSriastradh 14103b705cfSriastradh OUT_BATCH(_3DSTATE_MODES_1_CMD | 14203b705cfSriastradh ENABLE_COLR_BLND_FUNC | 14303b705cfSriastradh BLENDFUNC_ADD | 14403b705cfSriastradh ENABLE_SRC_BLND_FACTOR | 14503b705cfSriastradh SRC_BLND_FACT(BLENDFACTOR_ONE) | 14603b705cfSriastradh ENABLE_DST_BLND_FACTOR | DST_BLND_FACT(BLENDFACTOR_ZERO)); 14703b705cfSriastradh OUT_BATCH(_3DSTATE_MODES_2_CMD | ENABLE_GLOBAL_DEPTH_BIAS | GLOBAL_DEPTH_BIAS(0) | ENABLE_ALPHA_TEST_FUNC | ALPHA_TEST_FUNC(0) | /* always */ 14803b705cfSriastradh ALPHA_REF_VALUE(0)); 14903b705cfSriastradh OUT_BATCH(_3DSTATE_MODES_3_CMD | 15003b705cfSriastradh ENABLE_DEPTH_TEST_FUNC | 15103b705cfSriastradh DEPTH_TEST_FUNC(0x2) | /* COMPAREFUNC_LESS */ 15203b705cfSriastradh ENABLE_ALPHA_SHADE_MODE | 15303b705cfSriastradh ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) | 15403b705cfSriastradh ENABLE_FOG_SHADE_MODE | 15503b705cfSriastradh FOG_SHADE_MODE(SHADE_MODE_LINEAR) | 15603b705cfSriastradh ENABLE_SPEC_SHADE_MODE | 15703b705cfSriastradh SPEC_SHADE_MODE(SHADE_MODE_LINEAR) | 15803b705cfSriastradh ENABLE_COLOR_SHADE_MODE | 15903b705cfSriastradh COLOR_SHADE_MODE(SHADE_MODE_LINEAR) | 16003b705cfSriastradh ENABLE_CULL_MODE | CULLMODE_NONE); 16103b705cfSriastradh 16203b705cfSriastradh OUT_BATCH(_3DSTATE_MODES_4_CMD | 16303b705cfSriastradh ENABLE_LOGIC_OP_FUNC | 16403b705cfSriastradh LOGIC_OP_FUNC(LOGICOP_COPY) | 16503b705cfSriastradh ENABLE_STENCIL_TEST_MASK | 16603b705cfSriastradh STENCIL_TEST_MASK(0xff) | 16703b705cfSriastradh ENABLE_STENCIL_WRITE_MASK | STENCIL_WRITE_MASK(0xff)); 16803b705cfSriastradh 16903b705cfSriastradh OUT_BATCH(_3DSTATE_STENCIL_TEST_CMD | 17003b705cfSriastradh ENABLE_STENCIL_PARMS | 17103b705cfSriastradh STENCIL_FAIL_OP(0) | /* STENCILOP_KEEP */ 17203b705cfSriastradh STENCIL_PASS_DEPTH_FAIL_OP(0) | /* STENCILOP_KEEP */ 17303b705cfSriastradh STENCIL_PASS_DEPTH_PASS_OP(0) | /* STENCILOP_KEEP */ 17403b705cfSriastradh ENABLE_STENCIL_TEST_FUNC | 17503b705cfSriastradh STENCIL_TEST_FUNC(0) | /* COMPAREFUNC_ALWAYS */ 17603b705cfSriastradh ENABLE_STENCIL_REF_VALUE | 17703b705cfSriastradh STENCIL_REF_VALUE(0)); 17803b705cfSriastradh 17903b705cfSriastradh OUT_BATCH(_3DSTATE_MODES_5_CMD | 18003b705cfSriastradh FLUSH_TEXTURE_CACHE | 18103b705cfSriastradh ENABLE_SPRITE_POINT_TEX | SPRITE_POINT_TEX_OFF | 18203b705cfSriastradh ENABLE_FIXED_LINE_WIDTH | FIXED_LINE_WIDTH(0x2) | /* 1.0 */ 18303b705cfSriastradh ENABLE_FIXED_POINT_WIDTH | FIXED_POINT_WIDTH(1)); 18403b705cfSriastradh 18503b705cfSriastradh OUT_BATCH(_3DSTATE_ENABLES_1_CMD | 18603b705cfSriastradh DISABLE_LOGIC_OP | 18703b705cfSriastradh DISABLE_STENCIL_TEST | 18803b705cfSriastradh DISABLE_DEPTH_BIAS | 18903b705cfSriastradh DISABLE_SPEC_ADD | 19003b705cfSriastradh DISABLE_FOG | 19103b705cfSriastradh DISABLE_ALPHA_TEST | ENABLE_COLOR_BLEND | DISABLE_DEPTH_TEST); 19203b705cfSriastradh OUT_BATCH(_3DSTATE_ENABLES_2_CMD | 19303b705cfSriastradh DISABLE_STENCIL_WRITE | 19403b705cfSriastradh ENABLE_TEX_CACHE | 19503b705cfSriastradh DISABLE_DITHER | 19603b705cfSriastradh ENABLE_COLOR_MASK | ENABLE_COLOR_WRITE | DISABLE_DEPTH_WRITE); 19703b705cfSriastradh 19803b705cfSriastradh OUT_BATCH(_3DSTATE_STIPPLE); 19903b705cfSriastradh 20003b705cfSriastradh /* Set default blend state */ 20103b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) | 20203b705cfSriastradh TEXPIPE_COLOR | 20303b705cfSriastradh ENABLE_TEXOUTPUT_WRT_SEL | 20403b705cfSriastradh TEXOP_OUTPUT_CURRENT | 20503b705cfSriastradh DISABLE_TEX_CNTRL_STAGE | 20603b705cfSriastradh TEXOP_SCALE_1X | 20703b705cfSriastradh TEXOP_MODIFY_PARMS | TEXOP_LAST_STAGE | TEXBLENDOP_ARG1); 20803b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) | 20903b705cfSriastradh TEXPIPE_ALPHA | 21003b705cfSriastradh ENABLE_TEXOUTPUT_WRT_SEL | 21103b705cfSriastradh TEXOP_OUTPUT_CURRENT | 21203b705cfSriastradh TEXOP_SCALE_1X | TEXOP_MODIFY_PARMS | TEXBLENDOP_ARG1); 21303b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) | 21403b705cfSriastradh TEXPIPE_COLOR | 21503b705cfSriastradh TEXBLEND_ARG1 | 21603b705cfSriastradh TEXBLENDARG_MODIFY_PARMS | TEXBLENDARG_DIFFUSE); 21703b705cfSriastradh OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) | 21803b705cfSriastradh TEXPIPE_ALPHA | 21903b705cfSriastradh TEXBLEND_ARG1 | 22003b705cfSriastradh TEXBLENDARG_MODIFY_PARMS | TEXBLENDARG_DIFFUSE); 22103b705cfSriastradh 22203b705cfSriastradh OUT_BATCH(_3DSTATE_AA_CMD | 22303b705cfSriastradh AA_LINE_ECAAR_WIDTH_ENABLE | 22403b705cfSriastradh AA_LINE_ECAAR_WIDTH_1_0 | 22503b705cfSriastradh AA_LINE_REGION_WIDTH_ENABLE | 22603b705cfSriastradh AA_LINE_REGION_WIDTH_1_0 | AA_LINE_DISABLE); 22703b705cfSriastradh} 228