1428d7b3dSmrg/**************************************************************************
2428d7b3dSmrg *
3428d7b3dSmrg * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
4428d7b3dSmrg * All Rights Reserved.
5428d7b3dSmrg *
6428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a
7428d7b3dSmrg * copy of this software and associated documentation files (the
8428d7b3dSmrg * "Software"), to deal in the Software without restriction, including
9428d7b3dSmrg * without limitation the rights to use, copy, modify, merge, publish,
10428d7b3dSmrg * distribute, sub license, and/or sell copies of the Software, and to
11428d7b3dSmrg * permit persons to whom the Software is furnished to do so, subject to
12428d7b3dSmrg * the following conditions:
13428d7b3dSmrg *
14428d7b3dSmrg * The above copyright notice and this permission notice (including the
15428d7b3dSmrg * next paragraph) shall be included in all copies or substantial portions
16428d7b3dSmrg * of the Software.
17428d7b3dSmrg *
18428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19428d7b3dSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20428d7b3dSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21428d7b3dSmrg * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22428d7b3dSmrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23428d7b3dSmrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24428d7b3dSmrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25428d7b3dSmrg *
26428d7b3dSmrg **************************************************************************/
27428d7b3dSmrg
28428d7b3dSmrg#ifdef HAVE_CONFIG_H
29428d7b3dSmrg#include "config.h"
30428d7b3dSmrg#endif
31428d7b3dSmrg
32428d7b3dSmrg#include "xorg-server.h"
33428d7b3dSmrg#include "xf86.h"
34428d7b3dSmrg#include "intel.h"
35428d7b3dSmrg#include "intel_uxa.h"
36428d7b3dSmrg
37428d7b3dSmrg#include "i830_reg.h"
38428d7b3dSmrg
39428d7b3dSmrgvoid I830EmitInvarientState(ScrnInfoPtr scrn)
40428d7b3dSmrg{
41428d7b3dSmrg	intel_screen_private *intel = intel_get_screen_private(scrn);
42428d7b3dSmrg
43428d7b3dSmrg	assert(intel->in_batch_atomic);
44428d7b3dSmrg
45428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(0));
46428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(1));
47428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(2));
48428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_CUBE | MAP_UNIT(3));
49428d7b3dSmrg
50428d7b3dSmrg	OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD);
51428d7b3dSmrg	OUT_BATCH(0);
52428d7b3dSmrg
53428d7b3dSmrg	OUT_BATCH(_3DSTATE_DFLT_SPEC_CMD);
54428d7b3dSmrg	OUT_BATCH(0);
55428d7b3dSmrg
56428d7b3dSmrg	OUT_BATCH(_3DSTATE_DFLT_Z_CMD);
57428d7b3dSmrg	OUT_BATCH(0);
58428d7b3dSmrg
59428d7b3dSmrg	OUT_BATCH(_3DSTATE_FOG_MODE_CMD);
60428d7b3dSmrg	OUT_BATCH(FOGFUNC_ENABLE |
61428d7b3dSmrg		  FOG_LINEAR_CONST | FOGSRC_INDEX_Z | ENABLE_FOG_DENSITY);
62428d7b3dSmrg	OUT_BATCH(0);
63428d7b3dSmrg	OUT_BATCH(0);
64428d7b3dSmrg
65428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |
66428d7b3dSmrg		  MAP_UNIT(0) |
67428d7b3dSmrg		  DISABLE_TEX_STREAM_BUMP |
68428d7b3dSmrg		  ENABLE_TEX_STREAM_COORD_SET |
69428d7b3dSmrg		  TEX_STREAM_COORD_SET(0) |
70428d7b3dSmrg		  ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(0));
71428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |
72428d7b3dSmrg		  MAP_UNIT(1) |
73428d7b3dSmrg		  DISABLE_TEX_STREAM_BUMP |
74428d7b3dSmrg		  ENABLE_TEX_STREAM_COORD_SET |
75428d7b3dSmrg		  TEX_STREAM_COORD_SET(1) |
76428d7b3dSmrg		  ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(1));
77428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |
78428d7b3dSmrg		  MAP_UNIT(2) |
79428d7b3dSmrg		  DISABLE_TEX_STREAM_BUMP |
80428d7b3dSmrg		  ENABLE_TEX_STREAM_COORD_SET |
81428d7b3dSmrg		  TEX_STREAM_COORD_SET(2) |
82428d7b3dSmrg		  ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(2));
83428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_TEX_STREAM_CMD |
84428d7b3dSmrg		  MAP_UNIT(3) |
85428d7b3dSmrg		  DISABLE_TEX_STREAM_BUMP |
86428d7b3dSmrg		  ENABLE_TEX_STREAM_COORD_SET |
87428d7b3dSmrg		  TEX_STREAM_COORD_SET(3) |
88428d7b3dSmrg		  ENABLE_TEX_STREAM_MAP_IDX | TEX_STREAM_MAP_IDX(3));
89428d7b3dSmrg
90428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);
91428d7b3dSmrg	OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(0));
92428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);
93428d7b3dSmrg	OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(1));
94428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);
95428d7b3dSmrg	OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(2));
96428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);
97428d7b3dSmrg	OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(3));
98428d7b3dSmrg
99428d7b3dSmrg	OUT_BATCH(_3DSTATE_RASTER_RULES_CMD |
100428d7b3dSmrg		  ENABLE_POINT_RASTER_RULE |
101428d7b3dSmrg		  OGL_POINT_RASTER_RULE |
102428d7b3dSmrg		  ENABLE_LINE_STRIP_PROVOKE_VRTX |
103428d7b3dSmrg		  ENABLE_TRI_FAN_PROVOKE_VRTX |
104428d7b3dSmrg		  ENABLE_TRI_STRIP_PROVOKE_VRTX |
105428d7b3dSmrg		  LINE_STRIP_PROVOKE_VRTX(1) |
106428d7b3dSmrg		  TRI_FAN_PROVOKE_VRTX(2) | TRI_STRIP_PROVOKE_VRTX(2));
107428d7b3dSmrg
108428d7b3dSmrg	OUT_BATCH(_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT);
109428d7b3dSmrg
110428d7b3dSmrg	OUT_BATCH(_3DSTATE_SCISSOR_RECT_0_CMD);
111428d7b3dSmrg	OUT_BATCH(0);
112428d7b3dSmrg	OUT_BATCH(0);
113428d7b3dSmrg
114428d7b3dSmrg	OUT_BATCH(_3DSTATE_VERTEX_TRANSFORM);
115428d7b3dSmrg	OUT_BATCH(DISABLE_VIEWPORT_TRANSFORM | DISABLE_PERSPECTIVE_DIVIDE);
116428d7b3dSmrg
117428d7b3dSmrg	OUT_BATCH(_3DSTATE_W_STATE_CMD);
118428d7b3dSmrg	OUT_BATCH(MAGIC_W_STATE_DWORD1);
119428d7b3dSmrg	OUT_BATCH(0x3f800000 /* 1.0 in IEEE float */ );
120428d7b3dSmrg
121428d7b3dSmrg	OUT_BATCH(_3DSTATE_COLOR_FACTOR_CMD);
122428d7b3dSmrg	OUT_BATCH(0x80808080);	/* .5 required in alpha for GL_DOT3_RGBA_EXT */
123428d7b3dSmrg
124428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_COORD_SETBIND_CMD);
125428d7b3dSmrg	OUT_BATCH(TEXBIND_SET3(TEXCOORDSRC_VTXSET_3) |
126428d7b3dSmrg		  TEXBIND_SET2(TEXCOORDSRC_VTXSET_2) |
127428d7b3dSmrg		  TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) |
128428d7b3dSmrg		  TEXBIND_SET0(TEXCOORDSRC_VTXSET_0));
129428d7b3dSmrg
130428d7b3dSmrg	/* copy from mesa */
131428d7b3dSmrg	OUT_BATCH(_3DSTATE_INDPT_ALPHA_BLEND_CMD |
132428d7b3dSmrg		  DISABLE_INDPT_ALPHA_BLEND |
133428d7b3dSmrg		  ENABLE_ALPHA_BLENDFUNC | ABLENDFUNC_ADD);
134428d7b3dSmrg
135428d7b3dSmrg	OUT_BATCH(_3DSTATE_FOG_COLOR_CMD |
136428d7b3dSmrg		  FOG_COLOR_RED(0) | FOG_COLOR_GREEN(0) | FOG_COLOR_BLUE(0));
137428d7b3dSmrg
138428d7b3dSmrg	OUT_BATCH(_3DSTATE_CONST_BLEND_COLOR_CMD);
139428d7b3dSmrg	OUT_BATCH(0);
140428d7b3dSmrg
141428d7b3dSmrg	OUT_BATCH(_3DSTATE_MODES_1_CMD |
142428d7b3dSmrg		  ENABLE_COLR_BLND_FUNC |
143428d7b3dSmrg		  BLENDFUNC_ADD |
144428d7b3dSmrg		  ENABLE_SRC_BLND_FACTOR |
145428d7b3dSmrg		  SRC_BLND_FACT(BLENDFACTOR_ONE) |
146428d7b3dSmrg		  ENABLE_DST_BLND_FACTOR | DST_BLND_FACT(BLENDFACTOR_ZERO));
147428d7b3dSmrg	OUT_BATCH(_3DSTATE_MODES_2_CMD | ENABLE_GLOBAL_DEPTH_BIAS | GLOBAL_DEPTH_BIAS(0) | ENABLE_ALPHA_TEST_FUNC | ALPHA_TEST_FUNC(0) |	/* always */
148428d7b3dSmrg		  ALPHA_REF_VALUE(0));
149428d7b3dSmrg	OUT_BATCH(_3DSTATE_MODES_3_CMD |
150428d7b3dSmrg		  ENABLE_DEPTH_TEST_FUNC |
151428d7b3dSmrg		  DEPTH_TEST_FUNC(0x2) |	/* COMPAREFUNC_LESS */
152428d7b3dSmrg		  ENABLE_ALPHA_SHADE_MODE |
153428d7b3dSmrg		  ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) |
154428d7b3dSmrg		  ENABLE_FOG_SHADE_MODE |
155428d7b3dSmrg		  FOG_SHADE_MODE(SHADE_MODE_LINEAR) |
156428d7b3dSmrg		  ENABLE_SPEC_SHADE_MODE |
157428d7b3dSmrg		  SPEC_SHADE_MODE(SHADE_MODE_LINEAR) |
158428d7b3dSmrg		  ENABLE_COLOR_SHADE_MODE |
159428d7b3dSmrg		  COLOR_SHADE_MODE(SHADE_MODE_LINEAR) |
160428d7b3dSmrg		  ENABLE_CULL_MODE | CULLMODE_NONE);
161428d7b3dSmrg
162428d7b3dSmrg	OUT_BATCH(_3DSTATE_MODES_4_CMD |
163428d7b3dSmrg		  ENABLE_LOGIC_OP_FUNC |
164428d7b3dSmrg		  LOGIC_OP_FUNC(LOGICOP_COPY) |
165428d7b3dSmrg		  ENABLE_STENCIL_TEST_MASK |
166428d7b3dSmrg		  STENCIL_TEST_MASK(0xff) |
167428d7b3dSmrg		  ENABLE_STENCIL_WRITE_MASK | STENCIL_WRITE_MASK(0xff));
168428d7b3dSmrg
169428d7b3dSmrg	OUT_BATCH(_3DSTATE_STENCIL_TEST_CMD |
170428d7b3dSmrg		  ENABLE_STENCIL_PARMS |
171428d7b3dSmrg		  STENCIL_FAIL_OP(0) |	/* STENCILOP_KEEP */
172428d7b3dSmrg		  STENCIL_PASS_DEPTH_FAIL_OP(0) |	/* STENCILOP_KEEP */
173428d7b3dSmrg		  STENCIL_PASS_DEPTH_PASS_OP(0) |	/* STENCILOP_KEEP */
174428d7b3dSmrg		  ENABLE_STENCIL_TEST_FUNC |
175428d7b3dSmrg		  STENCIL_TEST_FUNC(0) |	/* COMPAREFUNC_ALWAYS */
176428d7b3dSmrg		  ENABLE_STENCIL_REF_VALUE |
177428d7b3dSmrg		  STENCIL_REF_VALUE(0));
178428d7b3dSmrg
179428d7b3dSmrg	OUT_BATCH(_3DSTATE_MODES_5_CMD |
180428d7b3dSmrg		  FLUSH_TEXTURE_CACHE |
181428d7b3dSmrg		  ENABLE_SPRITE_POINT_TEX | SPRITE_POINT_TEX_OFF |
182428d7b3dSmrg		  ENABLE_FIXED_LINE_WIDTH | FIXED_LINE_WIDTH(0x2) | /* 1.0 */
183428d7b3dSmrg		  ENABLE_FIXED_POINT_WIDTH | FIXED_POINT_WIDTH(1));
184428d7b3dSmrg
185428d7b3dSmrg	OUT_BATCH(_3DSTATE_ENABLES_1_CMD |
186428d7b3dSmrg		  DISABLE_LOGIC_OP |
187428d7b3dSmrg		  DISABLE_STENCIL_TEST |
188428d7b3dSmrg		  DISABLE_DEPTH_BIAS |
189428d7b3dSmrg		  DISABLE_SPEC_ADD |
190428d7b3dSmrg		  DISABLE_FOG |
191428d7b3dSmrg		  DISABLE_ALPHA_TEST | ENABLE_COLOR_BLEND | DISABLE_DEPTH_TEST);
192428d7b3dSmrg	OUT_BATCH(_3DSTATE_ENABLES_2_CMD |
193428d7b3dSmrg		  DISABLE_STENCIL_WRITE |
194428d7b3dSmrg		  ENABLE_TEX_CACHE |
195428d7b3dSmrg		  DISABLE_DITHER |
196428d7b3dSmrg		  ENABLE_COLOR_MASK | ENABLE_COLOR_WRITE | DISABLE_DEPTH_WRITE);
197428d7b3dSmrg
198428d7b3dSmrg	OUT_BATCH(_3DSTATE_STIPPLE);
199428d7b3dSmrg
200428d7b3dSmrg	/* Set default blend state */
201428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) |
202428d7b3dSmrg		  TEXPIPE_COLOR |
203428d7b3dSmrg		  ENABLE_TEXOUTPUT_WRT_SEL |
204428d7b3dSmrg		  TEXOP_OUTPUT_CURRENT |
205428d7b3dSmrg		  DISABLE_TEX_CNTRL_STAGE |
206428d7b3dSmrg		  TEXOP_SCALE_1X |
207428d7b3dSmrg		  TEXOP_MODIFY_PARMS | TEXOP_LAST_STAGE | TEXBLENDOP_ARG1);
208428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_BLEND_OP_CMD(0) |
209428d7b3dSmrg		  TEXPIPE_ALPHA |
210428d7b3dSmrg		  ENABLE_TEXOUTPUT_WRT_SEL |
211428d7b3dSmrg		  TEXOP_OUTPUT_CURRENT |
212428d7b3dSmrg		  TEXOP_SCALE_1X | TEXOP_MODIFY_PARMS | TEXBLENDOP_ARG1);
213428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) |
214428d7b3dSmrg		  TEXPIPE_COLOR |
215428d7b3dSmrg		  TEXBLEND_ARG1 |
216428d7b3dSmrg		  TEXBLENDARG_MODIFY_PARMS | TEXBLENDARG_DIFFUSE);
217428d7b3dSmrg	OUT_BATCH(_3DSTATE_MAP_BLEND_ARG_CMD(0) |
218428d7b3dSmrg		  TEXPIPE_ALPHA |
219428d7b3dSmrg		  TEXBLEND_ARG1 |
220428d7b3dSmrg		  TEXBLENDARG_MODIFY_PARMS | TEXBLENDARG_DIFFUSE);
221428d7b3dSmrg
222428d7b3dSmrg	OUT_BATCH(_3DSTATE_AA_CMD |
223428d7b3dSmrg		  AA_LINE_ECAAR_WIDTH_ENABLE |
224428d7b3dSmrg		  AA_LINE_ECAAR_WIDTH_1_0 |
225428d7b3dSmrg		  AA_LINE_REGION_WIDTH_ENABLE |
226428d7b3dSmrg		  AA_LINE_REGION_WIDTH_1_0 | AA_LINE_DISABLE);
227428d7b3dSmrg}
228