Home | History | Annotate | Download | only in nouveau
      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