Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkSLBuiltinTypes.cpp
Go to the documentation of this file.
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
9
11#include "src/sksl/spirv.h"
12
13namespace SkSL {
14
15/**
16 * Initializes the core SkSL types.
17 */
19 : fFloat(Type::MakeScalarType(
20 "float", "f", Type::NumberKind::kFloat, /*priority=*/10, /*bitWidth=*/32))
21 , fFloat2(Type::MakeVectorType("float2", "f2", *fFloat, /*columns=*/2))
22 , fFloat3(Type::MakeVectorType("float3", "f3", *fFloat, /*columns=*/3))
23 , fFloat4(Type::MakeVectorType("float4", "f4", *fFloat, /*columns=*/4))
24 , fHalf(Type::MakeScalarType(
25 "half", "h", Type::NumberKind::kFloat, /*priority=*/9, /*bitWidth=*/16))
26 , fHalf2(Type::MakeVectorType("half2", "h2", *fHalf, /*columns=*/2))
27 , fHalf3(Type::MakeVectorType("half3", "h3", *fHalf, /*columns=*/3))
28 , fHalf4(Type::MakeVectorType("half4", "h4", *fHalf, /*columns=*/4))
29 , fInt(Type::MakeScalarType(
30 "int", "i", Type::NumberKind::kSigned, /*priority=*/7, /*bitWidth=*/32))
31 , fInt2(Type::MakeVectorType("int2", "i2", *fInt, /*columns=*/2))
32 , fInt3(Type::MakeVectorType("int3", "i3", *fInt, /*columns=*/3))
33 , fInt4(Type::MakeVectorType("int4", "i4", *fInt, /*columns=*/4))
34 , fUInt(Type::MakeScalarType(
35 "uint", "I", Type::NumberKind::kUnsigned, /*priority=*/6, /*bitWidth=*/32))
36 , fUInt2(Type::MakeVectorType("uint2", "I2", *fUInt, /*columns=*/2))
37 , fUInt3(Type::MakeVectorType("uint3", "I3", *fUInt, /*columns=*/3))
38 , fUInt4(Type::MakeVectorType("uint4", "I4", *fUInt, /*columns=*/4))
39 , fShort(Type::MakeScalarType(
40 "short", "s", Type::NumberKind::kSigned, /*priority=*/4, /*bitWidth=*/16))
41 , fShort2(Type::MakeVectorType("short2", "s2", *fShort, /*columns=*/2))
42 , fShort3(Type::MakeVectorType("short3", "s3", *fShort, /*columns=*/3))
43 , fShort4(Type::MakeVectorType("short4", "s4", *fShort, /*columns=*/4))
44 , fUShort(Type::MakeScalarType(
45 "ushort", "S", Type::NumberKind::kUnsigned, /*priority=*/3, /*bitWidth=*/16))
46 , fUShort2(Type::MakeVectorType("ushort2", "S2", *fUShort, /*columns=*/2))
47 , fUShort3(Type::MakeVectorType("ushort3", "S3", *fUShort, /*columns=*/3))
48 , fUShort4(Type::MakeVectorType("ushort4", "S4", *fUShort, /*columns=*/4))
49 , fBool(Type::MakeScalarType(
50 "bool", "b", Type::NumberKind::kBoolean, /*priority=*/0, /*bitWidth=*/1))
51 , fBool2(Type::MakeVectorType("bool2", "b2", *fBool, /*columns=*/2))
52 , fBool3(Type::MakeVectorType("bool3", "b3", *fBool, /*columns=*/3))
53 , fBool4(Type::MakeVectorType("bool4", "b4", *fBool, /*columns=*/4))
54 , fInvalid(Type::MakeSpecialType("<INVALID>", "O", Type::TypeKind::kOther))
55 , fPoison(Type::MakeSpecialType(Compiler::POISON_TAG, "P", Type::TypeKind::kOther))
56 , fVoid(Type::MakeSpecialType("void", "v", Type::TypeKind::kVoid))
57 , fFloatLiteral(Type::MakeLiteralType("$floatLiteral", *fFloat, /*priority=*/8))
58 , fIntLiteral(Type::MakeLiteralType("$intLiteral", *fInt, /*priority=*/5))
59 , fFloat2x2(Type::MakeMatrixType("float2x2", "f22", *fFloat, /*columns=*/2, /*rows=*/2))
60 , fFloat2x3(Type::MakeMatrixType("float2x3", "f23", *fFloat, /*columns=*/2, /*rows=*/3))
61 , fFloat2x4(Type::MakeMatrixType("float2x4", "f24", *fFloat, /*columns=*/2, /*rows=*/4))
62 , fFloat3x2(Type::MakeMatrixType("float3x2", "f32", *fFloat, /*columns=*/3, /*rows=*/2))
63 , fFloat3x3(Type::MakeMatrixType("float3x3", "f33", *fFloat, /*columns=*/3, /*rows=*/3))
64 , fFloat3x4(Type::MakeMatrixType("float3x4", "f34", *fFloat, /*columns=*/3, /*rows=*/4))
65 , fFloat4x2(Type::MakeMatrixType("float4x2", "f42", *fFloat, /*columns=*/4, /*rows=*/2))
66 , fFloat4x3(Type::MakeMatrixType("float4x3", "f43", *fFloat, /*columns=*/4, /*rows=*/3))
67 , fFloat4x4(Type::MakeMatrixType("float4x4", "f44", *fFloat, /*columns=*/4, /*rows=*/4))
68 , fHalf2x2(Type::MakeMatrixType("half2x2", "h22", *fHalf, /*columns=*/2, /*rows=*/2))
69 , fHalf2x3(Type::MakeMatrixType("half2x3", "h23", *fHalf, /*columns=*/2, /*rows=*/3))
70 , fHalf2x4(Type::MakeMatrixType("half2x4", "h24", *fHalf, /*columns=*/2, /*rows=*/4))
71 , fHalf3x2(Type::MakeMatrixType("half3x2", "h32", *fHalf, /*columns=*/3, /*rows=*/2))
72 , fHalf3x3(Type::MakeMatrixType("half3x3", "h33", *fHalf, /*columns=*/3, /*rows=*/3))
73 , fHalf3x4(Type::MakeMatrixType("half3x4", "h34", *fHalf, /*columns=*/3, /*rows=*/4))
74 , fHalf4x2(Type::MakeMatrixType("half4x2", "h42", *fHalf, /*columns=*/4, /*rows=*/2))
75 , fHalf4x3(Type::MakeMatrixType("half4x3", "h43", *fHalf, /*columns=*/4, /*rows=*/3))
76 , fHalf4x4(Type::MakeMatrixType("half4x4", "h44", *fHalf, /*columns=*/4, /*rows=*/4))
77 , fVec2(Type::MakeAliasType("vec2", *fFloat2))
78 , fVec3(Type::MakeAliasType("vec3", *fFloat3))
79 , fVec4(Type::MakeAliasType("vec4", *fFloat4))
80 , fIVec2(Type::MakeAliasType("ivec2", *fInt2))
81 , fIVec3(Type::MakeAliasType("ivec3", *fInt3))
82 , fIVec4(Type::MakeAliasType("ivec4", *fInt4))
83 , fBVec2(Type::MakeAliasType("bvec2", *fBool2))
84 , fBVec3(Type::MakeAliasType("bvec3", *fBool3))
85 , fBVec4(Type::MakeAliasType("bvec4", *fBool4))
86 , fMat2(Type::MakeAliasType("mat2", *fFloat2x2))
87 , fMat3(Type::MakeAliasType("mat3", *fFloat3x3))
88 , fMat4(Type::MakeAliasType("mat4", *fFloat4x4))
89 , fMat2x2(Type::MakeAliasType("mat2x2", *fFloat2x2))
90 , fMat2x3(Type::MakeAliasType("mat2x3", *fFloat2x3))
91 , fMat2x4(Type::MakeAliasType("mat2x4", *fFloat2x4))
92 , fMat3x2(Type::MakeAliasType("mat3x2", *fFloat3x2))
93 , fMat3x3(Type::MakeAliasType("mat3x3", *fFloat3x3))
94 , fMat3x4(Type::MakeAliasType("mat3x4", *fFloat3x4))
95 , fMat4x2(Type::MakeAliasType("mat4x2", *fFloat4x2))
96 , fMat4x3(Type::MakeAliasType("mat4x3", *fFloat4x3))
97 , fMat4x4(Type::MakeAliasType("mat4x4", *fFloat4x4))
98 , fTexture2D_sample(Type::MakeTextureType("$texture2D_sample",
100 /*isDepth=*/false,
101 /*isArrayedTexture=*/false,
102 /*isMultisampled=*/false,
103 Type::TextureAccess::kSample))
104 , fTextureExternalOES(Type::MakeTextureType("textureExternalOES",
105 SpvDim2D,
106 /*isDepth=*/false,
107 /*isArrayedTexture=*/false,
108 /*isMultisampled=*/false,
109 Type::TextureAccess::kSample))
110 , fTexture2DRect(Type::MakeTextureType("texture2DRect",
112 /*isDepth=*/false,
113 /*isArrayedTexture=*/false,
114 /*isMultisampled=*/false,
115 Type::TextureAccess::kSample))
116 , fTexture2D(Type::MakeTextureType("texture2D",
117 SpvDim2D,
118 /*isDepth=*/false,
119 /*isArrayedTexture=*/false,
120 /*isMultisampled=*/false,
121 Type::TextureAccess::kReadWrite))
122 , fReadOnlyTexture2D(Type::MakeTextureType("readonlyTexture2D",
123 SpvDim2D,
124 /*isDepth=*/false,
125 /*isArrayedTexture=*/false,
126 /*isMultisampled=*/false,
127 Type::TextureAccess::kRead))
128 , fWriteOnlyTexture2D(Type::MakeTextureType("writeonlyTexture2D",
129 SpvDim2D,
130 /*isDepth=*/false,
131 /*isArrayedTexture=*/false,
132 /*isMultisampled=*/false,
133 Type::TextureAccess::kWrite))
134 , fGenTexture2D(Type::MakeGenericType("$genTexture2D",
135 {fReadOnlyTexture2D.get(),
137 fTexture2D.get()},
138 fTexture2D.get()))
139 , fReadableTexture2D(Type::MakeGenericType("$readableTexture2D",
140 {fReadOnlyTexture2D.get(),
141 fInvalid.get(),
142 fTexture2D.get()},
143 fTexture2D.get()))
144 , fWritableTexture2D(Type::MakeGenericType("$writableTexture2D",
145 {fInvalid.get(),
146 fWriteOnlyTexture2D.get(),
147 fTexture2D.get()},
148 fTexture2D.get()))
149 , fSampler2D(Type::MakeSamplerType("sampler2D", *fTexture2D_sample))
150 , fSamplerExternalOES(Type::MakeSamplerType("samplerExternalOES", *fTextureExternalOES))
151 , fSampler2DRect(Type::MakeSamplerType("sampler2DRect", *fTexture2DRect))
152
153 , fSampler(Type::MakeSpecialType("sampler", "ss", Type::TypeKind::kSeparateSampler))
154
155 , fSubpassInput(Type::MakeTextureType("subpassInput",
157 /*isDepth=*/false,
158 /*isArrayedTexture=*/false,
159 /*isMultisampled=*/false,
161 , fSubpassInputMS(Type::MakeTextureType("subpassInputMS",
163 /*isDepth=*/false,
164 /*isArrayedTexture=*/false,
165 /*isMultisampled=*/true,
167 , fGenType(Type::MakeGenericType("$genType", {fFloat.get(), fFloat2.get(), fFloat3.get(),
168 fFloat4.get()}, fFloat.get()))
169 , fGenHType(Type::MakeGenericType("$genHType", {fHalf.get(), fHalf2.get(), fHalf3.get(),
170 fHalf4.get()}, fHalf.get()))
171 , fGenIType(Type::MakeGenericType("$genIType", {fInt.get(), fInt2.get(), fInt3.get(),
172 fInt4.get()}, fInt.get()))
173 , fGenUType(Type::MakeGenericType("$genUType", {fUInt.get(), fUInt2.get(), fUInt3.get(),
174 fUInt4.get()}, fUInt.get()))
175 , fGenBType(Type::MakeGenericType("$genBType", {fBool.get(), fBool2.get(), fBool3.get(),
176 fBool4.get()}, fBool.get()))
177 , fMat(Type::MakeGenericType("$mat", {fFloat2x2.get(), fFloat2x3.get(), fFloat2x4.get(),
178 fFloat3x2.get(), fFloat3x3.get(), fFloat3x4.get(),
179 fFloat4x2.get(), fFloat4x3.get(), fFloat4x4.get()},
180 fFloat.get()))
181 , fHMat(Type::MakeGenericType("$hmat", {fHalf2x2.get(), fHalf2x3.get(), fHalf2x4.get(),
182 fHalf3x2.get(), fHalf3x3.get(), fHalf3x4.get(),
183 fHalf4x2.get(), fHalf4x3.get(), fHalf4x4.get()},
184 fHalf.get()))
185 , fSquareMat(Type::MakeGenericType("$squareMat", {fInvalid.get(), fFloat2x2.get(),
186 fFloat3x3.get(), fFloat4x4.get()},
187 fFloat.get()))
188 , fSquareHMat(Type::MakeGenericType("$squareHMat", {fInvalid.get(), fHalf2x2.get(),
189 fHalf3x3.get(), fHalf4x4.get()},
190 fHalf.get()))
191 , fVec(Type::MakeGenericType("$vec", {fInvalid.get(), fFloat2.get(), fFloat3.get(),
192 fFloat4.get()}, fFloat.get()))
193 , fHVec(Type::MakeGenericType("$hvec", {fInvalid.get(), fHalf2.get(), fHalf3.get(),
194 fHalf4.get()}, fHalf.get()))
195 , fIVec(Type::MakeGenericType("$ivec", {fInvalid.get(), fInt2.get(), fInt3.get(),
196 fInt4.get()}, fInt.get()))
197 , fUVec(Type::MakeGenericType("$uvec", {fInvalid.get(), fUInt2.get(), fUInt3.get(),
198 fUInt4.get()}, fUInt.get()))
199 , fSVec(Type::MakeGenericType("$svec", {fInvalid.get(), fShort2.get(), fShort3.get(),
200 fShort4.get()}, fShort.get()))
201 , fUSVec(Type::MakeGenericType("$usvec", {fInvalid.get(), fUShort2.get(), fUShort3.get(),
202 fUShort4.get()}, fUShort.get()))
203 , fBVec(Type::MakeGenericType("$bvec", {fInvalid.get(), fBool2.get(), fBool3.get(),
204 fBool4.get()}, fBool.get()))
205 , fSkCaps(Type::MakeSpecialType("$sk_Caps", "O", Type::TypeKind::kOther))
206 , fColorFilter(Type::MakeSpecialType("colorFilter", "CF", Type::TypeKind::kColorFilter))
207 , fShader(Type::MakeSpecialType("shader", "SH", Type::TypeKind::kShader))
208 , fBlender(Type::MakeSpecialType("blender", "B", Type::TypeKind::kBlender))
209 , fAtomicUInt(Type::MakeAtomicType("atomicUint", "au")) {}
210
211} // namespace SkSL
const std::unique_ptr< Type > fTexture2D
const std::unique_ptr< Type > fWriteOnlyTexture2D
const std::unique_ptr< Type > fReadOnlyTexture2D
static std::unique_ptr< Type > MakeTextureType(const char *name, SpvDim_ dimensions, bool isDepth, bool isArrayedTexture, bool isMultisampled, TextureAccess textureAccess)
Definition SkSLType.cpp:887
static std::unique_ptr< Type > MakeSamplerType(const char *name, const Type &textureType)
Definition SkSLType.cpp:792
static std::unique_ptr< Type > MakeGenericType(const char *name, SkSpan< const Type *const > types, const Type *slotType)
Definition SkSLType.cpp:776
static std::unique_ptr< Type > MakeAtomicType(std::string_view name, const char *abbrev)
Definition SkSLType.cpp:807
static std::unique_ptr< Type > MakeSpecialType(const char *name, const char *abbrev, Type::TypeKind typeKind)
Definition SkSLType.cpp:796
@ SpvDim2D
Definition spirv.h:143
@ SpvDimSubpassData
Definition spirv.h:148
@ SpvDimRect
Definition spirv.h:146