1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glheader.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/context.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/macros.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/enums.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/fbobject.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/dd.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/state.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "drivers/common/driverfuncs.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_screen.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_batchbuffer.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_mipmap_tree.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_fbo.h" 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_buffers.h" 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i830_context.h" 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i830_reg.h" 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FILE_DEBUG_FLAG DEBUG_STATE 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830StencilFuncSeparate(struct gl_context * ctx, GLenum face, GLenum func, GLint ref, 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint mask) 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int test = intel_translate_compare_func(func); 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mask = mask & 0xff; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s : func: %s, ref : 0x%x, mask: 0x%x\n", __FUNCTION__, 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(func), ref, mask); 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE4] &= ~MODE4_ENABLE_STENCIL_TEST_MASK; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE4] |= (ENABLE_STENCIL_TEST_MASK | 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_TEST_MASK(mask)); 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STENCILTST] &= ~(STENCIL_REF_VALUE_MASK | 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_TEST_FUNC_MASK); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STENCILTST] |= (ENABLE_STENCIL_REF_VALUE | 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_TEST_FUNC | 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_REF_VALUE(ref) | 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_TEST_FUNC(test)); 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830StencilMaskSeparate(struct gl_context * ctx, GLenum face, GLuint mask) 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s : mask 0x%x\n", __FUNCTION__, mask); 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mask = mask & 0xff; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE4] &= ~MODE4_ENABLE_STENCIL_WRITE_MASK; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE4] |= (ENABLE_STENCIL_WRITE_MASK | 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_WRITE_MASK(mask)); 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830StencilOpSeparate(struct gl_context * ctx, GLenum face, GLenum fail, GLenum zfail, 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum zpass) 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int fop, dfop, dpop; 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s: fail : %s, zfail: %s, zpass : %s\n", __FUNCTION__, 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(fail), 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(zfail), 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(zpass)); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = 0; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = 0; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = 0; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (fail) { 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_KEEP: 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_KEEP; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ZERO: 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_ZERO; 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_REPLACE: 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_REPLACE; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INCR: 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_INCRSAT; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DECR: 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_DECRSAT; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INCR_WRAP: 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_INCR; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DECR_WRAP: 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_DECR; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INVERT: 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fop = STENCILOP_INVERT; 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (zfail) { 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_KEEP: 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_KEEP; 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ZERO: 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_ZERO; 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_REPLACE: 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_REPLACE; 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INCR: 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_INCRSAT; 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DECR: 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_DECRSAT; 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INCR_WRAP: 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_INCR; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DECR_WRAP: 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_DECR; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INVERT: 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dfop = STENCILOP_INVERT; 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (zpass) { 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_KEEP: 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_KEEP; 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ZERO: 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_ZERO; 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_REPLACE: 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_REPLACE; 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INCR: 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_INCRSAT; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DECR: 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_DECRSAT; 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INCR_WRAP: 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_INCR; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DECR_WRAP: 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_DECR; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INVERT: 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpop = STENCILOP_INVERT; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STENCILTST] &= ~(STENCIL_OPS_MASK); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STENCILTST] |= (ENABLE_STENCIL_PARMS | 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_FAIL_OP(fop) | 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_PASS_DEPTH_FAIL_OP 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (dfop) | 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_PASS_DEPTH_PASS_OP 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (dpop)); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830AlphaFunc(struct gl_context * ctx, GLenum func, GLfloat ref) 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int test = intel_translate_compare_func(func); 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte refByte; 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint refInt; 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UNCLAMPED_FLOAT_TO_UBYTE(refByte, ref); 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org refInt = (GLuint) refByte; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE2] &= ~ALPHA_TEST_REF_MASK; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE2] |= (ENABLE_ALPHA_TEST_FUNC | 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_ALPHA_REF_VALUE | 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ALPHA_TEST_FUNC(test) | 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ALPHA_REF_VALUE(refInt)); 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Makes sure that the proper enables are set for LogicOp, Independant Alpha 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Blend, and Blending. It needs to be called from numerous places where we 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * could change the LogicOp or Independant Alpha Blend without subsequent 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * calls to glEnable. 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \todo 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This function is substantially different from the old i830-specific driver. 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * I'm not sure which is correct. 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830EvalLogicOpBlendState(struct gl_context * ctx) 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Color.ColorLogicOpEnabled) { 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~(ENABLE_COLOR_BLEND | 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_LOGIC_OP_MASK); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= (DISABLE_COLOR_BLEND | 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_LOGIC_OP); 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (ctx->Color.BlendEnabled) { 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~(ENABLE_COLOR_BLEND | 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_LOGIC_OP_MASK); 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= (ENABLE_COLOR_BLEND | 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_LOGIC_OP); 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~(ENABLE_COLOR_BLEND | 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_LOGIC_OP_MASK); 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= (DISABLE_COLOR_BLEND | 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_LOGIC_OP); 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830BlendColor(struct gl_context * ctx, const GLfloat color[4]) 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte r, g, b, a; 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UNCLAMPED_FLOAT_TO_UBYTE(r, color[RCOMP]); 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UNCLAMPED_FLOAT_TO_UBYTE(g, color[GCOMP]); 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UNCLAMPED_FLOAT_TO_UBYTE(b, color[BCOMP]); 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UNCLAMPED_FLOAT_TO_UBYTE(a, color[ACOMP]); 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (a << 24) | (r << 16) | (g << 8) | b; 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Sets both the blend equation (called "function" in i830 docs) and the 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * blend function (called "factor" in i830 docs). This is done in a single 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * function because some blend equations (i.e., \c GL_MIN and \c GL_MAX) 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * change the interpretation of the blend function. 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830_set_blend_state(struct gl_context * ctx) 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int funcA; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int funcRGB; 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int eqnA; 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int eqnRGB; 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int iab; 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int s1; 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org funcRGB = 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SRC_BLND_FACT(intel_translate_blend_factor(ctx->Color.Blend[0].SrcRGB)) 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | DST_BLND_FACT(intel_translate_blend_factor(ctx->Color.Blend[0].DstRGB)); 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (ctx->Color.Blend[0].EquationRGB) { 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FUNC_ADD: 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnRGB = BLENDFUNC_ADD; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MIN: 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnRGB = BLENDFUNC_MIN; 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAX: 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnRGB = BLENDFUNC_MAX; 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FUNC_SUBTRACT: 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnRGB = BLENDFUNC_SUB; 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FUNC_REVERSE_SUBTRACT: 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnRGB = BLENDFUNC_RVRSE_SUB; 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fprintf(stderr, "[%s:%u] Invalid RGB blend equation (0x%04x).\n", 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, __LINE__, ctx->Color.Blend[0].EquationRGB); 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org funcA = SRC_ABLEND_FACT(intel_translate_blend_factor(ctx->Color.Blend[0].SrcA)) 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | DST_ABLEND_FACT(intel_translate_blend_factor(ctx->Color.Blend[0].DstA)); 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (ctx->Color.Blend[0].EquationA) { 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FUNC_ADD: 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnA = BLENDFUNC_ADD; 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MIN: 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnA = BLENDFUNC_MIN; 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAX: 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnA = BLENDFUNC_MAX; 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FUNC_SUBTRACT: 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnA = BLENDFUNC_SUB; 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FUNC_REVERSE_SUBTRACT: 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org eqnA = BLENDFUNC_RVRSE_SUB; 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fprintf(stderr, "[%s:%u] Invalid alpha blend equation (0x%04x).\n", 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, __LINE__, ctx->Color.Blend[0].EquationA); 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iab = eqnA | funcA 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | _3DSTATE_INDPT_ALPHA_BLEND_CMD 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | ENABLE_SRC_ABLEND_FACTOR | ENABLE_DST_ABLEND_FACTOR 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | ENABLE_ALPHA_BLENDFUNC; 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org s1 = eqnRGB | funcRGB 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | _3DSTATE_MODES_1_CMD 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | ENABLE_SRC_BLND_FACTOR | ENABLE_DST_BLND_FACTOR 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | ENABLE_COLR_BLND_FUNC; 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((eqnA | funcA) != (eqnRGB | funcRGB)) 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iab |= ENABLE_INDPT_ALPHA_BLEND; 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org iab |= DISABLE_INDPT_ALPHA_BLEND; 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (iab != i830->state.Ctx[I830_CTXREG_IALPHAB] || 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org s1 != i830->state.Ctx[I830_CTXREG_STATE1]) { 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_IALPHAB] = iab; 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE1] = s1; 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This will catch a logicop blend equation. It will also ensure 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * independant alpha blend is really in the correct state (either enabled 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or disabled) if blending is already enabled. 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830EvalLogicOpBlendState(ctx); 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (0) { 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fprintf(stderr, 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "[%s:%u] STATE1: 0x%08x IALPHAB: 0x%08x blend is %sabled\n", 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, __LINE__, i830->state.Ctx[I830_CTXREG_STATE1], 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_IALPHAB], 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ctx->Color.BlendEnabled) ? "en" : "dis"); 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830BlendEquationSeparate(struct gl_context * ctx, GLenum modeRGB, GLenum modeA) 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s -> %s, %s\n", __FUNCTION__, 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(modeRGB), 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(modeA)); 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) modeRGB; 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) modeA; 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830_set_blend_state(ctx); 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830BlendFuncSeparate(struct gl_context * ctx, GLenum sfactorRGB, 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLenum dfactorRGB, GLenum sfactorA, GLenum dfactorA) 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s -> RGB(%s, %s) A(%s, %s)\n", __FUNCTION__, 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(sfactorRGB), 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(dfactorRGB), 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(sfactorA), 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(dfactorA)); 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) sfactorRGB; 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dfactorRGB; 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) sfactorA; 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dfactorA; 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830_set_blend_state(ctx); 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830DepthFunc(struct gl_context * ctx, GLenum func) 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int test = intel_translate_compare_func(func); 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] &= ~DEPTH_TEST_FUNC_MASK; 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] |= (ENABLE_DEPTH_TEST_FUNC | 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEPTH_TEST_FUNC(test)); 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830DepthMask(struct gl_context * ctx, GLboolean flag) 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s flag (%d)\n", __FUNCTION__, flag); 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->DrawBuffer || !ctx->DrawBuffer->Visual.depthBits) 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = false; 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_DIS_DEPTH_WRITE_MASK; 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (flag && ctx->Depth.Test) 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_DEPTH_WRITE; 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] |= DISABLE_DEPTH_WRITE; 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Called from ctx->Driver.Viewport() */ 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830Viewport(struct gl_context * ctx, 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint x, GLint y, GLsizei width, GLsizei height) 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intelCalcViewport(ctx); 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Called from ctx->Driver.DepthRange() */ 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830DepthRange(struct gl_context * ctx, GLclampd nearval, GLclampd farval) 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intelCalcViewport(ctx); 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* ============================================================= 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Polygon stipple 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The i830 supports a 4x4 stipple natively, GL wants 32x32. 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fortunately stipple is usually a repeating pattern. 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830PolygonStipple(struct gl_context * ctx, const GLubyte * mask) 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLubyte *m; 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte p[4]; 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i, j, k; 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int active = (ctx->Polygon.StippleFlag && 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->intel.reduced_primitive == GL_TRIANGLES); 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint newMask; 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (active) { 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_STIPPLE); 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Stipple[I830_STPREG_ST1] &= ~ST1_ENABLE; 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Use the already unpacked stipple data from the context rather than the 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * uninterpreted mask passed in. 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mask = (const GLubyte *)ctx->PolygonStipple; 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m = mask; 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[0] = mask[12] & 0xf; 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[0] |= p[0] << 4; 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[1] = mask[8] & 0xf; 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[1] |= p[1] << 4; 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[2] = mask[4] & 0xf; 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[2] |= p[2] << 4; 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[3] = mask[0] & 0xf; 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org p[3] |= p[3] << 4; 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (k = 0; k < 8; k++) 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j = 3; j >= 0; j--) 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < 4; i++, m++) 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*m != p[j]) { 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->intel.hw_stipple = 0; 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org newMask = (((p[0] & 0xf) << 0) | 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((p[1] & 0xf) << 4) | 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((p[2] & 0xf) << 8) | ((p[3] & 0xf) << 12)); 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (newMask == 0xffff || newMask == 0x0) { 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this is needed to make conform pass */ 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->intel.hw_stipple = 0; 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Stipple[I830_STPREG_ST1] &= ~0xffff; 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Stipple[I830_STPREG_ST1] |= newMask; 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->intel.hw_stipple = 1; 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (active) 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Stipple[I830_STPREG_ST1] |= ST1_ENABLE; 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* ============================================================= 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Hardware clipping 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830Scissor(struct gl_context * ctx, GLint x, GLint y, GLsizei w, GLsizei h) 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x1, y1, x2, y2; 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->DrawBuffer) 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s %d,%d %dx%d\n", __FUNCTION__, x, y, w, h); 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) { 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org x1 = x; 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org y1 = ctx->DrawBuffer->Height - (y + h); 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org x2 = x + w - 1; 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org y2 = y1 + h - 1; 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s %d..%d,%d..%d (inverted)\n", __FUNCTION__, x1, x2, y1, y2); 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FBO - not inverted 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org x1 = x; 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org y1 = y; 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org x2 = x + w - 1; 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org y2 = y + h - 1; 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s %d..%d,%d..%d (not inverted)\n", __FUNCTION__, x1, x2, y1, y2); 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org x1 = CLAMP(x1, 0, ctx->DrawBuffer->Width - 1); 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org y1 = CLAMP(y1, 0, ctx->DrawBuffer->Height - 1); 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org x2 = CLAMP(x2, 0, ctx->DrawBuffer->Width - 1); 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org y2 = CLAMP(y2, 0, ctx->DrawBuffer->Height - 1); 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s %d..%d,%d..%d (clamped)\n", __FUNCTION__, x1, x2, y1, y2); 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_BUFFERS); 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SR1] = (y1 << 16) | (x1 & 0xffff); 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SR2] = (y2 << 16) | (x2 & 0xffff); 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830LogicOp(struct gl_context * ctx, GLenum opcode) 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int tmp = intel_translate_logic_op(opcode); 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE4] &= ~LOGICOP_MASK; 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE4] |= LOGIC_OP_FUNC(tmp); 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830CullFaceFrontFace(struct gl_context * ctx, GLenum unused) 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint mode; 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Polygon.CullFlag) { 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode = CULLMODE_NONE; 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (ctx->Polygon.CullFaceMode != GL_FRONT_AND_BACK) { 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode = CULLMODE_CW; 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.CullFaceMode == GL_FRONT) 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode ^= (CULLMODE_CW ^ CULLMODE_CCW); 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.FrontFace != GL_CCW) 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode ^= (CULLMODE_CW ^ CULLMODE_CCW); 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mode = CULLMODE_BOTH; 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] &= ~CULLMODE_MASK; 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] |= ENABLE_CULL_MODE | mode; 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830LineWidth(struct gl_context * ctx, GLfloat widthf) 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width; 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int state5; 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width = (int) (widthf * 2); 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width = CLAMP(width, 1, 15); 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state5 = i830->state.Ctx[I830_CTXREG_STATE5] & ~FIXED_LINE_WIDTH_MASK; 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state5 |= (ENABLE_FIXED_LINE_WIDTH | FIXED_LINE_WIDTH(width)); 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state5 != i830->state.Ctx[I830_CTXREG_STATE5]) { 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE5] = state5; 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830PointSize(struct gl_context * ctx, GLfloat size) 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint point_size = (int) size; 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org point_size = CLAMP(point_size, 1, 256); 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE5] &= ~FIXED_POINT_WIDTH_MASK; 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE5] |= (ENABLE_FIXED_POINT_WIDTH | 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FIXED_POINT_WIDTH(point_size)); 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* ============================================================= 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Color masks 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830ColorMask(struct gl_context * ctx, 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean r, GLboolean g, GLboolean b, GLboolean a) 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint tmp = 0; 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s r(%d) g(%d) b(%d) a(%d)\n", __FUNCTION__, r, g, b, a); 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org tmp = ((i830->state.Ctx[I830_CTXREG_ENABLES_2] & ~WRITEMASK_MASK) | 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLOR_MASK | 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLOR_WRITE | 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((!r) << WRITEMASK_RED_SHIFT) | 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((!g) << WRITEMASK_GREEN_SHIFT) | 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((!b) << WRITEMASK_BLUE_SHIFT) | ((!a) << WRITEMASK_ALPHA_SHIFT)); 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (tmp != i830->state.Ctx[I830_CTXREG_ENABLES_2]) { 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] = tmp; 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgupdate_specular(struct gl_context * ctx) 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_SPEC_ADD_MASK; 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_need_secondary_color(ctx)) 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_SPEC_ADD; 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_SPEC_ADD; 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830LightModelfv(struct gl_context * ctx, GLenum pname, const GLfloat * param) 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pname == GL_LIGHT_MODEL_COLOR_CONTROL) { 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org update_specular(ctx); 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* In Mesa 3.5 we can reliably do native flatshading. 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830ShadeModel(struct gl_context * ctx, GLenum mode) 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SHADE_MODE_MASK ((1<<10)|(1<<8)|(1<<6)|(1<<4)) 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] &= ~SHADE_MODE_MASK; 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode == GL_FLAT) { 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] |= 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ALPHA_SHADE_MODE(SHADE_MODE_FLAT) | FOG_SHADE_MODE(SHADE_MODE_FLAT) 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | SPEC_SHADE_MODE(SHADE_MODE_FLAT) | 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COLOR_SHADE_MODE(SHADE_MODE_FLAT)); 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] |= 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) | 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOG_SHADE_MODE(SHADE_MODE_LINEAR) | 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SPEC_SHADE_MODE(SHADE_MODE_LINEAR) | 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COLOR_SHADE_MODE(SHADE_MODE_LINEAR)); 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* ============================================================= 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fog 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830Fogfv(struct gl_context * ctx, GLenum pname, const GLfloat * param) 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DBG("%s\n", __FUNCTION__); 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pname == GL_FOG_COLOR) { 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint color = (((GLubyte) (ctx->Fog.Color[0] * 255.0F) << 16) | 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((GLubyte) (ctx->Fog.Color[1] * 255.0F) << 8) | 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((GLubyte) (ctx->Fog.Color[2] * 255.0F) << 0)); 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_FOGCOLOR] = 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (_3DSTATE_FOG_COLOR_CMD | color); 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* ============================================================= 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830Enable(struct gl_context * ctx, GLenum cap, GLboolean state) 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHTING: 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_SUM: 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org update_specular(ctx); 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_TEST: 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_ALPHA_TEST_MASK; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_ALPHA_TEST; 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_ALPHA_TEST; 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLEND: 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830EvalLogicOpBlendState(ctx); 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_LOGIC_OP: 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830EvalLogicOpBlendState(ctx); 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Logicop doesn't seem to work at 16bpp: 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i830->intel.ctx.Visual.rgbBits == 16) 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALLBACK(&i830->intel, I830_FALLBACK_LOGICOP, state); 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DITHER: 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] &= ~ENABLE_DITHER; 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_DITHER; 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] |= DISABLE_DITHER; 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_TEST: 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_DEPTH_TEST_MASK; 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->DrawBuffer || !ctx->DrawBuffer->Visual.depthBits) 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state = false; 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_DEPTH_TEST; 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_DEPTH_TEST; 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Also turn off depth writes when GL_DEPTH_TEST is disabled: 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830DepthMask(ctx, ctx->Depth.Mask); 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SCISSOR_TEST: 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_BUFFERS); 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SENABLE] = 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (_3DSTATE_SCISSOR_ENABLE_CMD | ENABLE_SCISSOR_RECT); 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SENABLE] = 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT); 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LINE_SMOOTH: 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_AA] &= ~AA_LINE_ENABLE; 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_AA] |= AA_LINE_ENABLE; 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_AA] |= AA_LINE_DISABLE; 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FOG: 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_DIS_FOG_MASK; 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_FOG; 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_FOG; 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CULL_FACE: 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830CullFaceFrontFace(ctx, 0); 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_2D: 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_TEST: 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool hw_stencil = false; 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->DrawBuffer) { 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_renderbuffer *irbStencil 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org = intel_get_renderbuffer(ctx->DrawBuffer, BUFFER_STENCIL); 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org hw_stencil = (irbStencil && irbStencil->mt); 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (hw_stencil) { 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_CTX); 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) { 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= ENABLE_STENCIL_TEST; 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] |= ENABLE_STENCIL_WRITE; 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] &= ~ENABLE_STENCIL_TEST; 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] &= 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ~ENABLE_STENCIL_WRITE; 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] |= DISABLE_STENCIL_TEST; 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] |= 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_STENCIL_WRITE; 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALLBACK(&i830->intel, I830_FALLBACK_STENCIL, state); 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_STIPPLE: 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The stipple command worked on my 855GM box, but not my 845G. 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * I'll do more testing later to find out exactly which hardware 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * supports it. Disabled for now. 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i830->intel.hw_stipple && 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->intel.reduced_primitive == GL_TRIANGLES) { 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_STIPPLE); 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Stipple[I830_STPREG_ST1] &= ~ST1_ENABLE; 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Stipple[I830_STPREG_ST1] |= ST1_ENABLE; 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ; 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830_init_packets(struct i830_context *i830) 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Zero all state */ 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(&i830->state, 0, sizeof(i830->state)); 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Set default blend state */ 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.TexBlend[0][0] = (_3DSTATE_MAP_BLEND_OP_CMD(0) | 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXPIPE_COLOR | 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_TEXOUTPUT_WRT_SEL | 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXOP_OUTPUT_CURRENT | 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_TEX_CNTRL_STAGE | 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXOP_SCALE_1X | 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXOP_MODIFY_PARMS | 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXOP_LAST_STAGE | TEXBLENDOP_ARG1); 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.TexBlend[0][1] = (_3DSTATE_MAP_BLEND_OP_CMD(0) | 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXPIPE_ALPHA | 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_TEXOUTPUT_WRT_SEL | 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXOP_OUTPUT_CURRENT | 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXOP_SCALE_1X | 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXOP_MODIFY_PARMS | TEXBLENDOP_ARG1); 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.TexBlend[0][2] = (_3DSTATE_MAP_BLEND_ARG_CMD(0) | 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXPIPE_COLOR | 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBLEND_ARG1 | 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBLENDARG_MODIFY_PARMS | 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBLENDARG_DIFFUSE); 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.TexBlend[0][3] = (_3DSTATE_MAP_BLEND_ARG_CMD(0) | 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXPIPE_ALPHA | 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBLEND_ARG1 | 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBLENDARG_MODIFY_PARMS | 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBLENDARG_DIFFUSE); 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.TexBlendWordsUsed[0] = 4; 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_VF] = 0; 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_VF2] = 0; 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_AA] = (_3DSTATE_AA_CMD | 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AA_LINE_ECAAR_WIDTH_ENABLE | 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AA_LINE_ECAAR_WIDTH_1_0 | 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AA_LINE_REGION_WIDTH_ENABLE | 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AA_LINE_REGION_WIDTH_1_0 | 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AA_LINE_DISABLE); 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_1] = (_3DSTATE_ENABLES_1_CMD | 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_LOGIC_OP | 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_STENCIL_TEST | 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_DEPTH_BIAS | 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_SPEC_ADD | 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_FOG | 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_ALPHA_TEST | 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_COLOR_BLEND | 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_DEPTH_TEST); 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 000 /* XXX all the stencil enable state is set in i830Enable(), right? */ 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i830->intel.hw_stencil) { 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] = (_3DSTATE_ENABLES_2_CMD | 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_WRITE | 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_TEX_CACHE | 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_DITHER | 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLOR_MASK | 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* set no color comps disabled */ 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLOR_WRITE | 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_DEPTH_WRITE); 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_ENABLES_2] = (_3DSTATE_ENABLES_2_CMD | 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_STENCIL_WRITE | 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_TEX_CACHE | 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_DITHER | 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLOR_MASK | 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* set no color comps disabled */ 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLOR_WRITE | 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_DEPTH_WRITE); 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE1] = (_3DSTATE_MODES_1_CMD | 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLR_BLND_FUNC | 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BLENDFUNC_ADD | 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_SRC_BLND_FACTOR | 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SRC_BLND_FACT(BLENDFACT_ONE) | 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_DST_BLND_FACTOR | 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DST_BLND_FACT(BLENDFACT_ZERO)); 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE2] = (_3DSTATE_MODES_2_CMD | 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_GLOBAL_DEPTH_BIAS | 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLOBAL_DEPTH_BIAS(0) | 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_ALPHA_TEST_FUNC | 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ALPHA_TEST_FUNC(COMPAREFUNC_ALWAYS) 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | ALPHA_REF_VALUE(0)); 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE3] = (_3DSTATE_MODES_3_CMD | 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_DEPTH_TEST_FUNC | 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEPTH_TEST_FUNC(COMPAREFUNC_LESS) | 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_ALPHA_SHADE_MODE | 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ALPHA_SHADE_MODE(SHADE_MODE_LINEAR) 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | ENABLE_FOG_SHADE_MODE | 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOG_SHADE_MODE(SHADE_MODE_LINEAR) | 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_SPEC_SHADE_MODE | 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SPEC_SHADE_MODE(SHADE_MODE_LINEAR) | 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_COLOR_SHADE_MODE | 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COLOR_SHADE_MODE(SHADE_MODE_LINEAR) 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | ENABLE_CULL_MODE | CULLMODE_NONE); 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE4] = (_3DSTATE_MODES_4_CMD | 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_LOGIC_OP_FUNC | 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOGIC_OP_FUNC(LOGICOP_COPY) | 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_TEST_MASK | 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_TEST_MASK(0xff) | 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_WRITE_MASK | 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_WRITE_MASK(0xff)); 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STENCILTST] = (_3DSTATE_STENCIL_TEST_CMD | 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_PARMS | 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_FAIL_OP(STENCILOP_KEEP) 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_PASS_DEPTH_FAIL_OP 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (STENCILOP_KEEP) | 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_PASS_DEPTH_PASS_OP 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (STENCILOP_KEEP) | 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_TEST_FUNC | 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_TEST_FUNC 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (COMPAREFUNC_ALWAYS) | 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_STENCIL_REF_VALUE | 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org STENCIL_REF_VALUE(0)); 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_STATE5] = (_3DSTATE_MODES_5_CMD | FLUSH_TEXTURE_CACHE | ENABLE_SPRITE_POINT_TEX | SPRITE_POINT_TEX_OFF | ENABLE_FIXED_LINE_WIDTH | FIXED_LINE_WIDTH(0x2) | /* 1.0 */ 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_FIXED_POINT_WIDTH | 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FIXED_POINT_WIDTH(1)); 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_IALPHAB] = (_3DSTATE_INDPT_ALPHA_BLEND_CMD | 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_INDPT_ALPHA_BLEND | 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_ALPHA_BLENDFUNC | 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ABLENDFUNC_ADD); 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_FOGCOLOR] = (_3DSTATE_FOG_COLOR_CMD | 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOG_COLOR_RED(0) | 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOG_COLOR_GREEN(0) | 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOG_COLOR_BLUE(0)); 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_BLENDCOLOR0] = _3DSTATE_CONST_BLEND_COLOR_CMD; 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = 0; 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_MCSB0] = _3DSTATE_MAP_COORD_SETBIND_CMD; 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Ctx[I830_CTXREG_MCSB1] = (TEXBIND_SET3(TEXCOORDSRC_VTXSET_3) | 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBIND_SET2(TEXCOORDSRC_VTXSET_2) | 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) | 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TEXBIND_SET0(TEXCOORDSRC_VTXSET_0)); 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.RasterRules[I830_RASTER_RULES] = (_3DSTATE_RASTER_RULES_CMD | 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_POINT_RASTER_RULE | 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OGL_POINT_RASTER_RULE | 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_LINE_STRIP_PROVOKE_VRTX | 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_TRI_FAN_PROVOKE_VRTX | 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ENABLE_TRI_STRIP_PROVOKE_VRTX | 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LINE_STRIP_PROVOKE_VRTX(1) | 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_FAN_PROVOKE_VRTX(2) | 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_STRIP_PROVOKE_VRTX(2)); 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Stipple[I830_STPREG_ST0] = _3DSTATE_STIPPLE; 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_DV0] = _3DSTATE_DST_BUF_VARS_CMD; 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SENABLE] = (_3DSTATE_SCISSOR_ENABLE_CMD | 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DISABLE_SCISSOR_RECT); 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SR0] = _3DSTATE_SCISSOR_RECT_0_CMD; 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SR1] = 0; 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.Buffer[I830_DESTREG_SR2] = 0; 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830_update_provoking_vertex(struct gl_context * ctx) 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i830_context *i830 = i830_context(ctx); 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_STATECHANGE(i830, I830_UPLOAD_RASTER_RULES); 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.RasterRules[I830_RASTER_RULES] &= ~(LINE_STRIP_PROVOKE_VRTX_MASK | 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_FAN_PROVOKE_VRTX_MASK | 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_STRIP_PROVOKE_VRTX_MASK); 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* _NEW_LIGHT */ 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION) { 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.RasterRules[I830_RASTER_RULES] |= (LINE_STRIP_PROVOKE_VRTX(1) | 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_FAN_PROVOKE_VRTX(2) | 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_STRIP_PROVOKE_VRTX(2)); 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.RasterRules[I830_RASTER_RULES] |= (LINE_STRIP_PROVOKE_VRTX(0) | 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_FAN_PROVOKE_VRTX(1) | 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRI_STRIP_PROVOKE_VRTX(0)); 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Fallback to swrast for select and feedback. 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830RenderMode(struct gl_context *ctx, GLenum mode) 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = intel_context(ctx); 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALLBACK(intel, INTEL_FALLBACK_RENDERMODE, (mode != GL_RENDER)); 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830InitStateFuncs(struct dd_function_table *functions) 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->AlphaFunc = i830AlphaFunc; 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->BlendColor = i830BlendColor; 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->BlendEquationSeparate = i830BlendEquationSeparate; 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->BlendFuncSeparate = i830BlendFuncSeparate; 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->ColorMask = i830ColorMask; 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->CullFace = i830CullFaceFrontFace; 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->DepthFunc = i830DepthFunc; 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->DepthMask = i830DepthMask; 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->Enable = i830Enable; 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->Fogfv = i830Fogfv; 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->FrontFace = i830CullFaceFrontFace; 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->LightModelfv = i830LightModelfv; 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->LineWidth = i830LineWidth; 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->LogicOpcode = i830LogicOp; 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->PointSize = i830PointSize; 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->PolygonStipple = i830PolygonStipple; 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->RenderMode = i830RenderMode; 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->Scissor = i830Scissor; 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->ShadeModel = i830ShadeModel; 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->StencilFuncSeparate = i830StencilFuncSeparate; 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->StencilMaskSeparate = i830StencilMaskSeparate; 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->StencilOpSeparate = i830StencilOpSeparate; 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->DepthRange = i830DepthRange; 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org functions->Viewport = i830Viewport; 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi830InitState(struct i830_context *i830) 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_context *ctx = &i830->intel.ctx; 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830_init_packets(i830); 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_init_driver_state(ctx); 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.emitted = 0; 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i830->state.active = (I830_UPLOAD_INVARIENT | 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_UPLOAD_RASTER_RULES | 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_UPLOAD_TEXBLEND(0) | 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_UPLOAD_STIPPLE | 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I830_UPLOAD_CTX | I830_UPLOAD_BUFFERS); 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1158