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 "i915_reg.h"
3803b705cfSriastradh
3903b705cfSriastradhvoid I915EmitInvarientState(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_AA_CMD |
4603b705cfSriastradh		  AA_LINE_ECAAR_WIDTH_ENABLE |
4703b705cfSriastradh		  AA_LINE_ECAAR_WIDTH_1_0 |
4803b705cfSriastradh		  AA_LINE_REGION_WIDTH_ENABLE | AA_LINE_REGION_WIDTH_1_0);
4903b705cfSriastradh
5003b705cfSriastradh	/* Disable independent alpha blend */
5103b705cfSriastradh	OUT_BATCH(_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
5203b705cfSriastradh		  IAB_MODIFY_ENABLE |
5303b705cfSriastradh		  IAB_MODIFY_FUNC | (BLENDFUNC_ADD << IAB_FUNC_SHIFT) |
5403b705cfSriastradh		  IAB_MODIFY_SRC_FACTOR | (BLENDFACT_ONE <<
5503b705cfSriastradh					   IAB_SRC_FACTOR_SHIFT) |
5603b705cfSriastradh		  IAB_MODIFY_DST_FACTOR | (BLENDFACT_ZERO <<
5703b705cfSriastradh					   IAB_DST_FACTOR_SHIFT));
5803b705cfSriastradh
5903b705cfSriastradh	OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD);
6003b705cfSriastradh	OUT_BATCH(0);
6103b705cfSriastradh
6203b705cfSriastradh	OUT_BATCH(_3DSTATE_DFLT_SPEC_CMD);
6303b705cfSriastradh	OUT_BATCH(0);
6403b705cfSriastradh
6503b705cfSriastradh	OUT_BATCH(_3DSTATE_DFLT_Z_CMD);
6603b705cfSriastradh	OUT_BATCH(0);
6703b705cfSriastradh
6803b705cfSriastradh	/* Don't support texture crossbar yet */
6903b705cfSriastradh	OUT_BATCH(_3DSTATE_COORD_SET_BINDINGS |
7003b705cfSriastradh		  CSB_TCB(0, 0) |
7103b705cfSriastradh		  CSB_TCB(1, 1) |
7203b705cfSriastradh		  CSB_TCB(2, 2) |
7303b705cfSriastradh		  CSB_TCB(3, 3) |
7403b705cfSriastradh		  CSB_TCB(4, 4) |
7503b705cfSriastradh		  CSB_TCB(5, 5) | CSB_TCB(6, 6) | CSB_TCB(7, 7));
7603b705cfSriastradh
7703b705cfSriastradh	OUT_BATCH(_3DSTATE_RASTER_RULES_CMD |
7803b705cfSriastradh		  ENABLE_POINT_RASTER_RULE |
7903b705cfSriastradh		  OGL_POINT_RASTER_RULE |
8003b705cfSriastradh		  ENABLE_LINE_STRIP_PROVOKE_VRTX |
8103b705cfSriastradh		  ENABLE_TRI_FAN_PROVOKE_VRTX |
8203b705cfSriastradh		  LINE_STRIP_PROVOKE_VRTX(1) |
8303b705cfSriastradh		  TRI_FAN_PROVOKE_VRTX(2) | ENABLE_TEXKILL_3D_4D | TEXKILL_4D);
8403b705cfSriastradh
8503b705cfSriastradh	OUT_BATCH(_3DSTATE_MODES_4_CMD |
8603b705cfSriastradh		  ENABLE_LOGIC_OP_FUNC | LOGIC_OP_FUNC(LOGICOP_COPY) |
8703b705cfSriastradh		  ENABLE_STENCIL_WRITE_MASK | STENCIL_WRITE_MASK(0xff) |
8803b705cfSriastradh		  ENABLE_STENCIL_TEST_MASK | STENCIL_TEST_MASK(0xff));
8903b705cfSriastradh
9003b705cfSriastradh	OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | I1_LOAD_S(4) | I1_LOAD_S(5) | 2);
9103b705cfSriastradh	OUT_BATCH(0x00000000);	/* Disable texture coordinate wrap-shortest */
9203b705cfSriastradh	OUT_BATCH((1 << S4_POINT_WIDTH_SHIFT) |
9303b705cfSriastradh		  S4_LINE_WIDTH_ONE |
9403b705cfSriastradh		  S4_CULLMODE_NONE |
9503b705cfSriastradh		  S4_VFMT_XY);
9603b705cfSriastradh	OUT_BATCH(0x00000000);	/* Stencil. */
9703b705cfSriastradh
9803b705cfSriastradh	OUT_BATCH(_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT);
9903b705cfSriastradh	OUT_BATCH(_3DSTATE_SCISSOR_RECT_0_CMD);
10003b705cfSriastradh	OUT_BATCH(0);
10103b705cfSriastradh	OUT_BATCH(0);
10203b705cfSriastradh
10303b705cfSriastradh	OUT_BATCH(_3DSTATE_DEPTH_SUBRECT_DISABLE);
10403b705cfSriastradh
10503b705cfSriastradh	OUT_BATCH(_3DSTATE_LOAD_INDIRECT | 0);	/* disable indirect state */
10603b705cfSriastradh	OUT_BATCH(0);
10703b705cfSriastradh
10803b705cfSriastradh	OUT_BATCH(_3DSTATE_STIPPLE);
10903b705cfSriastradh	OUT_BATCH(0x00000000);
11003b705cfSriastradh
11103b705cfSriastradh	OUT_BATCH(_3DSTATE_BACKFACE_STENCIL_OPS | BFO_ENABLE_STENCIL_TWO_SIDE | 0);
11203b705cfSriastradh}
113