/* * Copyright 2021 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SKSL_BUILTIN_TYPES #define SKSL_BUILTIN_TYPES #include #include "src/sksl/ir/SkSLType.h" namespace SkSL { /** * Contains the built-in, core types for SkSL. */ class BuiltinTypes { public: BuiltinTypes(); const std::unique_ptr fFloat; const std::unique_ptr fFloat2; const std::unique_ptr fFloat3; const std::unique_ptr fFloat4; const std::unique_ptr fHalf; const std::unique_ptr fHalf2; const std::unique_ptr fHalf3; const std::unique_ptr fHalf4; const std::unique_ptr fInt; const std::unique_ptr fInt2; const std::unique_ptr fInt3; const std::unique_ptr fInt4; const std::unique_ptr fUInt; const std::unique_ptr fUInt2; const std::unique_ptr fUInt3; const std::unique_ptr fUInt4; const std::unique_ptr fShort; const std::unique_ptr fShort2; const std::unique_ptr fShort3; const std::unique_ptr fShort4; const std::unique_ptr fUShort; const std::unique_ptr fUShort2; const std::unique_ptr fUShort3; const std::unique_ptr fUShort4; const std::unique_ptr fBool; const std::unique_ptr fBool2; const std::unique_ptr fBool3; const std::unique_ptr fBool4; const std::unique_ptr fInvalid; const std::unique_ptr fVoid; const std::unique_ptr fFloatLiteral; const std::unique_ptr fIntLiteral; const std::unique_ptr fFloat2x2; const std::unique_ptr fFloat2x3; const std::unique_ptr fFloat2x4; const std::unique_ptr fFloat3x2; const std::unique_ptr fFloat3x3; const std::unique_ptr fFloat3x4; const std::unique_ptr fFloat4x2; const std::unique_ptr fFloat4x3; const std::unique_ptr fFloat4x4; const std::unique_ptr fHalf2x2; const std::unique_ptr fHalf2x3; const std::unique_ptr fHalf2x4; const std::unique_ptr fHalf3x2; const std::unique_ptr fHalf3x3; const std::unique_ptr fHalf3x4; const std::unique_ptr fHalf4x2; const std::unique_ptr fHalf4x3; const std::unique_ptr fHalf4x4; const std::unique_ptr fTexture1D; const std::unique_ptr fTexture2D; const std::unique_ptr fTexture3D; const std::unique_ptr fTextureExternalOES; const std::unique_ptr fTextureCube; const std::unique_ptr fTexture2DRect; const std::unique_ptr fITexture2D; const std::unique_ptr fSampler1D; const std::unique_ptr fSampler2D; const std::unique_ptr fSampler3D; const std::unique_ptr fSamplerExternalOES; const std::unique_ptr fSampler2DRect; const std::unique_ptr fISampler2D; const std::unique_ptr fSampler; const std::unique_ptr fSubpassInput; const std::unique_ptr fSubpassInputMS; const std::unique_ptr fGenType; const std::unique_ptr fGenHType; const std::unique_ptr fGenIType; const std::unique_ptr fGenUType; const std::unique_ptr fGenBType; const std::unique_ptr fMat; const std::unique_ptr fHMat; const std::unique_ptr fSquareMat; const std::unique_ptr fSquareHMat; const std::unique_ptr fVec; const std::unique_ptr fHVec; const std::unique_ptr fDVec; const std::unique_ptr fIVec; const std::unique_ptr fUVec; const std::unique_ptr fSVec; const std::unique_ptr fUSVec; const std::unique_ptr fByteVec; const std::unique_ptr fUByteVec; const std::unique_ptr fBVec; const std::unique_ptr fSkCaps; const std::unique_ptr fFragmentProcessor; const std::unique_ptr fColorFilter; const std::unique_ptr fShader; private: static std::unique_ptr MakeScalarType(const char* name, const char* abbrev, Type::NumberKind numberKind, int priority, bool highPrecision = false); static std::unique_ptr MakeLiteralType(const char* name, const Type& scalarType, int priority); static std::unique_ptr MakeVectorType(const char* name, const char* abbrev, const Type& componentType, int columns); static std::unique_ptr MakeGenericType(const char* name, std::vector types); static std::unique_ptr MakeMatrixType(const char* name, const char* abbrev, const Type& componentType, int columns, int rows); static std::unique_ptr MakeTextureType(const char* name, SpvDim_ dimensions, bool isDepth, bool isArrayedTexture, bool isMultisampled, bool isSampled); static std::unique_ptr MakeSamplerType(const char* name, const Type& textureType); static std::unique_ptr MakeSpecialType(const char* name, const char* abbrev, Type::TypeKind typeKind); }; } // namespace SkSL #endif