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