1 /* 2 * Copyright 2021 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SKSL_BUILTIN_TYPES 9 #define SKSL_BUILTIN_TYPES 10 11 #include <memory> 12 13 #include "src/sksl/ir/SkSLType.h" 14 15 namespace SkSL { 16 17 /** 18 * Contains the built-in, core types for SkSL. 19 */ 20 class BuiltinTypes { 21 public: 22 BuiltinTypes(); 23 24 const std::unique_ptr<Type> fFloat; 25 const std::unique_ptr<Type> fFloat2; 26 const std::unique_ptr<Type> fFloat3; 27 const std::unique_ptr<Type> fFloat4; 28 29 const std::unique_ptr<Type> fHalf; 30 const std::unique_ptr<Type> fHalf2; 31 const std::unique_ptr<Type> fHalf3; 32 const std::unique_ptr<Type> fHalf4; 33 34 const std::unique_ptr<Type> fInt; 35 const std::unique_ptr<Type> fInt2; 36 const std::unique_ptr<Type> fInt3; 37 const std::unique_ptr<Type> fInt4; 38 39 const std::unique_ptr<Type> fUInt; 40 const std::unique_ptr<Type> fUInt2; 41 const std::unique_ptr<Type> fUInt3; 42 const std::unique_ptr<Type> fUInt4; 43 44 const std::unique_ptr<Type> fShort; 45 const std::unique_ptr<Type> fShort2; 46 const std::unique_ptr<Type> fShort3; 47 const std::unique_ptr<Type> fShort4; 48 49 const std::unique_ptr<Type> fUShort; 50 const std::unique_ptr<Type> fUShort2; 51 const std::unique_ptr<Type> fUShort3; 52 const std::unique_ptr<Type> fUShort4; 53 54 const std::unique_ptr<Type> fBool; 55 const std::unique_ptr<Type> fBool2; 56 const std::unique_ptr<Type> fBool3; 57 const std::unique_ptr<Type> fBool4; 58 59 const std::unique_ptr<Type> fInvalid; 60 const std::unique_ptr<Type> fPoison; 61 const std::unique_ptr<Type> fVoid; 62 const std::unique_ptr<Type> fFloatLiteral; 63 const std::unique_ptr<Type> fIntLiteral; 64 65 const std::unique_ptr<Type> fFloat2x2; 66 const std::unique_ptr<Type> fFloat2x3; 67 const std::unique_ptr<Type> fFloat2x4; 68 const std::unique_ptr<Type> fFloat3x2; 69 const std::unique_ptr<Type> fFloat3x3; 70 const std::unique_ptr<Type> fFloat3x4; 71 const std::unique_ptr<Type> fFloat4x2; 72 const std::unique_ptr<Type> fFloat4x3; 73 const std::unique_ptr<Type> fFloat4x4; 74 75 const std::unique_ptr<Type> fHalf2x2; 76 const std::unique_ptr<Type> fHalf2x3; 77 const std::unique_ptr<Type> fHalf2x4; 78 const std::unique_ptr<Type> fHalf3x2; 79 const std::unique_ptr<Type> fHalf3x3; 80 const std::unique_ptr<Type> fHalf3x4; 81 const std::unique_ptr<Type> fHalf4x2; 82 const std::unique_ptr<Type> fHalf4x3; 83 const std::unique_ptr<Type> fHalf4x4; 84 85 const std::unique_ptr<Type> fTexture1D; 86 const std::unique_ptr<Type> fTexture2D; 87 const std::unique_ptr<Type> fTexture3D; 88 const std::unique_ptr<Type> fTextureExternalOES; 89 const std::unique_ptr<Type> fTexture2DRect; 90 const std::unique_ptr<Type> fITexture2D; 91 92 const std::unique_ptr<Type> fSampler1D; 93 const std::unique_ptr<Type> fSampler2D; 94 const std::unique_ptr<Type> fSampler3D; 95 const std::unique_ptr<Type> fSamplerExternalOES; 96 const std::unique_ptr<Type> fSampler2DRect; 97 98 const std::unique_ptr<Type> fISampler2D; 99 const std::unique_ptr<Type> fSampler; 100 101 const std::unique_ptr<Type> fSubpassInput; 102 const std::unique_ptr<Type> fSubpassInputMS; 103 104 const std::unique_ptr<Type> fGenType; 105 const std::unique_ptr<Type> fGenHType; 106 const std::unique_ptr<Type> fGenIType; 107 const std::unique_ptr<Type> fGenUType; 108 const std::unique_ptr<Type> fGenBType; 109 110 const std::unique_ptr<Type> fMat; 111 const std::unique_ptr<Type> fHMat; 112 const std::unique_ptr<Type> fSquareMat; 113 const std::unique_ptr<Type> fSquareHMat; 114 115 const std::unique_ptr<Type> fVec; 116 117 const std::unique_ptr<Type> fHVec; 118 const std::unique_ptr<Type> fDVec; 119 const std::unique_ptr<Type> fIVec; 120 const std::unique_ptr<Type> fUVec; 121 const std::unique_ptr<Type> fSVec; 122 const std::unique_ptr<Type> fUSVec; 123 const std::unique_ptr<Type> fByteVec; 124 const std::unique_ptr<Type> fUByteVec; 125 126 const std::unique_ptr<Type> fBVec; 127 128 const std::unique_ptr<Type> fSkCaps; 129 130 const std::unique_ptr<Type> fColorFilter; 131 const std::unique_ptr<Type> fShader; 132 const std::unique_ptr<Type> fBlender; 133 }; 134 135 } // namespace SkSL 136 137 #endif 138