• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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> fVec2;
86     const std::unique_ptr<Type> fVec3;
87     const std::unique_ptr<Type> fVec4;
88 
89     const std::unique_ptr<Type> fIVec2;
90     const std::unique_ptr<Type> fIVec3;
91     const std::unique_ptr<Type> fIVec4;
92 
93     const std::unique_ptr<Type> fBVec2;
94     const std::unique_ptr<Type> fBVec3;
95     const std::unique_ptr<Type> fBVec4;
96 
97     const std::unique_ptr<Type> fMat2;
98     const std::unique_ptr<Type> fMat3;
99     const std::unique_ptr<Type> fMat4;
100 
101     const std::unique_ptr<Type> fMat2x2;
102     const std::unique_ptr<Type> fMat2x3;
103     const std::unique_ptr<Type> fMat2x4;
104     const std::unique_ptr<Type> fMat3x2;
105     const std::unique_ptr<Type> fMat3x3;
106     const std::unique_ptr<Type> fMat3x4;
107     const std::unique_ptr<Type> fMat4x2;
108     const std::unique_ptr<Type> fMat4x3;
109     const std::unique_ptr<Type> fMat4x4;
110 
111     const std::unique_ptr<Type> fTexture2D;
112     const std::unique_ptr<Type> fTextureExternalOES;
113     const std::unique_ptr<Type> fTexture2DRect;
114 
115     const std::unique_ptr<Type> fReadWriteTexture2D;
116     const std::unique_ptr<Type> fReadOnlyTexture2D;
117     const std::unique_ptr<Type> fWriteOnlyTexture2D;
118 
119     const std::unique_ptr<Type> fGenTexture2D;
120     const std::unique_ptr<Type> fReadableTexture2D;
121     const std::unique_ptr<Type> fWritableTexture2D;
122 
123     const std::unique_ptr<Type> fSampler2D;
124     const std::unique_ptr<Type> fSamplerExternalOES;
125     const std::unique_ptr<Type> fSampler2DRect;
126 
127     const std::unique_ptr<Type> fSampler;
128 
129     const std::unique_ptr<Type> fSubpassInput;
130     const std::unique_ptr<Type> fSubpassInputMS;
131 
132     const std::unique_ptr<Type> fGenType;
133     const std::unique_ptr<Type> fGenHType;
134     const std::unique_ptr<Type> fGenIType;
135     const std::unique_ptr<Type> fGenUType;
136     const std::unique_ptr<Type> fGenBType;
137 
138     const std::unique_ptr<Type> fMat;
139     const std::unique_ptr<Type> fHMat;
140     const std::unique_ptr<Type> fSquareMat;
141     const std::unique_ptr<Type> fSquareHMat;
142 
143     const std::unique_ptr<Type> fVec;
144 
145     const std::unique_ptr<Type> fHVec;
146     const std::unique_ptr<Type> fDVec;
147     const std::unique_ptr<Type> fIVec;
148     const std::unique_ptr<Type> fUVec;
149     const std::unique_ptr<Type> fSVec;
150     const std::unique_ptr<Type> fUSVec;
151     const std::unique_ptr<Type> fByteVec;
152     const std::unique_ptr<Type> fUByteVec;
153 
154     const std::unique_ptr<Type> fBVec;
155 
156     const std::unique_ptr<Type> fSkCaps;
157 
158     const std::unique_ptr<Type> fColorFilter;
159     const std::unique_ptr<Type> fShader;
160     const std::unique_ptr<Type> fBlender;
161 
162     const std::unique_ptr<Type> fAtomicUInt;
163 };
164 
165 }  // namespace SkSL
166 
167 #endif
168