xref: /aosp_15_r20/external/skia/src/sksl/SkSLBuiltinTypes.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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> fUVec2;
94     const std::unique_ptr<Type> fUVec3;
95     const std::unique_ptr<Type> fUVec4;
96 
97     const std::unique_ptr<Type> fBVec2;
98     const std::unique_ptr<Type> fBVec3;
99     const std::unique_ptr<Type> fBVec4;
100 
101     const std::unique_ptr<Type> fMat2;
102     const std::unique_ptr<Type> fMat3;
103     const std::unique_ptr<Type> fMat4;
104 
105     const std::unique_ptr<Type> fMat2x2;
106     const std::unique_ptr<Type> fMat2x3;
107     const std::unique_ptr<Type> fMat2x4;
108     const std::unique_ptr<Type> fMat3x2;
109     const std::unique_ptr<Type> fMat3x3;
110     const std::unique_ptr<Type> fMat3x4;
111     const std::unique_ptr<Type> fMat4x2;
112     const std::unique_ptr<Type> fMat4x3;
113     const std::unique_ptr<Type> fMat4x4;
114 
115     // These texture types use `sample` access.
116     const std::unique_ptr<Type> fTexture2D_sample;
117     const std::unique_ptr<Type> fTextureExternalOES;
118     const std::unique_ptr<Type> fTexture2DRect;
119 
120     // These texture types use `read`/`write` access.
121     const std::unique_ptr<Type> fTexture2D;
122     const std::unique_ptr<Type> fReadOnlyTexture2D;
123     const std::unique_ptr<Type> fWriteOnlyTexture2D;
124 
125     const std::unique_ptr<Type> fGenTexture2D;
126     const std::unique_ptr<Type> fReadableTexture2D;
127     const std::unique_ptr<Type> fWritableTexture2D;
128 
129     const std::unique_ptr<Type> fSampler2D;
130     const std::unique_ptr<Type> fSamplerExternalOES;
131     const std::unique_ptr<Type> fSampler2DRect;
132 
133     const std::unique_ptr<Type> fSampler;
134 
135     const std::unique_ptr<Type> fSubpassInput;
136     const std::unique_ptr<Type> fSubpassInputMS;
137 
138     const std::unique_ptr<Type> fGenType;
139     const std::unique_ptr<Type> fGenHType;
140     const std::unique_ptr<Type> fGenIType;
141     const std::unique_ptr<Type> fGenUType;
142     const std::unique_ptr<Type> fGenBType;
143 
144     const std::unique_ptr<Type> fMat;
145     const std::unique_ptr<Type> fHMat;
146     const std::unique_ptr<Type> fSquareMat;
147     const std::unique_ptr<Type> fSquareHMat;
148 
149     const std::unique_ptr<Type> fVec;
150 
151     const std::unique_ptr<Type> fHVec;
152     const std::unique_ptr<Type> fDVec;
153     const std::unique_ptr<Type> fIVec;
154     const std::unique_ptr<Type> fUVec;
155     const std::unique_ptr<Type> fSVec;
156     const std::unique_ptr<Type> fUSVec;
157     const std::unique_ptr<Type> fByteVec;
158     const std::unique_ptr<Type> fUByteVec;
159 
160     const std::unique_ptr<Type> fBVec;
161 
162     const std::unique_ptr<Type> fSkCaps;
163 
164     const std::unique_ptr<Type> fColorFilter;
165     const std::unique_ptr<Type> fShader;
166     const std::unique_ptr<Type> fBlender;
167 
168     const std::unique_ptr<Type> fAtomicUInt;
169     const std::unique_ptr<Type> fAtomic_uint;
170 };
171 
172 }  // namespace SkSL
173 
174 #endif
175