Home | History | Annotate | Download | only in i915
      1 /**************************************************************************
      2  *
      3  * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
      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 TUNGSTEN GRAPHICS 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 
     36 
     37 static INLINE unsigned
     38 i915_translate_compare_func(unsigned func)
     39 {
     40    switch (func) {
     41    case PIPE_FUNC_NEVER:
     42       return COMPAREFUNC_NEVER;
     43    case PIPE_FUNC_LESS:
     44       return COMPAREFUNC_LESS;
     45    case PIPE_FUNC_LEQUAL:
     46       return COMPAREFUNC_LEQUAL;
     47    case PIPE_FUNC_GREATER:
     48       return COMPAREFUNC_GREATER;
     49    case PIPE_FUNC_GEQUAL:
     50       return COMPAREFUNC_GEQUAL;
     51    case PIPE_FUNC_NOTEQUAL:
     52       return COMPAREFUNC_NOTEQUAL;
     53    case PIPE_FUNC_EQUAL:
     54       return COMPAREFUNC_EQUAL;
     55    case PIPE_FUNC_ALWAYS:
     56       return COMPAREFUNC_ALWAYS;
     57    default:
     58       return COMPAREFUNC_ALWAYS;
     59    }
     60 }
     61 
     62 static INLINE unsigned
     63 i915_translate_shadow_compare_func(unsigned func)
     64 {
     65    switch (func) {
     66    case PIPE_FUNC_NEVER:
     67       return COMPAREFUNC_ALWAYS;
     68    case PIPE_FUNC_LESS:
     69       return COMPAREFUNC_LEQUAL;
     70    case PIPE_FUNC_LEQUAL:
     71       return COMPAREFUNC_LESS;
     72    case PIPE_FUNC_GREATER:
     73       return COMPAREFUNC_GEQUAL;
     74    case PIPE_FUNC_GEQUAL:
     75       return COMPAREFUNC_GREATER;
     76    case PIPE_FUNC_NOTEQUAL:
     77       return COMPAREFUNC_EQUAL;
     78    case PIPE_FUNC_EQUAL:
     79       return COMPAREFUNC_NOTEQUAL;
     80    case PIPE_FUNC_ALWAYS:
     81       return COMPAREFUNC_NEVER;
     82    default:
     83       return COMPAREFUNC_NEVER;
     84    }
     85 }
     86 
     87 static INLINE unsigned
     88 i915_translate_stencil_op(unsigned op)
     89 {
     90    switch (op) {
     91    case PIPE_STENCIL_OP_KEEP:
     92       return STENCILOP_KEEP;
     93    case PIPE_STENCIL_OP_ZERO:
     94       return STENCILOP_ZERO;
     95    case PIPE_STENCIL_OP_REPLACE:
     96       return STENCILOP_REPLACE;
     97    case PIPE_STENCIL_OP_INCR:
     98       return STENCILOP_INCRSAT;
     99    case PIPE_STENCIL_OP_DECR:
    100       return STENCILOP_DECRSAT;
    101    case PIPE_STENCIL_OP_INCR_WRAP:
    102       return STENCILOP_INCR;
    103    case PIPE_STENCIL_OP_DECR_WRAP:
    104       return STENCILOP_DECR;
    105    case PIPE_STENCIL_OP_INVERT:
    106       return STENCILOP_INVERT;
    107    default:
    108       return STENCILOP_ZERO;
    109    }
    110 }
    111 
    112 static INLINE unsigned
    113 i915_translate_blend_factor(unsigned factor)
    114 {
    115    switch (factor) {
    116    case PIPE_BLENDFACTOR_ZERO:
    117       return BLENDFACT_ZERO;
    118    case PIPE_BLENDFACTOR_SRC_ALPHA:
    119       return BLENDFACT_SRC_ALPHA;
    120    case PIPE_BLENDFACTOR_ONE:
    121       return BLENDFACT_ONE;
    122    case PIPE_BLENDFACTOR_SRC_COLOR:
    123       return BLENDFACT_SRC_COLR;
    124    case PIPE_BLENDFACTOR_INV_SRC_COLOR:
    125       return BLENDFACT_INV_SRC_COLR;
    126    case PIPE_BLENDFACTOR_DST_COLOR:
    127       return BLENDFACT_DST_COLR;
    128    case PIPE_BLENDFACTOR_INV_DST_COLOR:
    129       return BLENDFACT_INV_DST_COLR;
    130    case PIPE_BLENDFACTOR_INV_SRC_ALPHA:
    131       return BLENDFACT_INV_SRC_ALPHA;
    132    case PIPE_BLENDFACTOR_DST_ALPHA:
    133       return BLENDFACT_DST_ALPHA;
    134    case PIPE_BLENDFACTOR_INV_DST_ALPHA:
    135       return BLENDFACT_INV_DST_ALPHA;
    136    case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE:
    137       return BLENDFACT_SRC_ALPHA_SATURATE;
    138    case PIPE_BLENDFACTOR_CONST_COLOR:
    139       return BLENDFACT_CONST_COLOR;
    140    case PIPE_BLENDFACTOR_INV_CONST_COLOR:
    141       return BLENDFACT_INV_CONST_COLOR;
    142    case PIPE_BLENDFACTOR_CONST_ALPHA:
    143       return BLENDFACT_CONST_ALPHA;
    144    case PIPE_BLENDFACTOR_INV_CONST_ALPHA:
    145       return BLENDFACT_INV_CONST_ALPHA;
    146    default:
    147       return BLENDFACT_ZERO;
    148    }
    149 }
    150 
    151 static INLINE unsigned
    152 i915_translate_blend_func(unsigned mode)
    153 {
    154    switch (mode) {
    155    case PIPE_BLEND_ADD:
    156       return BLENDFUNC_ADD;
    157    case PIPE_BLEND_MIN:
    158       return BLENDFUNC_MIN;
    159    case PIPE_BLEND_MAX:
    160       return BLENDFUNC_MAX;
    161    case PIPE_BLEND_SUBTRACT:
    162       return BLENDFUNC_SUBTRACT;
    163    case PIPE_BLEND_REVERSE_SUBTRACT:
    164       return BLENDFUNC_REVERSE_SUBTRACT;
    165    default:
    166       return 0;
    167    }
    168 }
    169 
    170 
    171 static INLINE unsigned
    172 i915_translate_logic_op(unsigned opcode)
    173 {
    174    switch (opcode) {
    175    case PIPE_LOGICOP_CLEAR:
    176       return LOGICOP_CLEAR;
    177    case PIPE_LOGICOP_AND:
    178       return LOGICOP_AND;
    179    case PIPE_LOGICOP_AND_REVERSE:
    180       return LOGICOP_AND_RVRSE;
    181    case PIPE_LOGICOP_COPY:
    182       return LOGICOP_COPY;
    183    case PIPE_LOGICOP_COPY_INVERTED:
    184       return LOGICOP_COPY_INV;
    185    case PIPE_LOGICOP_AND_INVERTED:
    186       return LOGICOP_AND_INV;
    187    case PIPE_LOGICOP_NOOP:
    188       return LOGICOP_NOOP;
    189    case PIPE_LOGICOP_XOR:
    190       return LOGICOP_XOR;
    191    case PIPE_LOGICOP_OR:
    192       return LOGICOP_OR;
    193    case PIPE_LOGICOP_OR_INVERTED:
    194       return LOGICOP_OR_INV;
    195    case PIPE_LOGICOP_NOR:
    196       return LOGICOP_NOR;
    197    case PIPE_LOGICOP_EQUIV:
    198       return LOGICOP_EQUIV;
    199    case PIPE_LOGICOP_INVERT:
    200       return LOGICOP_INV;
    201    case PIPE_LOGICOP_OR_REVERSE:
    202       return LOGICOP_OR_RVRSE;
    203    case PIPE_LOGICOP_NAND:
    204       return LOGICOP_NAND;
    205    case PIPE_LOGICOP_SET:
    206       return LOGICOP_SET;
    207    default:
    208       return LOGICOP_SET;
    209    }
    210 }
    211 
    212 
    213 
    214 static INLINE boolean i915_validate_vertices( unsigned hw_prim, unsigned nr )
    215 {
    216    boolean ok;
    217 
    218    switch (hw_prim) {
    219    case PRIM3D_POINTLIST:
    220       ok = (nr >= 1);
    221       assert(ok);
    222       break;
    223    case PRIM3D_LINELIST:
    224       ok = (nr >= 2) && (nr % 2) == 0;
    225       assert(ok);
    226       break;
    227    case PRIM3D_LINESTRIP:
    228       ok = (nr >= 2);
    229       assert(ok);
    230       break;
    231    case PRIM3D_TRILIST:
    232       ok = (nr >= 3) && (nr % 3) == 0;
    233       assert(ok);
    234       break;
    235    case PRIM3D_TRISTRIP:
    236       ok = (nr >= 3);
    237       assert(ok);
    238       break;
    239    case PRIM3D_TRIFAN:
    240       ok = (nr >= 3);
    241       assert(ok);
    242       break;
    243    case PRIM3D_POLY:
    244       ok = (nr >= 3);
    245       assert(ok);
    246       break;
    247    default:
    248       assert(0);
    249       ok = 0;
    250       break;
    251    }
    252 
    253    return ok;
    254 }
    255 
    256 #endif
    257