i830_state.c revision a194bc3a8527ed41eead88632cc79ecabe4c81ac
141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell/**************************************************************************
241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell *
341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * All Rights Reserved.
541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell *
6594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
7594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * copy of this software and associated documentation files (the
8594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * "Software"), to deal in the Software without restriction, including
9594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish,
10594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to
11594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to
12594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * the following conditions:
13594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell *
14594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * The above copyright notice and this permission notice (including the
15594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * next paragraph) shall be included in all copies or substantial portions
16594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * of the Software.
17594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell *
18594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25594c3f67ac8fceb061e47b090ec4d149c55a1940Keith Whitwell *
2641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell **************************************************************************/
2741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
2841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
2941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "glheader.h"
3041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "context.h"
3141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "macros.h"
3241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "enums.h"
3341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "dd.h"
3441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
3541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "texmem.h"
3641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
37a194bc3a8527ed41eead88632cc79ecabe4c81acBrian#include "drivers/common/driverfuncs.h"
38a194bc3a8527ed41eead88632cc79ecabe4c81acBrian
3941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "intel_screen.h"
4041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "intel_batchbuffer.h"
4141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
4241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "i830_context.h"
4341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#include "i830_reg.h"
4441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
45878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paulstatic void
46878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Pauli830StencilFuncSeparate(GLcontext *ctx, GLenum face, GLenum func, GLint ref,
47878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paul                        GLuint mask)
4841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
4941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
50a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane   int test = intel_translate_compare_func(func);
5141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
5241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   mask = mask & 0xff;
5341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
5441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
5541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s : func: %s, ref : 0x%x, mask: 0x%x\n", __FUNCTION__,
5641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      _mesa_lookup_enum_by_nr(func), ref, mask);
5741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
5841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
5941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
6041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE4] &= ~MODE4_ENABLE_STENCIL_TEST_MASK;
6141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE4] |= (ENABLE_STENCIL_TEST_MASK |
6241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					STENCIL_TEST_MASK(mask));
6341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STENCILTST] &= ~(STENCIL_REF_VALUE_MASK |
6441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     ENABLE_STENCIL_TEST_FUNC_MASK);
6541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STENCILTST] |= (ENABLE_STENCIL_REF_VALUE |
6641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    ENABLE_STENCIL_TEST_FUNC |
6741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    STENCIL_REF_VALUE(ref) |
6841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    STENCIL_TEST_FUNC(test));
6941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
7041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
71878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paulstatic void
72878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Pauli830StencilMaskSeparate(GLcontext *ctx, GLenum face, GLuint mask)
7341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
7441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
7541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
7641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
7741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s : mask 0x%x\n", __FUNCTION__, mask);
7841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
7941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   mask = mask & 0xff;
8041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
8141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
8241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE4] &= ~MODE4_ENABLE_STENCIL_WRITE_MASK;
8341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE4] |= (ENABLE_STENCIL_WRITE_MASK |
8441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					STENCIL_WRITE_MASK(mask));
8541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
8641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
87878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paulstatic void
88878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Pauli830StencilOpSeparate(GLcontext *ctx, GLenum face, GLenum fail, GLenum zfail,
89878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paul                      GLenum zpass)
9041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
9141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
9241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   int fop, dfop, dpop;
9341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
9441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
9541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s: fail : %s, zfail: %s, zpass : %s\n", __FUNCTION__,
9641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      _mesa_lookup_enum_by_nr(fail),
9741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      _mesa_lookup_enum_by_nr(zfail),
9841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      _mesa_lookup_enum_by_nr(zpass));
9941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
10041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   fop = 0; dfop = 0; dpop = 0;
10141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
10241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   switch(fail) {
10341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_KEEP:
10441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_KEEP;
10541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
10641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_ZERO:
10741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_ZERO;
10841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
10941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_REPLACE:
11041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_REPLACE;
11141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
11241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INCR:
11341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_INCRSAT;
11441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
11541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DECR:
11641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_DECRSAT;
11741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
11841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INCR_WRAP:
11941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_INCR;
12041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
12141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DECR_WRAP:
12241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_DECR;
12341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
12441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INVERT:
12541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fop = STENCILOP_INVERT;
12641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
12741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   default:
12841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
12941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
13041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   switch(zfail) {
13141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_KEEP:
13241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_KEEP;
13341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
13441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_ZERO:
13541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_ZERO;
13641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
13741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_REPLACE:
13841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_REPLACE;
13941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
14041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INCR:
14141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_INCRSAT;
14241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
14341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DECR:
14441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_DECRSAT;
14541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
14641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INCR_WRAP:
14741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_INCR;
14841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
14941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DECR_WRAP:
15041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_DECR;
15141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
15241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INVERT:
15341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dfop = STENCILOP_INVERT;
15441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
15541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   default:
15641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
15741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
15841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   switch(zpass) {
15941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_KEEP:
16041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_KEEP;
16141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
16241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_ZERO:
16341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_ZERO;
16441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
16541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_REPLACE:
16641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_REPLACE;
16741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
16841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INCR:
16941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_INCRSAT;
17041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
17141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DECR:
17241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_DECRSAT;
17341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
17441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INCR_WRAP:
17541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_INCR;
17641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
17741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DECR_WRAP:
17841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_DECR;
17941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
18041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_INVERT:
18141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      dpop = STENCILOP_INVERT;
18241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
18341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   default:
18441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
18541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
18641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
18741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
18841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
18941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STENCILTST] &= ~(STENCIL_OPS_MASK);
19041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STENCILTST] |= (ENABLE_STENCIL_PARMS |
19141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    STENCIL_FAIL_OP(fop) |
19241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    STENCIL_PASS_DEPTH_FAIL_OP(dfop) |
19341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    STENCIL_PASS_DEPTH_PASS_OP(dpop));
19441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
19541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
19641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830AlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)
19741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
19841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
199a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane   int test = intel_translate_compare_func(func);
20041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLubyte refByte;
20141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLuint refInt;
20241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
20341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   UNCLAMPED_FLOAT_TO_UBYTE(refByte, ref);
20441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   refInt = (GLuint)refByte;
20541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
20641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
20741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE2] &= ~ALPHA_TEST_REF_MASK;
20841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE2] |= (ENABLE_ALPHA_TEST_FUNC |
20941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					ENABLE_ALPHA_REF_VALUE |
21041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					ALPHA_TEST_FUNC(test) |
21141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					ALPHA_REF_VALUE(refInt));
21241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
21341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
214be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick/**
215be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * Makes sure that the proper enables are set for LogicOp, Independant Alpha
216be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * Blend, and Blending.  It needs to be called from numerous places where we
21741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * could change the LogicOp or Independant Alpha Blend without subsequent
21841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * calls to glEnable.
219be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick *
220be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * \todo
221be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * This function is substantially different from the old i830-specific driver.
222be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * I'm not sure which is correct.
22341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell */
22441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830EvalLogicOpBlendState(GLcontext *ctx)
22541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
22641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
22741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
22841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
22941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
2307a9c7c1133d5cf17d032c8568e8f040a7c171a72Brian Paul   if (RGBA_LOGICOP_ENABLED(ctx)) {
23141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~(ENABLE_COLOR_BLEND |
23241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					       ENABLE_LOGIC_OP_MASK);
23341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] |= (DISABLE_COLOR_BLEND |
23441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      ENABLE_LOGIC_OP);
23541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   } else if (ctx->Color.BlendEnabled) {
23641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~(ENABLE_COLOR_BLEND |
23741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					       ENABLE_LOGIC_OP_MASK);
23841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] |= (ENABLE_COLOR_BLEND |
23941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DISABLE_LOGIC_OP);
24041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   } else {
24141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~(ENABLE_COLOR_BLEND |
24241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					       ENABLE_LOGIC_OP_MASK);
24341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] |= (DISABLE_COLOR_BLEND |
24441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DISABLE_LOGIC_OP);
24541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
24641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
24741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
24841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830BlendColor(GLcontext *ctx, const GLfloat color[4])
24941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
25041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
25141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLubyte r, g, b, a;
25241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
25341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
25441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s\n", __FUNCTION__);
25541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
25641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   UNCLAMPED_FLOAT_TO_UBYTE(r, color[RCOMP]);
25741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   UNCLAMPED_FLOAT_TO_UBYTE(g, color[GCOMP]);
25841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   UNCLAMPED_FLOAT_TO_UBYTE(b, color[BCOMP]);
25941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   UNCLAMPED_FLOAT_TO_UBYTE(a, color[ACOMP]);
26041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
26141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
26241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = (a<<24) | (r<<16) | (g<<8) | b;
26341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
26441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
265be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick/**
266be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * Sets both the blend equation (called "function" in i830 docs) and the
267be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * blend function (called "factor" in i830 docs).  This is done in a single
268be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * function because some blend equations (i.e., \c GL_MIN and \c GL_MAX)
269be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick * change the interpretation of the blend function.
270be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick */
271be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanickstatic void i830_set_blend_state( GLcontext * ctx )
27241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
27341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
274be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   int funcA;
275be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   int funcRGB;
276be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   int eqnA;
277be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   int eqnRGB;
278be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   int iab;
279be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   int s1;
28041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
281be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
282a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane   funcRGB = SRC_BLND_FACT( intel_translate_blend_factor( ctx->Color.BlendSrcRGB ) )
283a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane       | DST_BLND_FACT( intel_translate_blend_factor( ctx->Color.BlendDstRGB ) );
284be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
285be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   switch(ctx->Color.BlendEquationRGB) {
286be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_FUNC_ADD:
287be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnRGB = BLENDFUNC_ADD;
288be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
289be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_MIN:
290be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnRGB = BLENDFUNC_MIN;
291be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
292be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
293be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_MAX:
294be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnRGB = BLENDFUNC_MAX;
295be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
296be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
297be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_FUNC_SUBTRACT:
298be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnRGB = BLENDFUNC_SUB;
299be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
300be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_FUNC_REVERSE_SUBTRACT:
301be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnRGB = BLENDFUNC_RVRSE_SUB;
302be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
303be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   default:
304be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      fprintf( stderr, "[%s:%u] Invalid RGB blend equation (0x%04x).\n",
30538b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane	       __FUNCTION__, __LINE__, ctx->Color.BlendEquationRGB );
306be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      return;
307be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   }
30841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
30941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
310a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane   funcA = SRC_ABLEND_FACT( intel_translate_blend_factor( ctx->Color.BlendSrcA ) )
311a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane       | DST_ABLEND_FACT( intel_translate_blend_factor( ctx->Color.BlendDstA ) );
31241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
313be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   switch(ctx->Color.BlendEquationA) {
314be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_FUNC_ADD:
315be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnA = BLENDFUNC_ADD;
316be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
317be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_MIN:
318be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnA = BLENDFUNC_MIN;
319be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
320be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
321be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_MAX:
322be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnA = BLENDFUNC_MAX;
323be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE);
324be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
325be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_FUNC_SUBTRACT:
326be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnA = BLENDFUNC_SUB;
327be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
328be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   case GL_FUNC_REVERSE_SUBTRACT:
329be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      eqnA = BLENDFUNC_RVRSE_SUB;
330be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      break;
331be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   default:
332be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      fprintf( stderr, "[%s:%u] Invalid alpha blend equation (0x%04x).\n",
33338b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane	       __FUNCTION__, __LINE__, ctx->Color.BlendEquationA );
334be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      return;
33541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
33641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
337be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   iab = eqnA | funcA
338be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick       | _3DSTATE_INDPT_ALPHA_BLEND_CMD
339be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick       | ENABLE_SRC_ABLEND_FACTOR | ENABLE_DST_ABLEND_FACTOR
340be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick       | ENABLE_ALPHA_BLENDFUNC;
341be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   s1 = eqnRGB | funcRGB
342be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick       | _3DSTATE_MODES_1_CMD
343be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick       | ENABLE_SRC_BLND_FACTOR | ENABLE_DST_BLND_FACTOR
344be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick       | ENABLE_COLR_BLND_FUNC;
34541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
346be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   if ( (eqnA | funcA) != (eqnRGB | funcRGB) )
34741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      iab |= ENABLE_INDPT_ALPHA_BLEND;
34841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   else
34941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      iab |= DISABLE_INDPT_ALPHA_BLEND;
35041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
35141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (iab != i830->state.Ctx[I830_CTXREG_IALPHAB] ||
35241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       s1 != i830->state.Ctx[I830_CTXREG_STATE1]) {
35341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
35441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_IALPHAB] = iab;
35541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_STATE1] = s1;
35641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
357be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
358be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   /* This will catch a logicop blend equation.  It will also ensure
359be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick    * independant alpha blend is really in the correct state (either enabled
360be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick    * or disabled) if blending is already enabled.
361be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick    */
362be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
363be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   i830EvalLogicOpBlendState(ctx);
364be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
365be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   if (0) {
366be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick      fprintf(stderr, "[%s:%u] STATE1: 0x%08x IALPHAB: 0x%08x blend is %sabled\n",
36738b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane	      __FUNCTION__, __LINE__,
368be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	      i830->state.Ctx[I830_CTXREG_STATE1],
369be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	      i830->state.Ctx[I830_CTXREG_IALPHAB],
370be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	      (ctx->Color.BlendEnabled) ? "en" : "dis");
371be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   }
372be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick}
373be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
374be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
375be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanickstatic void i830BlendEquationSeparate(GLcontext *ctx, GLenum modeRGB,
376be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick				      GLenum modeA)
377be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick{
378be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   if (INTEL_DEBUG&DEBUG_DRI)
379be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick     fprintf(stderr, "%s -> %s, %s\n", __FUNCTION__,
380be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	     _mesa_lookup_enum_by_nr(modeRGB),
381be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	     _mesa_lookup_enum_by_nr(modeA));
382be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
383be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   (void) modeRGB;
384be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   (void) modeA;
385be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   i830_set_blend_state( ctx );
386be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick}
387be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
388be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
389be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanickstatic void i830BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
390be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick				  GLenum dfactorRGB, GLenum sfactorA,
391be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick				  GLenum dfactorA )
392be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick{
393be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   if (INTEL_DEBUG&DEBUG_DRI)
394be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick     fprintf(stderr, "%s -> RGB(%s, %s) A(%s, %s)\n", __FUNCTION__,
395be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	     _mesa_lookup_enum_by_nr(sfactorRGB),
396be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	     _mesa_lookup_enum_by_nr(dfactorRGB),
397be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	     _mesa_lookup_enum_by_nr(sfactorA),
398be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick	     _mesa_lookup_enum_by_nr(dfactorA));
399be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick
400be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   (void) sfactorRGB;
401be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   (void) dfactorRGB;
402be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   (void) sfactorA;
403be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   (void) dfactorA;
404be3359bad5930a7aa27237d48aa67e6c7b11975bIan Romanick   i830_set_blend_state( ctx );
40541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
40641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
40741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
40841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
40941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830DepthFunc(GLcontext *ctx, GLenum func)
41041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
41141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
412a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane   int test = intel_translate_compare_func(func);
41341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
41441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
41541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s\n", __FUNCTION__);
41641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
41741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
41841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE3] &= ~DEPTH_TEST_FUNC_MASK;
41941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE3] |= (ENABLE_DEPTH_TEST_FUNC |
42041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				       DEPTH_TEST_FUNC(test));
42141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
42241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
42341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830DepthMask(GLcontext *ctx, GLboolean flag)
42441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
42541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
42641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
42741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
42841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s flag (%d)\n", __FUNCTION__, flag);
42941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
43041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
43141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
43241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_DIS_DEPTH_WRITE_MASK;
43341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
43441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (flag && ctx->Depth.Test)
43541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_DEPTH_WRITE;
43641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   else
43741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_2] |= DISABLE_DEPTH_WRITE;
43841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
43941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
44041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell/* =============================================================
44141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * Polygon stipple
44241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell *
44341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * The i830 supports a 4x4 stipple natively, GL wants 32x32.
44441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * Fortunately stipple is usually a repeating pattern.
44541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell */
44641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830PolygonStipple( GLcontext *ctx, const GLubyte *mask )
44741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
44841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
44941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   const GLubyte *m = mask;
45041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLubyte p[4];
45141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   int i,j,k;
45241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   int active = (ctx->Polygon.StippleFlag &&
45341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell		 i830->intel.reduced_primitive == GL_TRIANGLES);
45441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLuint newMask;
45541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
45641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (active) {
45741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_STIPPLE);
45841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Stipple[I830_STPREG_ST1] &= ~ST1_ENABLE;
45941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
46041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
46141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   p[0] = mask[12] & 0xf; p[0] |= p[0] << 4;
46241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   p[1] = mask[8] & 0xf; p[1] |= p[1] << 4;
46341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   p[2] = mask[4] & 0xf; p[2] |= p[2] << 4;
46441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   p[3] = mask[0] & 0xf; p[3] |= p[3] << 4;
46541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
46641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   for (k = 0 ; k < 8 ; k++)
46741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      for (j = 3 ; j >= 0; j--)
46841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 for (i = 0 ; i < 4 ; i++, m++)
46941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    if (*m != p[j]) {
47041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	       i830->intel.hw_stipple = 0;
47141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	       return;
47241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    }
47341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
47441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   newMask = (((p[0] & 0xf) << 0) |
47541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      ((p[1] & 0xf) << 4) |
47641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      ((p[2] & 0xf) << 8) |
47741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      ((p[3] & 0xf) << 12));
47841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
47941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
48041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (newMask == 0xffff || newMask == 0x0) {
48141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      /* this is needed to make conform pass */
48241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->intel.hw_stipple = 0;
48341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      return;
48441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
48541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
48641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Stipple[I830_STPREG_ST1] &= ~0xffff;
48741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Stipple[I830_STPREG_ST1] |= newMask;
48841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->intel.hw_stipple = 1;
48941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
49041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (active)
49141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Stipple[I830_STPREG_ST1] |= ST1_ENABLE;
49241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
49341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
49441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
49541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell/* =============================================================
49641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * Hardware clipping
49741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell */
49841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830Scissor(GLcontext *ctx, GLint x, GLint y,
49941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell			GLsizei w, GLsizei h)
50041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
50141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
50241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   intelScreenPrivate *screen = i830->intel.intelScreen;
50341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   int x1, y1, x2, y2;
50441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
50541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (!i830->intel.driDrawable)
50641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      return;
50741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
50841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   x1 = x;
50941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   y1 = i830->intel.driDrawable->h - (y + h);
51041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   x2 = x + w - 1;
51141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   y2 = y1 + h - 1;
51241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
51341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
51441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "[%s] x(%d) y(%d) w(%d) h(%d)\n", __FUNCTION__,
51541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	      x, y, w, h);
51641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
51741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (x1 < 0) x1 = 0;
51841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (y1 < 0) y1 = 0;
51941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (x2 < 0) x2 = 0;
52041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (y2 < 0) y2 = 0;
52141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
52241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (x2 >= screen->width) x2 = screen->width-1;
52341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (y2 >= screen->height) y2 = screen->height-1;
52441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (x1 >= screen->width) x1 = screen->width-1;
52541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (y1 >= screen->height) y1 = screen->height-1;
52641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
52741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
52841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_BUFFERS);
52941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_SR1] = (y1 << 16) | (x1 & 0xffff);
53041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_SR2] = (y2 << 16) | (x2 & 0xffff);
53141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
53241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
53341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830LogicOp(GLcontext *ctx, GLenum opcode)
53441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
53541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
536a2db56b34b7fe0fb58441d293ba56b8ed48141a8Alan Hourihane   int tmp = intel_translate_logic_op( opcode );
53741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
53841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
53941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s\n", __FUNCTION__);
54041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
54141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
54241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE4] &= ~LOGICOP_MASK;
54341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE4] |= LOGIC_OP_FUNC(tmp);
54441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
54541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
54641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
54741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
54841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830CullFaceFrontFace(GLcontext *ctx, GLenum unused)
54941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
55041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
55141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLuint mode;
55241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
55341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
55441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s\n", __FUNCTION__);
55541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
55641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (!ctx->Polygon.CullFlag) {
55741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      mode = CULLMODE_NONE;
55841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
55941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   else if (ctx->Polygon.CullFaceMode != GL_FRONT_AND_BACK) {
56041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      mode = CULLMODE_CW;
56141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
56241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (ctx->Polygon.CullFaceMode == GL_FRONT)
56341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 mode ^= (CULLMODE_CW ^ CULLMODE_CCW);
56441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (ctx->Polygon.FrontFace != GL_CCW)
56541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 mode ^= (CULLMODE_CW ^ CULLMODE_CCW);
56641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
56741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   else {
56841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      mode = CULLMODE_BOTH;
56941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
57041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
57141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
57241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE3] &= ~CULLMODE_MASK;
57341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE3] |= ENABLE_CULL_MODE | mode;
57441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
57541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
57641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830LineWidth( GLcontext *ctx, GLfloat widthf )
57741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
57841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT( ctx );
57941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   int width;
58041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   int state5;
58141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
58241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
58341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s\n", __FUNCTION__);
58441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
58541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   width = (int)(widthf * 2);
58641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   CLAMP_SELF(width, 1, 15);
58741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
58841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   state5 = i830->state.Ctx[I830_CTXREG_STATE5] & ~FIXED_LINE_WIDTH_MASK;
58941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   state5 |= (ENABLE_FIXED_LINE_WIDTH | FIXED_LINE_WIDTH(width));
59041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
59141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (state5 != i830->state.Ctx[I830_CTXREG_STATE5]) {
59241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
59341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_STATE5] = state5;
59441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
59541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
59641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
59741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830PointSize(GLcontext *ctx, GLfloat size)
59841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
59941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
60041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLint point_size = (int)size;
60141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
60241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
60341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell     fprintf(stderr, "%s\n", __FUNCTION__);
60441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
60541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   CLAMP_SELF(point_size, 1, 256);
60641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
60741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE5] &= ~FIXED_POINT_WIDTH_MASK;
60841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE5] |= (ENABLE_FIXED_POINT_WIDTH |
60941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				       FIXED_POINT_WIDTH(point_size));
61041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
61141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
61241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
61341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell/* =============================================================
61441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * Color masks
61541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell */
61641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
61741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830ColorMask(GLcontext *ctx,
61841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell			  GLboolean r, GLboolean g,
61941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell			  GLboolean b, GLboolean a)
62041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
62141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT( ctx );
62241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLuint tmp = 0;
62341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
62441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
62541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s r(%d) g(%d) b(%d) a(%d)\n", __FUNCTION__, r, g, b, a);
62641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
62741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   tmp = ((i830->state.Ctx[I830_CTXREG_ENABLES_2] & ~WRITEMASK_MASK) |
62841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	  ENABLE_COLOR_MASK |
62941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	  ENABLE_COLOR_WRITE |
63041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	  ((!r) << WRITEMASK_RED_SHIFT) |
63141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	  ((!g) << WRITEMASK_GREEN_SHIFT) |
63241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	  ((!b) << WRITEMASK_BLUE_SHIFT) |
63341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	  ((!a) << WRITEMASK_ALPHA_SHIFT));
63441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
63541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (tmp != i830->state.Ctx[I830_CTXREG_ENABLES_2]) {
63641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
63741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_2] = tmp;
63841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
63941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
64041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
64141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void update_specular( GLcontext *ctx )
64241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
64341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT( ctx );
64441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
64541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
64641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_SPEC_ADD_MASK;
64741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
64841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (NEED_SECONDARY_COLOR(ctx))
64941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_SPEC_ADD;
65041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   else
65141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_SPEC_ADD;
65241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
65341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
65441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830LightModelfv(GLcontext *ctx, GLenum pname,
65541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell			     const GLfloat *param)
65641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
65741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
65841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s\n", __FUNCTION__);
65941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
66041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (pname == GL_LIGHT_MODEL_COLOR_CONTROL) {
66141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      update_specular( ctx );
66241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
66341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
66441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
66541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell/* In Mesa 3.5 we can reliably do native flatshading.
66641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell */
66741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830ShadeModel(GLcontext *ctx, GLenum mode)
66841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
66941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
67041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   I830_STATECHANGE(i830, I830_UPLOAD_CTX);
67141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
67241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
67341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell#define SHADE_MODE_MASK ((1<<10)|(1<<8)|(1<<6)|(1<<4))
67441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
67541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE3] &= ~SHADE_MODE_MASK;
67641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
67741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (mode == GL_FLAT) {
67841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell     i830->state.Ctx[I830_CTXREG_STATE3] |= (ALPHA_SHADE_MODE(SHADE_MODE_FLAT) |
67941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  FOG_SHADE_MODE(SHADE_MODE_FLAT) |
68041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  SPEC_SHADE_MODE(SHADE_MODE_FLAT) |
68141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  COLOR_SHADE_MODE(SHADE_MODE_FLAT));
68241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   } else {
68341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell     i830->state.Ctx[I830_CTXREG_STATE3] |= (ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) |
68441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  FOG_SHADE_MODE(SHADE_MODE_LINEAR) |
68541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  SPEC_SHADE_MODE(SHADE_MODE_LINEAR) |
68641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  COLOR_SHADE_MODE(SHADE_MODE_LINEAR));
68741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
68841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
68941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
69041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell/* =============================================================
69141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell * Fog
69241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell */
69341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830Fogfv(GLcontext *ctx, GLenum pname, const GLfloat *param)
69441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
69541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
69641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
69741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (INTEL_DEBUG&DEBUG_DRI)
69841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      fprintf(stderr, "%s\n", __FUNCTION__);
69941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
70041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (pname == GL_FOG_COLOR) {
70141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      GLuint color = (((GLubyte)(ctx->Fog.Color[0]*255.0F) << 16) |
70241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell		      ((GLubyte)(ctx->Fog.Color[1]*255.0F) << 8) |
70341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell		      ((GLubyte)(ctx->Fog.Color[2]*255.0F) << 0));
70441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
70541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
70641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_FOGCOLOR] = (_3DSTATE_FOG_COLOR_CMD | color);
70741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
70841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
70941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
71041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell/* =============================================================
71141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell */
71241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
71341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830Enable(GLcontext *ctx, GLenum cap, GLboolean state)
71441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
71541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830ContextPtr i830 = I830_CONTEXT(ctx);
71641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
71741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   switch(cap) {
71841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_LIGHTING:
71941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_COLOR_SUM:
72041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      update_specular( ctx );
72141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
72241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
72341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_ALPHA_TEST:
72441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
72541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_ALPHA_TEST_MASK;
72641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (state)
72741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_ALPHA_TEST;
72841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      else
72941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_ALPHA_TEST;
73041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
73141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
73241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
73341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_BLEND:
73441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830EvalLogicOpBlendState(ctx);
73541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
73641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
73741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_COLOR_LOGIC_OP:
73841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830EvalLogicOpBlendState(ctx);
73941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
74041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      /* Logicop doesn't seem to work at 16bpp:
74141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       */
74241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (i830->intel.intelScreen->cpp == 2)
74341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 FALLBACK( &i830->intel, I830_FALLBACK_LOGICOP, state );
74441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
74541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
74641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DITHER:
74741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
74841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_DITHER;
74941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
75041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (state)
75141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_DITHER;
75241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      else
75341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_2] |= DISABLE_DITHER;
75441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
75541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
75641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_DEPTH_TEST:
75741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
75841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_DEPTH_TEST_MASK;
75941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
76041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (state)
76141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_DEPTH_TEST;
76241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      else
76341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_DEPTH_TEST;
76441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
76541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      /* Also turn off depth writes when GL_DEPTH_TEST is disabled:
76641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       */
76741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830DepthMask( ctx, ctx->Depth.Mask );
76841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
76941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
77041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_SCISSOR_TEST:
77141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_BUFFERS);
77241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
77341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (state)
77441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Buffer[I830_DESTREG_SENABLE] =
77541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    (_3DSTATE_SCISSOR_ENABLE_CMD |
77641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	     ENABLE_SCISSOR_RECT);
77741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      else
77841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Buffer[I830_DESTREG_SENABLE] =
77941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    (_3DSTATE_SCISSOR_ENABLE_CMD |
78041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	     DISABLE_SCISSOR_RECT);
78141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
78241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
78341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
78441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_LINE_SMOOTH:
78541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
78641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
78741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_AA] &= ~AA_LINE_ENABLE;
78841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (state)
78941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_AA] |= AA_LINE_ENABLE;
79041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      else
79141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_AA] |= AA_LINE_DISABLE;
79241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
79341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
79441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_FOG:
79541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      I830_STATECHANGE(i830, I830_UPLOAD_CTX);
79641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_FOG_MASK;
79741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (state)
79841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_FOG;
79941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      else
80041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_FOG;
80141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
80241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
80341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_CULL_FACE:
80441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830CullFaceFrontFace(ctx, 0);
80541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
80641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
80741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_TEXTURE_2D:
80841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
80941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
81041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_STENCIL_TEST:
81141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (i830->intel.hw_stencil) {
81241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 I830_STATECHANGE(i830, I830_UPLOAD_CTX);
81341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
81441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 if (state) {
81541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_STENCIL_TEST;
81641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_STENCIL_WRITE;
81741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 } else {
81841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_STENCIL_TEST;
81941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_STENCIL_WRITE;
82041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_STENCIL_TEST;
82141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    i830->state.Ctx[I830_CTXREG_ENABLES_2] |= DISABLE_STENCIL_WRITE;
82241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 }
82341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      } else {
82441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 FALLBACK( &i830->intel, I830_FALLBACK_STENCIL, state );
82541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      }
82641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
82741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
82841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case GL_POLYGON_STIPPLE:
82941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      /* The stipple command worked on my 855GM box, but not my 845G.
83041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       * I'll do more testing later to find out exactly which hardware
83141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       * supports it.  Disabled for now.
83241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       */
83341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      if (i830->intel.hw_stipple &&
83441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	  i830->intel.reduced_primitive == GL_TRIANGLES)
83541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      {
83641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 I830_STATECHANGE(i830, I830_UPLOAD_STIPPLE);
83741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 i830->state.Stipple[I830_STPREG_ST1] &= ~ST1_ENABLE;
83841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	 if (state)
83941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell	    i830->state.Stipple[I830_STPREG_ST1] |= ST1_ENABLE;
84041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      }
84141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
84241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
84341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   default:
84441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      ;
84541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
84641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
84741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
84841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
84941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellstatic void i830_init_packets( i830ContextPtr i830 )
85041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
85141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   intelScreenPrivate *screen = i830->intel.intelScreen;
85241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
85341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   /* Zero all state */
85441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   memset(&i830->state, 0, sizeof(i830->state));
85541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
85641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   /* Set default blend state */
85741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.TexBlend[0][0] = (_3DSTATE_MAP_BLEND_OP_CMD(0) |
85841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXPIPE_COLOR |
85941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  ENABLE_TEXOUTPUT_WRT_SEL |
86041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXOP_OUTPUT_CURRENT |
86141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  DISABLE_TEX_CNTRL_STAGE |
86241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXOP_SCALE_1X |
86341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXOP_MODIFY_PARMS |
86441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXOP_LAST_STAGE |
86541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLENDOP_ARG1);
86641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.TexBlend[0][1] = (_3DSTATE_MAP_BLEND_OP_CMD(0) |
86741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXPIPE_ALPHA |
86841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  ENABLE_TEXOUTPUT_WRT_SEL |
86941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXOP_OUTPUT_CURRENT |
87041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXOP_SCALE_1X |
87141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXOP_MODIFY_PARMS |
87241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLENDOP_ARG1);
87341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.TexBlend[0][2] = (_3DSTATE_MAP_BLEND_ARG_CMD(0) |
87441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXPIPE_COLOR |
87541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLEND_ARG1 |
87641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLENDARG_MODIFY_PARMS |
87741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLENDARG_DIFFUSE);
87841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.TexBlend[0][3] = (_3DSTATE_MAP_BLEND_ARG_CMD(0) |
87941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXPIPE_ALPHA |
88041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLEND_ARG1 |
88141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLENDARG_MODIFY_PARMS |
88241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				  TEXBLENDARG_DIFFUSE);
88341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
88441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.TexBlendWordsUsed[0] = 4;
88541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
88641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
88741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_VF] =  0;
88841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_VF2] = 0;
88941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
89041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_AA] = (_3DSTATE_AA_CMD |
89141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				      AA_LINE_ECAAR_WIDTH_ENABLE |
89241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				      AA_LINE_ECAAR_WIDTH_1_0 |
89341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				      AA_LINE_REGION_WIDTH_ENABLE |
89441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				      AA_LINE_REGION_WIDTH_1_0 |
89541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell				      AA_LINE_DISABLE);
89641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
89741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_ENABLES_1] = (_3DSTATE_ENABLES_1_CMD |
89841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_LOGIC_OP |
89941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_STENCIL_TEST |
90041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_DEPTH_BIAS |
90141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_SPEC_ADD |
90241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_FOG |
90341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_ALPHA_TEST |
90441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_COLOR_BLEND |
90541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					     DISABLE_DEPTH_TEST);
90641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
90741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   if (i830->intel.hw_stencil) {
90841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_2] = (_3DSTATE_ENABLES_2_CMD |
90941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_STENCIL_WRITE |
91041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_TEX_CACHE |
91141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_DITHER |
91241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_COLOR_MASK |
91341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						/* set no color comps disabled */
91441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_COLOR_WRITE |
91541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_DEPTH_WRITE);
91641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   } else {
91741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Ctx[I830_CTXREG_ENABLES_2] = (_3DSTATE_ENABLES_2_CMD |
91841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						DISABLE_STENCIL_WRITE |
91941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_TEX_CACHE |
92041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_DITHER |
92141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_COLOR_MASK |
92241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						/* set no color comps disabled */
92341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_COLOR_WRITE |
92441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell						ENABLE_DEPTH_WRITE);
92541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
92641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
92741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE1] = (_3DSTATE_MODES_1_CMD |
92841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_COLR_BLND_FUNC |
92941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  BLENDFUNC_ADD |
93041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_SRC_BLND_FACTOR |
93141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  SRC_BLND_FACT(BLENDFACT_ONE) |
93241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_DST_BLND_FACTOR |
93341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  DST_BLND_FACT(BLENDFACT_ZERO) );
93441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
93541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE2] = (_3DSTATE_MODES_2_CMD |
93641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_GLOBAL_DEPTH_BIAS |
93741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  GLOBAL_DEPTH_BIAS(0) |
93841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_ALPHA_TEST_FUNC |
93941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ALPHA_TEST_FUNC(COMPAREFUNC_ALWAYS) |
94041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ALPHA_REF_VALUE(0) );
94141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
94241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE3] = (_3DSTATE_MODES_3_CMD |
94341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_DEPTH_TEST_FUNC |
94441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  DEPTH_TEST_FUNC(COMPAREFUNC_LESS) |
94541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_ALPHA_SHADE_MODE |
94641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) |
94741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_FOG_SHADE_MODE |
94841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  FOG_SHADE_MODE(SHADE_MODE_LINEAR) |
94941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_SPEC_SHADE_MODE |
95041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  SPEC_SHADE_MODE(SHADE_MODE_LINEAR) |
95141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_COLOR_SHADE_MODE |
95241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  COLOR_SHADE_MODE(SHADE_MODE_LINEAR) |
95341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_CULL_MODE |
95441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  CULLMODE_NONE);
95541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
95641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE4] = (_3DSTATE_MODES_4_CMD |
95741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_LOGIC_OP_FUNC |
95841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  LOGIC_OP_FUNC(LOGICOP_COPY) |
95941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_STENCIL_TEST_MASK |
96041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  STENCIL_TEST_MASK(0xff) |
96141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_STENCIL_WRITE_MASK |
96241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  STENCIL_WRITE_MASK(0xff));
96341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
96441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STENCILTST] = (_3DSTATE_STENCIL_TEST_CMD |
96541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      ENABLE_STENCIL_PARMS |
96641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      STENCIL_FAIL_OP(STENCILOP_KEEP) |
96741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      STENCIL_PASS_DEPTH_FAIL_OP(STENCILOP_KEEP) |
96841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      STENCIL_PASS_DEPTH_PASS_OP(STENCILOP_KEEP) |
96941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      ENABLE_STENCIL_TEST_FUNC |
97041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      STENCIL_TEST_FUNC(COMPAREFUNC_ALWAYS) |
97141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      ENABLE_STENCIL_REF_VALUE |
97241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      STENCIL_REF_VALUE(0) );
97341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
97441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_STATE5] = (_3DSTATE_MODES_5_CMD |
97541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  FLUSH_TEXTURE_CACHE |
97641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_SPRITE_POINT_TEX |
97741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  SPRITE_POINT_TEX_OFF |
97841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_FIXED_LINE_WIDTH |
97941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  FIXED_LINE_WIDTH(0x2) | /* 1.0 */
98041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  ENABLE_FIXED_POINT_WIDTH |
98141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					  FIXED_POINT_WIDTH(1) );
98241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
98341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_IALPHAB] = (_3DSTATE_INDPT_ALPHA_BLEND_CMD |
98441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					   DISABLE_INDPT_ALPHA_BLEND |
98541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					   ENABLE_ALPHA_BLENDFUNC |
98641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					   ABLENDFUNC_ADD);
98741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
98841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_FOGCOLOR] = (_3DSTATE_FOG_COLOR_CMD |
98941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    FOG_COLOR_RED(0) |
99041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    FOG_COLOR_GREEN(0) |
99141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					    FOG_COLOR_BLUE(0));
99241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
99341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_BLENDCOLOR0] = _3DSTATE_CONST_BLEND_COLOR_CMD;
99441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = 0;
99541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
99641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_MCSB0] = _3DSTATE_MAP_COORD_SETBIND_CMD;
99741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Ctx[I830_CTXREG_MCSB1] = (TEXBIND_SET3(TEXCOORDSRC_VTXSET_3) |
99841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					 TEXBIND_SET2(TEXCOORDSRC_VTXSET_2) |
99941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					 TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) |
100041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					 TEXBIND_SET0(TEXCOORDSRC_VTXSET_0));
100141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
100241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
100341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Stipple[I830_STPREG_ST0] = _3DSTATE_STIPPLE;
100441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
100541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_CBUFADDR0] = _3DSTATE_BUF_INFO_CMD;
100641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_CBUFADDR1] =
100741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      (BUF_3D_ID_COLOR_BACK |
100839c492bb14d706ffa8bf04f78048c05de735492bAlan Hourihane       BUF_3D_PITCH(screen->front.pitch) |  /* pitch in bytes */
100941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       BUF_3D_USE_FENCE);
101041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
101141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
101241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_DBUFADDR0] = _3DSTATE_BUF_INFO_CMD;
101341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_DBUFADDR1] =
101441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      (BUF_3D_ID_DEPTH |
101539c492bb14d706ffa8bf04f78048c05de735492bAlan Hourihane       BUF_3D_PITCH(screen->depth.pitch) |  /* pitch in bytes */
101641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell       BUF_3D_USE_FENCE);
1017402b2bea640ebf69f78d8122f98435dd3bbeb7dfBrian Paul   i830->state.Buffer[I830_DESTREG_DBUFADDR2] = screen->depth.offset;
101841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
101941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
102041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_DV0] = _3DSTATE_DST_BUF_VARS_CMD;
102141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
102241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   switch (screen->fbFormat) {
102341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case DV_PF_555:
102441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case DV_PF_565:
102541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Buffer[I830_DESTREG_DV1] = (DSTORG_HORT_BIAS(0x8) | /* .5 */
102641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DSTORG_VERT_BIAS(0x8) | /* .5 */
102741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      screen->fbFormat |
102841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DEPTH_IS_Z |
102941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DEPTH_FRMT_16_FIXED);
103041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
103141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   case DV_PF_8888:
103241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      i830->state.Buffer[I830_DESTREG_DV1] = (DSTORG_HORT_BIAS(0x8) | /* .5 */
103341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DSTORG_VERT_BIAS(0x8) | /* .5 */
103441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      screen->fbFormat |
103541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DEPTH_IS_Z |
103641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					      DEPTH_FRMT_24_FIXED_8_OTHER);
103741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell      break;
103841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   }
103941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
104041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_SENABLE] = (_3DSTATE_SCISSOR_ENABLE_CMD |
104141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell					       DISABLE_SCISSOR_RECT);
104241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_SR0] = _3DSTATE_SCISSOR_RECT_0_CMD;
104341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_SR1] = 0;
104441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.Buffer[I830_DESTREG_SR2] = 0;
104541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
104641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
104741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
104841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellvoid i830InitStateFuncs( struct dd_function_table *functions )
104941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
105041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->AlphaFunc = i830AlphaFunc;
105141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->BlendColor = i830BlendColor;
105241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->BlendEquationSeparate = i830BlendEquationSeparate;
105341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->BlendFuncSeparate = i830BlendFuncSeparate;
105441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->ColorMask = i830ColorMask;
105541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->CullFace = i830CullFaceFrontFace;
105641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->DepthFunc = i830DepthFunc;
105741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->DepthMask = i830DepthMask;
105841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->Enable = i830Enable;
105941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->Fogfv = i830Fogfv;
106041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->FrontFace = i830CullFaceFrontFace;
106141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->LightModelfv = i830LightModelfv;
106241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->LineWidth = i830LineWidth;
106341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->LogicOpcode = i830LogicOp;
106441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->PointSize = i830PointSize;
106541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->PolygonStipple = i830PolygonStipple;
106641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->Scissor = i830Scissor;
106741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   functions->ShadeModel = i830ShadeModel;
1068878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paul   functions->StencilFuncSeparate = i830StencilFuncSeparate;
1069878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paul   functions->StencilMaskSeparate = i830StencilMaskSeparate;
1070878c371e6cf6eb28afacc482d8aeaa0119f00d5bBrian Paul   functions->StencilOpSeparate = i830StencilOpSeparate;
107141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
107241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
107341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwellvoid i830InitState( i830ContextPtr i830 )
107441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell{
107541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   GLcontext *ctx = &i830->intel.ctx;
107641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
107741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830_init_packets( i830 );
107841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
1079a194bc3a8527ed41eead88632cc79ecabe4c81acBrian   _mesa_init_driver_state(ctx);
108041b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
108141b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   memcpy( &i830->initial, &i830->state, sizeof(i830->state) );
108241b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell
108341b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->current = &i830->state;
108441b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.emitted = 0;
108541b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell   i830->state.active = (I830_UPLOAD_TEXBLEND(0) |
108641b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell			 I830_UPLOAD_STIPPLE |
108741b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell			 I830_UPLOAD_CTX |
108841b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell			 I830_UPLOAD_BUFFERS);
108941b58954e1742493452b91d9ecdb761db5de3bedKeith Whitwell}
1090