1/************************************************************************** 2 * 3 * Copyright 2003 VMware, Inc. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28#ifndef I915_STATE_INLINES_H 29#define I915_STATE_INLINES_H 30 31#include "pipe/p_compiler.h" 32#include "pipe/p_defines.h" 33#include "util/u_debug.h" 34#include "i915_reg.h" 35 36static inline unsigned 37i915_translate_compare_func(unsigned func) 38{ 39 switch (func) { 40 case PIPE_FUNC_NEVER: 41 return COMPAREFUNC_NEVER; 42 case PIPE_FUNC_LESS: 43 return COMPAREFUNC_LESS; 44 case PIPE_FUNC_LEQUAL: 45 return COMPAREFUNC_LEQUAL; 46 case PIPE_FUNC_GREATER: 47 return COMPAREFUNC_GREATER; 48 case PIPE_FUNC_GEQUAL: 49 return COMPAREFUNC_GEQUAL; 50 case PIPE_FUNC_NOTEQUAL: 51 return COMPAREFUNC_NOTEQUAL; 52 case PIPE_FUNC_EQUAL: 53 return COMPAREFUNC_EQUAL; 54 case PIPE_FUNC_ALWAYS: 55 return COMPAREFUNC_ALWAYS; 56 default: 57 return COMPAREFUNC_ALWAYS; 58 } 59} 60 61static inline unsigned 62i915_translate_shadow_compare_func(unsigned func) 63{ 64 switch (func) { 65 case PIPE_FUNC_NEVER: 66 return COMPAREFUNC_ALWAYS; 67 case PIPE_FUNC_LESS: 68 return COMPAREFUNC_LEQUAL; 69 case PIPE_FUNC_LEQUAL: 70 return COMPAREFUNC_LESS; 71 case PIPE_FUNC_GREATER: 72 return COMPAREFUNC_GEQUAL; 73 case PIPE_FUNC_GEQUAL: 74 return COMPAREFUNC_GREATER; 75 case PIPE_FUNC_NOTEQUAL: 76 return COMPAREFUNC_EQUAL; 77 case PIPE_FUNC_EQUAL: 78 return COMPAREFUNC_NOTEQUAL; 79 case PIPE_FUNC_ALWAYS: 80 return COMPAREFUNC_NEVER; 81 default: 82 return COMPAREFUNC_NEVER; 83 } 84} 85 86static inline unsigned 87i915_translate_stencil_op(unsigned op) 88{ 89 switch (op) { 90 case PIPE_STENCIL_OP_KEEP: 91 return STENCILOP_KEEP; 92 case PIPE_STENCIL_OP_ZERO: 93 return STENCILOP_ZERO; 94 case PIPE_STENCIL_OP_REPLACE: 95 return STENCILOP_REPLACE; 96 case PIPE_STENCIL_OP_INCR: 97 return STENCILOP_INCRSAT; 98 case PIPE_STENCIL_OP_DECR: 99 return STENCILOP_DECRSAT; 100 case PIPE_STENCIL_OP_INCR_WRAP: 101 return STENCILOP_INCR; 102 case PIPE_STENCIL_OP_DECR_WRAP: 103 return STENCILOP_DECR; 104 case PIPE_STENCIL_OP_INVERT: 105 return STENCILOP_INVERT; 106 default: 107 return STENCILOP_ZERO; 108 } 109} 110 111static inline unsigned 112i915_translate_blend_factor(unsigned factor) 113{ 114 switch (factor) { 115 case PIPE_BLENDFACTOR_ZERO: 116 return BLENDFACT_ZERO; 117 case PIPE_BLENDFACTOR_SRC_ALPHA: 118 return BLENDFACT_SRC_ALPHA; 119 case PIPE_BLENDFACTOR_ONE: 120 return BLENDFACT_ONE; 121 case PIPE_BLENDFACTOR_SRC_COLOR: 122 return BLENDFACT_SRC_COLR; 123 case PIPE_BLENDFACTOR_INV_SRC_COLOR: 124 return BLENDFACT_INV_SRC_COLR; 125 case PIPE_BLENDFACTOR_DST_COLOR: 126 return BLENDFACT_DST_COLR; 127 case PIPE_BLENDFACTOR_INV_DST_COLOR: 128 return BLENDFACT_INV_DST_COLR; 129 case PIPE_BLENDFACTOR_INV_SRC_ALPHA: 130 return BLENDFACT_INV_SRC_ALPHA; 131 case PIPE_BLENDFACTOR_DST_ALPHA: 132 return BLENDFACT_DST_ALPHA; 133 case PIPE_BLENDFACTOR_INV_DST_ALPHA: 134 return BLENDFACT_INV_DST_ALPHA; 135 case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE: 136 return BLENDFACT_SRC_ALPHA_SATURATE; 137 case PIPE_BLENDFACTOR_CONST_COLOR: 138 return BLENDFACT_CONST_COLOR; 139 case PIPE_BLENDFACTOR_INV_CONST_COLOR: 140 return BLENDFACT_INV_CONST_COLOR; 141 case PIPE_BLENDFACTOR_CONST_ALPHA: 142 return BLENDFACT_CONST_ALPHA; 143 case PIPE_BLENDFACTOR_INV_CONST_ALPHA: 144 return BLENDFACT_INV_CONST_ALPHA; 145 default: 146 return BLENDFACT_ZERO; 147 } 148} 149 150static inline unsigned 151i915_translate_blend_func(unsigned mode) 152{ 153 switch (mode) { 154 case PIPE_BLEND_ADD: 155 return BLENDFUNC_ADD; 156 case PIPE_BLEND_MIN: 157 return BLENDFUNC_MIN; 158 case PIPE_BLEND_MAX: 159 return BLENDFUNC_MAX; 160 case PIPE_BLEND_SUBTRACT: 161 return BLENDFUNC_SUBTRACT; 162 case PIPE_BLEND_REVERSE_SUBTRACT: 163 return BLENDFUNC_REVERSE_SUBTRACT; 164 default: 165 return 0; 166 } 167} 168 169static inline unsigned 170i915_translate_logic_op(unsigned opcode) 171{ 172 switch (opcode) { 173 case PIPE_LOGICOP_CLEAR: 174 return LOGICOP_CLEAR; 175 case PIPE_LOGICOP_AND: 176 return LOGICOP_AND; 177 case PIPE_LOGICOP_AND_REVERSE: 178 return LOGICOP_AND_RVRSE; 179 case PIPE_LOGICOP_COPY: 180 return LOGICOP_COPY; 181 case PIPE_LOGICOP_COPY_INVERTED: 182 return LOGICOP_COPY_INV; 183 case PIPE_LOGICOP_AND_INVERTED: 184 return LOGICOP_AND_INV; 185 case PIPE_LOGICOP_NOOP: 186 return LOGICOP_NOOP; 187 case PIPE_LOGICOP_XOR: 188 return LOGICOP_XOR; 189 case PIPE_LOGICOP_OR: 190 return LOGICOP_OR; 191 case PIPE_LOGICOP_OR_INVERTED: 192 return LOGICOP_OR_INV; 193 case PIPE_LOGICOP_NOR: 194 return LOGICOP_NOR; 195 case PIPE_LOGICOP_EQUIV: 196 return LOGICOP_EQUIV; 197 case PIPE_LOGICOP_INVERT: 198 return LOGICOP_INV; 199 case PIPE_LOGICOP_OR_REVERSE: 200 return LOGICOP_OR_RVRSE; 201 case PIPE_LOGICOP_NAND: 202 return LOGICOP_NAND; 203 case PIPE_LOGICOP_SET: 204 return LOGICOP_SET; 205 default: 206 return LOGICOP_SET; 207 } 208} 209 210static inline bool 211i915_validate_vertices(unsigned hw_prim, unsigned nr) 212{ 213 bool ok; 214 215 switch (hw_prim) { 216 case PRIM3D_POINTLIST: 217 ok = (nr >= 1); 218 assert(ok); 219 break; 220 case PRIM3D_LINELIST: 221 ok = (nr >= 2) && (nr % 2) == 0; 222 assert(ok); 223 break; 224 case PRIM3D_LINESTRIP: 225 ok = (nr >= 2); 226 assert(ok); 227 break; 228 case PRIM3D_TRILIST: 229 ok = (nr >= 3) && (nr % 3) == 0; 230 assert(ok); 231 break; 232 case PRIM3D_TRISTRIP: 233 ok = (nr >= 3); 234 assert(ok); 235 break; 236 case PRIM3D_TRIFAN: 237 ok = (nr >= 3); 238 assert(ok); 239 break; 240 case PRIM3D_POLY: 241 ok = (nr >= 3); 242 assert(ok); 243 break; 244 default: 245 assert(0); 246 ok = 0; 247 break; 248 } 249 250 return ok; 251} 252 253#endif 254