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 EbtGuardSamplerEnd, // non type: see implementation of IsSampler() 46 EbtStruct, 47 EbtAddress, // should be deprecated?? 48 }; 49 50 inline const char* getBasicString(TBasicType t) 51 { 52 switch (t) 53 { 54 case EbtVoid: return "void"; break; 55 case EbtFloat: return "float"; break; 56 case EbtInt: return "int"; break; 57 case EbtBool: return "bool"; break; 58 case EbtSampler2D: return "sampler2D"; break; 59 case EbtSamplerCube: return "samplerCube"; break; 60 case EbtStruct: return "structure"; break; 61 default: return "unknown type"; 62 } 63 } 64 65 inline bool IsSampler(TBasicType type) 66 { 67 return type > EbtGuardSamplerBegin && type < EbtGuardSamplerEnd; 68 } 69 70 // 71 // Qualifiers and built-ins. These are mainly used to see what can be read 72 // or written, and by the machine dependent translator to know which registers 73 // to allocate variables in. Since built-ins tend to go to different registers 74 // than varying or uniform, it makes sense they are peers, not sub-classes. 75 // 76 enum TQualifier 77 { 78 EvqTemporary, // For temporaries (within a function), read/write 79 EvqGlobal, // For globals read/write 80 EvqConst, // User defined constants and non-output parameters in functions 81 EvqAttribute, // Readonly 82 EvqVaryingIn, // readonly, fragment shaders only 83 EvqVaryingOut, // vertex shaders only read/write 84 EvqInvariantVaryingIn, // readonly, fragment shaders only 85 EvqInvariantVaryingOut, // vertex shaders only read/write 86 EvqUniform, // Readonly, vertex and fragment 87 88 // pack/unpack input and output 89 EvqInput, 90 EvqOutput, 91 92 // parameters 93 EvqIn, 94 EvqOut, 95 EvqInOut, 96 EvqConstReadOnly, 97 98 // built-ins written by vertex shader 99 EvqPosition, 100 EvqPointSize, 101 102 // built-ins read by fragment shader 103 EvqFragCoord, 104 EvqFrontFacing, 105 EvqPointCoord, 106 107 // built-ins written by fragment shader 108 EvqFragColor, 109 EvqFragData, 110 111 // end of list 112 EvqLast, 113 }; 114 115 // 116 // This is just for debug print out, carried along with the definitions above. 117 // 118 inline const char* getQualifierString(TQualifier q) 119 { 120 switch(q) 121 { 122 case EvqTemporary: return "Temporary"; break; 123 case EvqGlobal: return "Global"; break; 124 case EvqConst: return "const"; break; 125 case EvqConstReadOnly: return "const"; break; 126 case EvqAttribute: return "attribute"; break; 127 case EvqVaryingIn: return "varying"; break; 128 case EvqVaryingOut: return "varying"; break; 129 case EvqInvariantVaryingIn: return "invariant varying"; break; 130 case EvqInvariantVaryingOut:return "invariant varying"; break; 131 case EvqUniform: return "uniform"; break; 132 case EvqIn: return "in"; break; 133 case EvqOut: return "out"; break; 134 case EvqInOut: return "inout"; break; 135 case EvqInput: return "input"; break; 136 case EvqOutput: return "output"; 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 default: return "unknown qualifier"; 144 } 145 } 146 147 #endif // _BASICTYPES_INCLUDED_ 148