1d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul/************************************************************************** 2d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * 3d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 4d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * All Rights Reserved. 5d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * 6d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * Permission is hereby granted, free of charge, to any person obtaining a 7d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * copy of this software and associated documentation files (the 8d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * "Software"), to deal in the Software without restriction, including 9d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * without limitation the rights to use, copy, modify, merge, publish, 10d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * distribute, sub license, and/or sell copies of the Software, and to 11d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * permit persons to whom the Software is furnished to do so, subject to 12d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * the following conditions: 13d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * 14d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * The above copyright notice and this permission notice (including the 15d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * next paragraph) shall be included in all copies or substantial portions 16d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * of the Software. 17d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * 18d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul * 26d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul **************************************************************************/ 27d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 28d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 29d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "main/glheader.h" 30d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "main/context.h" 31d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "main/macros.h" 32d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "main/enums.h" 33d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "main/colormac.h" 34d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "main/dd.h" 35d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 36d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "intel_screen.h" 37d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul#include "intel_context.h" 38d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 39d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulint 40d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulintel_translate_shadow_compare_func(GLenum func) 41d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul{ 42d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul switch (func) { 43d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_NEVER: 44d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_ALWAYS; 45d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_LESS: 46d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_LEQUAL; 47d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_LEQUAL: 48d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_LESS; 49d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_GREATER: 50d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_GEQUAL; 51d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_GEQUAL: 52d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_GREATER; 53d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_NOTEQUAL: 54d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_EQUAL; 55d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_EQUAL: 56d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_NOTEQUAL; 57d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ALWAYS: 58d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_NEVER; 59d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul } 60d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 61d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, func); 62d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_NEVER; 63d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul} 64d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 65d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulint 66d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulintel_translate_compare_func(GLenum func) 67d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul{ 68d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul switch (func) { 69d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_NEVER: 70d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_NEVER; 71d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_LESS: 72d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_LESS; 73d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_LEQUAL: 74d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_LEQUAL; 75d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_GREATER: 76d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_GREATER; 77d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_GEQUAL: 78d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_GEQUAL; 79d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_NOTEQUAL: 80d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_NOTEQUAL; 81d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_EQUAL: 82d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_EQUAL; 83d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ALWAYS: 84d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_ALWAYS; 85d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul } 86d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 87d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, func); 88d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return COMPAREFUNC_ALWAYS; 89d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul} 90d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 91d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulint 92d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulintel_translate_stencil_op(GLenum op) 93d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul{ 94d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul switch (op) { 95d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_KEEP: 96d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_KEEP; 97d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ZERO: 98d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_ZERO; 99d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_REPLACE: 100d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_REPLACE; 101d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_INCR: 102d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_INCRSAT; 103d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_DECR: 104d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_DECRSAT; 105d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_INCR_WRAP: 106d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_INCR; 107d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_DECR_WRAP: 108d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_DECR; 109d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_INVERT: 110d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_INVERT; 111d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul default: 112d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return STENCILOP_ZERO; 113d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul } 114d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul} 115d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 116d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulint 117d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulintel_translate_blend_factor(GLenum factor) 118d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul{ 119d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul switch (factor) { 120d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ZERO: 121d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_ZERO; 122d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_SRC_ALPHA: 123d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_SRC_ALPHA; 124d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ONE: 125d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_ONE; 126d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_SRC_COLOR: 127d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_SRC_COLR; 128d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ONE_MINUS_SRC_COLOR: 129d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_INV_SRC_COLR; 130d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_DST_COLOR: 131d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_DST_COLR; 132d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ONE_MINUS_DST_COLOR: 133d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_INV_DST_COLR; 134d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ONE_MINUS_SRC_ALPHA: 135d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_INV_SRC_ALPHA; 136d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_DST_ALPHA: 137d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_DST_ALPHA; 138d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ONE_MINUS_DST_ALPHA: 139d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_INV_DST_ALPHA; 140d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_SRC_ALPHA_SATURATE: 141d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_SRC_ALPHA_SATURATE; 142d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_CONSTANT_COLOR: 143d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_CONST_COLOR; 144d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ONE_MINUS_CONSTANT_COLOR: 145d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_INV_CONST_COLOR; 146d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_CONSTANT_ALPHA: 147d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_CONST_ALPHA; 148d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_ONE_MINUS_CONSTANT_ALPHA: 149d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_INV_CONST_ALPHA; 150d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul } 151d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 152d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul fprintf(stderr, "Unknown value in %s: %x\n", __FUNCTION__, factor); 153d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return BLENDFACT_ZERO; 154d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul} 155d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul 156d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulint 157d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paulintel_translate_logic_op(GLenum opcode) 158d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul{ 159d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul switch (opcode) { 160d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_CLEAR: 161d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_CLEAR; 162d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_AND: 163d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_AND; 164d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_AND_REVERSE: 165d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_AND_RVRSE; 166d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_COPY: 167d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_COPY; 168d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_COPY_INVERTED: 169d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_COPY_INV; 170d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_AND_INVERTED: 171d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_AND_INV; 172d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_NOOP: 173d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_NOOP; 174d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_XOR: 175d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_XOR; 176d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_OR: 177d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_OR; 178d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_OR_INVERTED: 179d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_OR_INV; 180d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_NOR: 181d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_NOR; 182d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_EQUIV: 183d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_EQUIV; 184d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_INVERT: 185d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_INV; 186d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_OR_REVERSE: 187d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_OR_RVRSE; 188d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_NAND: 189d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_NAND; 190d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul case GL_SET: 191d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_SET; 192d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul default: 193d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul return LOGICOP_SET; 194d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul } 195d0c8ed73cc6f2b08906a18a8d60e3bc364e5e48fBrian Paul} 196