1 /* 2 * Copyright (C) 2007-2010 The Nouveau Project. 3 * All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial 15 * portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 * 25 */ 26 27 #ifndef __NOUVEAU_GLDEFS_H__ 28 #define __NOUVEAU_GLDEFS_H__ 29 30 static inline unsigned 31 nvgl_blend_func(unsigned func) 32 { 33 switch (func) { 34 case GL_ZERO: 35 return 0x0000; 36 case GL_ONE: 37 return 0x0001; 38 case GL_SRC_COLOR: 39 return 0x0300; 40 case GL_ONE_MINUS_SRC_COLOR: 41 return 0x0301; 42 case GL_SRC_ALPHA: 43 return 0x0302; 44 case GL_ONE_MINUS_SRC_ALPHA: 45 return 0x0303; 46 case GL_DST_ALPHA: 47 return 0x0304; 48 case GL_ONE_MINUS_DST_ALPHA: 49 return 0x0305; 50 case GL_DST_COLOR: 51 return 0x0306; 52 case GL_ONE_MINUS_DST_COLOR: 53 return 0x0307; 54 case GL_SRC_ALPHA_SATURATE: 55 return 0x0308; 56 case GL_CONSTANT_COLOR: 57 return 0x8001; 58 case GL_ONE_MINUS_CONSTANT_COLOR: 59 return 0x8002; 60 case GL_CONSTANT_ALPHA: 61 return 0x8003; 62 case GL_ONE_MINUS_CONSTANT_ALPHA: 63 return 0x8004; 64 default: 65 assert(0); 66 } 67 } 68 69 static inline unsigned 70 nvgl_blend_eqn(unsigned eqn) 71 { 72 switch (eqn) { 73 case GL_FUNC_ADD: 74 return 0x8006; 75 case GL_MIN: 76 return 0x8007; 77 case GL_MAX: 78 return 0x8008; 79 case GL_FUNC_SUBTRACT: 80 return 0x800a; 81 case GL_FUNC_REVERSE_SUBTRACT: 82 return 0x800b; 83 default: 84 assert(0); 85 } 86 } 87 88 static inline unsigned 89 nvgl_logicop_func(unsigned func) 90 { 91 switch (func) { 92 case GL_CLEAR: 93 return 0x1500; 94 case GL_NOR: 95 return 0x1508; 96 case GL_AND_INVERTED: 97 return 0x1504; 98 case GL_COPY_INVERTED: 99 return 0x150c; 100 case GL_AND_REVERSE: 101 return 0x1502; 102 case GL_INVERT: 103 return 0x150a; 104 case GL_XOR: 105 return 0x1506; 106 case GL_NAND: 107 return 0x150e; 108 case GL_AND: 109 return 0x1501; 110 case GL_EQUIV: 111 return 0x1509; 112 case GL_NOOP: 113 return 0x1505; 114 case GL_OR_INVERTED: 115 return 0x150d; 116 case GL_COPY: 117 return 0x1503; 118 case GL_OR_REVERSE: 119 return 0x150b; 120 case GL_OR: 121 return 0x1507; 122 case GL_SET: 123 return 0x150f; 124 default: 125 assert(0); 126 } 127 } 128 129 static inline unsigned 130 nvgl_comparison_op(unsigned op) 131 { 132 switch (op) { 133 case GL_NEVER: 134 return 0x0200; 135 case GL_LESS: 136 return 0x0201; 137 case GL_EQUAL: 138 return 0x0202; 139 case GL_LEQUAL: 140 return 0x0203; 141 case GL_GREATER: 142 return 0x0204; 143 case GL_NOTEQUAL: 144 return 0x0205; 145 case GL_GEQUAL: 146 return 0x0206; 147 case GL_ALWAYS: 148 return 0x0207; 149 default: 150 assert(0); 151 } 152 } 153 154 static inline unsigned 155 nvgl_polygon_mode(unsigned mode) 156 { 157 switch (mode) { 158 case GL_POINT: 159 return 0x1b00; 160 case GL_LINE: 161 return 0x1b01; 162 case GL_FILL: 163 return 0x1b02; 164 default: 165 assert(0); 166 } 167 } 168 169 static inline unsigned 170 nvgl_stencil_op(unsigned op) 171 { 172 switch (op) { 173 case GL_ZERO: 174 return 0x0000; 175 case GL_INVERT: 176 return 0x150a; 177 case GL_KEEP: 178 return 0x1e00; 179 case GL_REPLACE: 180 return 0x1e01; 181 case GL_INCR: 182 return 0x1e02; 183 case GL_DECR: 184 return 0x1e03; 185 case GL_INCR_WRAP_EXT: 186 return 0x8507; 187 case GL_DECR_WRAP_EXT: 188 return 0x8508; 189 default: 190 assert(0); 191 } 192 } 193 194 static inline unsigned 195 nvgl_primitive(unsigned prim) 196 { 197 switch (prim) { 198 case GL_POINTS: 199 return 0x0001; 200 case GL_LINES: 201 return 0x0002; 202 case GL_LINE_LOOP: 203 return 0x0003; 204 case GL_LINE_STRIP: 205 return 0x0004; 206 case GL_TRIANGLES: 207 return 0x0005; 208 case GL_TRIANGLE_STRIP: 209 return 0x0006; 210 case GL_TRIANGLE_FAN: 211 return 0x0007; 212 case GL_QUADS: 213 return 0x0008; 214 case GL_QUAD_STRIP: 215 return 0x0009; 216 case GL_POLYGON: 217 return 0x000a; 218 default: 219 assert(0); 220 } 221 } 222 223 static inline unsigned 224 nvgl_wrap_mode(unsigned wrap) 225 { 226 switch (wrap) { 227 case GL_REPEAT: 228 return 0x1; 229 case GL_MIRRORED_REPEAT: 230 return 0x2; 231 case GL_CLAMP: 232 case GL_CLAMP_TO_EDGE: 233 return 0x3; 234 case GL_CLAMP_TO_BORDER: 235 return 0x4; 236 default: 237 assert(0); 238 } 239 } 240 241 static inline unsigned 242 nvgl_filter_mode(unsigned filter) 243 { 244 switch (filter) { 245 case GL_NEAREST: 246 return 0x1; 247 case GL_LINEAR: 248 return 0x2; 249 case GL_NEAREST_MIPMAP_NEAREST: 250 return 0x3; 251 case GL_LINEAR_MIPMAP_NEAREST: 252 return 0x4; 253 case GL_NEAREST_MIPMAP_LINEAR: 254 return 0x5; 255 case GL_LINEAR_MIPMAP_LINEAR: 256 return 0x6; 257 default: 258 assert(0); 259 } 260 } 261 262 static inline unsigned 263 nvgl_texgen_mode(unsigned mode) 264 { 265 switch (mode) { 266 case GL_EYE_LINEAR: 267 return 0x2400; 268 case GL_OBJECT_LINEAR: 269 return 0x2401; 270 case GL_SPHERE_MAP: 271 return 0x2402; 272 case GL_NORMAL_MAP: 273 return 0x8511; 274 case GL_REFLECTION_MAP: 275 return 0x8512; 276 default: 277 assert(0); 278 } 279 } 280 281 #endif 282