Home | History | Annotate | Download | only in compiler
      1 //
      2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 #ifndef _BASICTYPES_INCLUDED_
      8 #define _BASICTYPES_INCLUDED_
      9 
     10 //
     11 // Precision qualifiers
     12 //
     13 enum TPrecision
     14 {
     15     // These need to be kept sorted
     16     EbpUndefined,
     17     EbpLow,
     18     EbpMedium,
     19     EbpHigh
     20 };
     21 
     22 inline const char* getPrecisionString(TPrecision p)
     23 {
     24     switch(p)
     25     {
     26     case EbpHigh:		return "highp";		break;
     27     case EbpMedium:		return "mediump";	break;
     28     case EbpLow:		return "lowp";		break;
     29     default:			return "mediump";   break;   // Safest fallback
     30     }
     31 }
     32 
     33 //
     34 // Basic type.  Arrays, vectors, etc., are orthogonal to this.
     35 //
     36 enum TBasicType
     37 {
     38     EbtVoid,
     39     EbtFloat,
     40     EbtInt,
     41     EbtBool,
     42     EbtGuardSamplerBegin,  // non type:  see implementation of IsSampler()
     43     EbtSampler2D,
     44     EbtSamplerCube,
     45     EbtSamplerExternalOES,  // Only valid if OES_EGL_image_external exists.
     46     EbtSampler2DRect,       // Only valid if GL_ARB_texture_rectangle exists.
     47     EbtGuardSamplerEnd,    // non type:  see implementation of IsSampler()
     48     EbtStruct,
     49     EbtAddress,            // should be deprecated??
     50     EbtInvariant          // used as a type when qualifying a previously declared variable as being invariant
     51 };
     52 
     53 inline const char* getBasicString(TBasicType t)
     54 {
     55     switch (t)
     56     {
     57     case EbtVoid:              return "void";              break;
     58     case EbtFloat:             return "float";             break;
     59     case EbtInt:               return "int";               break;
     60     case EbtBool:              return "bool";              break;
     61     case EbtSampler2D:         return "sampler2D";         break;
     62     case EbtSamplerCube:       return "samplerCube";       break;
     63     case EbtSamplerExternalOES: return "samplerExternalOES"; break;
     64     case EbtSampler2DRect:     return "sampler2DRect";     break;
     65     case EbtStruct:            return "structure";         break;
     66     default:                   return "unknown type";
     67     }
     68 }
     69 
     70 inline bool IsSampler(TBasicType type)
     71 {
     72     return type > EbtGuardSamplerBegin && type < EbtGuardSamplerEnd;
     73 }
     74 
     75 //
     76 // Qualifiers and built-ins.  These are mainly used to see what can be read
     77 // or written, and by the machine dependent translator to know which registers
     78 // to allocate variables in.  Since built-ins tend to go to different registers
     79 // than varying or uniform, it makes sense they are peers, not sub-classes.
     80 //
     81 enum TQualifier
     82 {
     83     EvqTemporary,     // For temporaries (within a function), read/write
     84     EvqGlobal,        // For globals read/write
     85     EvqConst,         // User defined constants and non-output parameters in functions
     86     EvqAttribute,     // Readonly
     87     EvqVaryingIn,     // readonly, fragment shaders only
     88     EvqVaryingOut,    // vertex shaders only  read/write
     89     EvqInvariantVaryingIn,     // readonly, fragment shaders only
     90     EvqInvariantVaryingOut,    // vertex shaders only  read/write
     91     EvqUniform,       // Readonly, vertex and fragment
     92 
     93     // parameters
     94     EvqIn,
     95     EvqOut,
     96     EvqInOut,
     97     EvqConstReadOnly,
     98 
     99     // built-ins written by vertex shader
    100     EvqPosition,
    101     EvqPointSize,
    102 
    103     // built-ins read by fragment shader
    104     EvqFragCoord,
    105     EvqFrontFacing,
    106     EvqPointCoord,
    107 
    108     // built-ins written by fragment shader
    109     EvqFragColor,
    110     EvqFragData,
    111     EvqFragDepth,
    112 
    113     // end of list
    114     EvqLast
    115 };
    116 
    117 //
    118 // This is just for debug print out, carried along with the definitions above.
    119 //
    120 inline const char* getQualifierString(TQualifier q)
    121 {
    122     switch(q)
    123     {
    124     case EvqTemporary:      return "Temporary";      break;
    125     case EvqGlobal:         return "Global";         break;
    126     case EvqConst:          return "const";          break;
    127     case EvqConstReadOnly:  return "const";          break;
    128     case EvqAttribute:      return "attribute";      break;
    129     case EvqVaryingIn:      return "varying";        break;
    130     case EvqVaryingOut:     return "varying";        break;
    131     case EvqInvariantVaryingIn: return "invariant varying";	break;
    132     case EvqInvariantVaryingOut:return "invariant varying";	break;
    133     case EvqUniform:        return "uniform";        break;
    134     case EvqIn:             return "in";             break;
    135     case EvqOut:            return "out";            break;
    136     case EvqInOut:          return "inout";          break;
    137     case EvqPosition:       return "Position";       break;
    138     case EvqPointSize:      return "PointSize";      break;
    139     case EvqFragCoord:      return "FragCoord";      break;
    140     case EvqFrontFacing:    return "FrontFacing";    break;
    141     case EvqFragColor:      return "FragColor";      break;
    142     case EvqFragData:       return "FragData";      break;
    143     case EvqFragDepth:      return "FragDepth";     break;
    144     default:                return "unknown qualifier";
    145     }
    146 }
    147 
    148 #endif // _BASICTYPES_INCLUDED_
    149