164 static std::unique_ptr<Type>
MakeMatrixType(std::string_view
name,
const char* abbrev,
172 static std::unique_ptr<Type>
MakeScalarType(std::string_view
name,
const char* abbrev,
188 std::string_view
name,
190 bool interfaceBlock =
false);
198 static std::unique_ptr<Type>
MakeVectorType(std::string_view
name,
const char* abbrev,
202 static std::unique_ptr<Type>
MakeAtomicType(std::string_view
name,
const char* abbrev);
204 template <
typename T>
206 return this->
typeKind() == T::kTypeKind;
209 template <
typename T>
212 return static_cast<const T&
>(*this);
215 template <
typename T>
218 return static_cast<T&
>(*this);
277 return fAbbreviatedName;
470 SK_ABORT(
"Internal error: not a struct");
611 std::unique_ptr<Expression>
coerceExpression(std::unique_ptr<Expression> expr,
631 std::unique_ptr<Expression> size)
const;
643 strcpy(fAbbreviatedName, abbrev);
#define SkDEBUGFAIL(message)
#define SK_ABORT(message,...)
std::string_view name() const
virtual const Type & slotType(size_t) const
static constexpr Kind kIRNodeKind
static std::unique_ptr< Type > MakeAliasType(std::string_view name, const Type &targetType)
static std::unique_ptr< Type > MakeTextureType(const char *name, SpvDim_ dimensions, bool isDepth, bool isArrayedTexture, bool isMultisampled, TextureAccess textureAccess)
virtual bool isArray() const
Type(const Type &other)=delete
const Type * applyPrecisionQualifiers(const Context &context, ModifierFlags *modifierFlags, Position pos) const
bool isInRootSymbolTable() const
virtual int bitWidth() const
bool highPrecision() const
static std::unique_ptr< Type > MakeScalarType(std::string_view name, const char *abbrev, Type::NumberKind numberKind, int8_t priority, int8_t bitWidth)
virtual bool isVector() const
CoercionCost coercionCost(const Type &other) const
Type(std::string_view name, const char *abbrev, TypeKind kind, Position pos=Position())
static std::unique_ptr< Type > MakeArrayType(const Context &context, std::string_view name, const Type &componentType, int columns)
virtual int priority() const
std::unique_ptr< Expression > coerceExpression(std::unique_ptr< Expression > expr, const Context &context) const
bool isEffectChild() const
virtual const Type & componentType() const
virtual bool isInterfaceBlock() const
virtual bool isOrContainsArray() const
SKSL_INT convertArraySize(const Context &context, Position arrayPos, std::unique_ptr< Expression > size) const
const char * abbreviatedName() const
virtual SkSpan< const Field > fields() const
bool matches(const Type &other) const
virtual bool isMatrix() const
virtual bool isDepth() const
static std::unique_ptr< Type > MakeSamplerType(const char *name, const Type &textureType)
virtual bool isLiteral() const
virtual TextureAccess textureAccess() const
virtual const Type & resolve() const
bool checkIfUsableInArray(const Context &context, Position arrayPos) const
static std::unique_ptr< Type > MakeGenericType(const char *name, SkSpan< const Type *const > types, const Type *slotType)
virtual const Type & textureType() const
virtual int columns() const
virtual int structNestingDepth() const
virtual size_t slotCount() const
virtual bool isBuiltin() const
static constexpr int kUnsizedArray
virtual bool isScalar() const
virtual NumberKind numberKind() const
virtual bool isAllowedInES2() const
virtual const Type & scalarTypeForLiteral() const
virtual bool isUnsizedArray() const
virtual bool isAllowedInUniform(Position *errorPosition=nullptr) const
std::string description() const override
bool hasPrecision() const
static std::unique_ptr< Type > MakeLiteralType(const char *name, const Type &scalarType, int8_t priority)
const Type * applyAccessQualifiers(const Context &context, ModifierFlags *modifierFlags, Position pos) const
static std::unique_ptr< Type > MakeStructType(const Context &context, Position pos, std::string_view name, skia_private::TArray< Field > fields, bool interfaceBlock=false)
const Type & columnType(const Context &context) const
static std::unique_ptr< Type > MakeMatrixType(std::string_view name, const char *abbrev, const Type &componentType, int columns, int8_t rows)
virtual double maximumValue() const
std::string getArrayName(int arraySize) const
static std::unique_ptr< Type > MakeAtomicType(std::string_view name, const char *abbrev)
virtual bool isOrContainsAtomic() const
virtual bool isMultisampled() const
virtual SkSpan< const Type *const > coercibleTypes() const
bool canCoerceTo(const Type &other, bool allowNarrowing) const
bool isStorageTexture() const
virtual bool isArrayedTexture() const
static std::unique_ptr< Type > MakeSpecialType(const char *name, const char *abbrev, Type::TypeKind typeKind)
bool checkForOutOfRangeLiteral(const Context &context, const Expression &expr) const
static std::unique_ptr< Type > MakeVectorType(std::string_view name, const char *abbrev, const Type &componentType, int columns)
std::string displayName() const
const Type & toCompound(const Context &context, int columns, int rows) const
static constexpr int kMaxAbbrevLength
TypeKind typeKind() const
virtual bool isStruct() const
const Type * clone(const Context &context, SymbolTable *symbolTable) const
virtual SpvDim_ dimensions() const
virtual double minimumValue() const
virtual bool isOrContainsUnsizedArray() const
const Type * applyQualifiers(const Context &context, ModifierFlags *modifierFlags, Position pos) const
FlutterSemanticsFlag flags
bool operator<(CoercionCost rhs) const
static CoercionCost Impossible()
bool isPossible(bool allowNarrowing) const
static CoercionCost Narrowing(int cost)
CoercionCost operator+(CoercionCost rhs) const
static CoercionCost Free()
bool operator<=(CoercionCost rhs) const
static CoercionCost Normal(int cost)
std::string description() const
Field(Position pos, Layout layout, ModifierFlags flags, std::string_view name, const Type *type)
ModifierFlags fModifierFlags