diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/Types.h')
-rw-r--r-- | src/3rdparty/angle/src/compiler/translator/Types.h | 509 |
1 files changed, 0 insertions, 509 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/Types.h b/src/3rdparty/angle/src/compiler/translator/Types.h deleted file mode 100644 index 7dc84c5b1c..0000000000 --- a/src/3rdparty/angle/src/compiler/translator/Types.h +++ /dev/null @@ -1,509 +0,0 @@ -// -// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// - -#ifndef COMPILER_TRANSLATOR_TYPES_H_ -#define COMPILER_TRANSLATOR_TYPES_H_ - -#include "common/angleutils.h" -#include "common/debug.h" - -#include "compiler/translator/BaseTypes.h" -#include "compiler/translator/Common.h" -#include "compiler/translator/SymbolUniqueId.h" - -namespace sh -{ - -struct TPublicType; -class TType; -class TSymbol; -class TIntermSymbol; -class TSymbolTable; - -class TField : angle::NonCopyable -{ - public: - POOL_ALLOCATOR_NEW_DELETE(); - TField(TType *type, TString *name, const TSourceLoc &line) - : mType(type), mName(name), mLine(line) - { - } - - // TODO(alokp): We should only return const type. - // Fix it by tweaking grammar. - TType *type() { return mType; } - const TType *type() const { return mType; } - - const TString &name() const { return *mName; } - const TSourceLoc &line() const { return mLine; } - - private: - TType *mType; - TString *mName; - TSourceLoc mLine; -}; - -typedef TVector<TField *> TFieldList; -inline TFieldList *NewPoolTFieldList() -{ - void *memory = GetGlobalPoolAllocator()->allocate(sizeof(TFieldList)); - return new (memory) TFieldList; -} - -class TFieldListCollection : angle::NonCopyable -{ - public: - const TString &name() const { return *mName; } - const TFieldList &fields() const { return *mFields; } - - size_t objectSize() const - { - if (mObjectSize == 0) - mObjectSize = calculateObjectSize(); - return mObjectSize; - } - - // How many locations the field list consumes as a uniform. - int getLocationCount() const; - - protected: - TFieldListCollection(const TString *name, TFieldList *fields) - : mName(name), mFields(fields), mObjectSize(0) - { - } - TString buildMangledName(const TString &mangledNamePrefix) const; - size_t calculateObjectSize() const; - - const TString *mName; - TFieldList *mFields; - - mutable TString mMangledName; - mutable size_t mObjectSize; -}; - -// May also represent interface blocks -class TStructure : public TFieldListCollection -{ - public: - POOL_ALLOCATOR_NEW_DELETE(); - TStructure(TSymbolTable *symbolTable, const TString *name, TFieldList *fields); - - int deepestNesting() const - { - if (mDeepestNesting == 0) - mDeepestNesting = calculateDeepestNesting(); - return mDeepestNesting; - } - bool containsArrays() const; - bool containsType(TBasicType t) const; - bool containsSamplers() const; - - void createSamplerSymbols(const TString &namePrefix, - const TString &apiNamePrefix, - TVector<TIntermSymbol *> *outputSymbols, - TMap<TIntermSymbol *, TString> *outputSymbolsToAPINames, - TSymbolTable *symbolTable) const; - - bool equals(const TStructure &other) const; - - int uniqueId() const { return mUniqueId.get(); } - - void setAtGlobalScope(bool atGlobalScope) { mAtGlobalScope = atGlobalScope; } - - bool atGlobalScope() const { return mAtGlobalScope; } - - const TString &mangledName() const - { - if (mMangledName.empty()) - mMangledName = buildMangledName("struct-"); - return mMangledName; - } - - private: - // TODO(zmo): Find a way to get rid of the const_cast in function - // setName(). At the moment keep this function private so only - // friend class RegenerateStructNames may call it. - friend class RegenerateStructNames; - void setName(const TString &name) - { - TString *mutableName = const_cast<TString *>(mName); - *mutableName = name; - } - - int calculateDeepestNesting() const; - - mutable int mDeepestNesting; - const TSymbolUniqueId mUniqueId; - bool mAtGlobalScope; -}; - -class TInterfaceBlock : public TFieldListCollection -{ - public: - POOL_ALLOCATOR_NEW_DELETE(); - TInterfaceBlock(const TString *name, - TFieldList *fields, - const TString *instanceName, - const TLayoutQualifier &layoutQualifier) - : TFieldListCollection(name, fields), - mInstanceName(instanceName), - mBlockStorage(layoutQualifier.blockStorage), - mMatrixPacking(layoutQualifier.matrixPacking), - mBinding(layoutQualifier.binding) - { - } - - const TString &instanceName() const { return *mInstanceName; } - bool hasInstanceName() const { return mInstanceName != nullptr; } - TLayoutBlockStorage blockStorage() const { return mBlockStorage; } - TLayoutMatrixPacking matrixPacking() const { return mMatrixPacking; } - int blockBinding() const { return mBinding; } - const TString &mangledName() const - { - if (mMangledName.empty()) - mMangledName = buildMangledName("iblock-"); - return mMangledName; - } - - private: - const TString *mInstanceName; // for interface block instance names - TLayoutBlockStorage mBlockStorage; - TLayoutMatrixPacking mMatrixPacking; - int mBinding; -}; - -// -// Base class for things that have a type. -// -class TType -{ - public: - POOL_ALLOCATOR_NEW_DELETE(); - TType(); - explicit TType(TBasicType t, unsigned char ps = 1, unsigned char ss = 1); - TType(TBasicType t, - TPrecision p, - TQualifier q = EvqTemporary, - unsigned char ps = 1, - unsigned char ss = 1); - explicit TType(const TPublicType &p); - explicit TType(TStructure *userDef); - TType(TInterfaceBlock *interfaceBlockIn, - TQualifier qualifierIn, - TLayoutQualifier layoutQualifierIn); - TType(const TType &t); - TType &operator=(const TType &t); - - TBasicType getBasicType() const { return type; } - void setBasicType(TBasicType t); - - TPrecision getPrecision() const { return precision; } - void setPrecision(TPrecision p) { precision = p; } - - TQualifier getQualifier() const { return qualifier; } - void setQualifier(TQualifier q) { qualifier = q; } - - bool isInvariant() const { return invariant; } - - void setInvariant(bool i) { invariant = i; } - - TMemoryQualifier getMemoryQualifier() const { return memoryQualifier; } - void setMemoryQualifier(const TMemoryQualifier &mq) { memoryQualifier = mq; } - - TLayoutQualifier getLayoutQualifier() const { return layoutQualifier; } - void setLayoutQualifier(TLayoutQualifier lq) { layoutQualifier = lq; } - - int getNominalSize() const { return primarySize; } - int getSecondarySize() const { return secondarySize; } - int getCols() const - { - ASSERT(isMatrix()); - return primarySize; - } - int getRows() const - { - ASSERT(isMatrix()); - return secondarySize; - } - void setPrimarySize(unsigned char ps); - void setSecondarySize(unsigned char ss); - - // Full size of single instance of type - size_t getObjectSize() const; - - // Get how many locations this type consumes as a uniform. - int getLocationCount() const; - - bool isMatrix() const { return primarySize > 1 && secondarySize > 1; } - bool isNonSquareMatrix() const { return isMatrix() && primarySize != secondarySize; } - bool isArray() const { return mArraySizes != nullptr && !mArraySizes->empty(); } - bool isArrayOfArrays() const { return isArray() && mArraySizes->size() > 1u; } - size_t getNumArraySizes() const { return isArray() ? mArraySizes->size() : 0; } - const TVector<unsigned int> *getArraySizes() const { return mArraySizes; } - unsigned int getArraySizeProduct() const; - bool isUnsizedArray() const; - unsigned int getOutermostArraySize() const { - ASSERT(isArray()); - return mArraySizes->back(); - } - void makeArray(unsigned int s); - - // sizes contain new outermost array sizes. - void makeArrays(const TVector<unsigned int> &sizes); - // Here, the array dimension value 0 corresponds to the innermost array. - void setArraySize(size_t arrayDimension, unsigned int s); - - // Will set unsized array sizes according to newArraySizes. In case there are more - // unsized arrays than there are sizes in newArraySizes, defaults to setting any - // remaining array sizes to 1. - void sizeUnsizedArrays(const TVector<unsigned int> *newArraySizes); - - // Will size the outermost array according to arraySize. - void sizeOutermostUnsizedArray(unsigned int arraySize); - - // Note that the array element type might still be an array type in GLSL ES version >= 3.10. - void toArrayElementType(); - - TInterfaceBlock *getInterfaceBlock() const { return mInterfaceBlock; } - void setInterfaceBlock(TInterfaceBlock *interfaceBlockIn); - bool isInterfaceBlock() const { return type == EbtInterfaceBlock; } - - bool isVector() const { return primarySize > 1 && secondarySize == 1; } - bool isScalar() const - { - return primarySize == 1 && secondarySize == 1 && !mStructure && !isArray(); - } - bool isScalarFloat() const { return isScalar() && type == EbtFloat; } - bool isScalarInt() const { return isScalar() && (type == EbtInt || type == EbtUInt); } - - bool canBeConstructed() const; - - TStructure *getStruct() { return mStructure; } - const TStructure *getStruct() const { return mStructure; } - void setStruct(TStructure *s); - - const char *getMangledName() const; - - bool sameNonArrayType(const TType &right) const; - - // Returns true if arrayType is an array made of this type. - bool isElementTypeOf(const TType &arrayType) const; - - bool operator==(const TType &right) const - { - size_t numArraySizesL = getNumArraySizes(); - size_t numArraySizesR = right.getNumArraySizes(); - bool arraySizesEqual = numArraySizesL == numArraySizesR && - (numArraySizesL == 0 || *mArraySizes == *right.mArraySizes); - return type == right.type && primarySize == right.primarySize && - secondarySize == right.secondarySize && arraySizesEqual && - mStructure == right.mStructure; - // don't check the qualifier, it's not ever what's being sought after - } - bool operator!=(const TType &right) const { return !operator==(right); } - bool operator<(const TType &right) const - { - if (type != right.type) - return type < right.type; - if (primarySize != right.primarySize) - return primarySize < right.primarySize; - if (secondarySize != right.secondarySize) - return secondarySize < right.secondarySize; - size_t numArraySizesL = getNumArraySizes(); - size_t numArraySizesR = right.getNumArraySizes(); - if (numArraySizesL != numArraySizesR) - return numArraySizesL < numArraySizesR; - for (size_t i = 0; i < numArraySizesL; ++i) - { - if ((*mArraySizes)[i] != (*right.mArraySizes)[i]) - return (*mArraySizes)[i] < (*right.mArraySizes)[i]; - } - if (mStructure != right.mStructure) - return mStructure < right.mStructure; - - return false; - } - - const char *getBasicString() const { return sh::getBasicString(type); } - - const char *getPrecisionString() const { return sh::getPrecisionString(precision); } - const char *getQualifierString() const { return sh::getQualifierString(qualifier); } - - const char *getBuiltInTypeNameString() const; - - TString getCompleteString() const; - - // If this type is a struct, returns the deepest struct nesting of - // any field in the struct. For example: - // struct nesting1 { - // vec4 position; - // }; - // struct nesting2 { - // nesting1 field1; - // vec4 field2; - // }; - // For type "nesting2", this method would return 2 -- the number - // of structures through which indirection must occur to reach the - // deepest field (nesting2.field1.position). - int getDeepestStructNesting() const { return mStructure ? mStructure->deepestNesting() : 0; } - - bool isNamelessStruct() const { return mStructure && mStructure->name() == ""; } - - bool isStructureContainingArrays() const - { - return mStructure ? mStructure->containsArrays() : false; - } - - bool isStructureContainingType(TBasicType t) const - { - return mStructure ? mStructure->containsType(t) : false; - } - - bool isStructureContainingSamplers() const - { - return mStructure ? mStructure->containsSamplers() : false; - } - - bool isStructSpecifier() const { return mIsStructSpecifier; } - - void createSamplerSymbols(const TString &namePrefix, - const TString &apiNamePrefix, - TVector<TIntermSymbol *> *outputSymbols, - TMap<TIntermSymbol *, TString> *outputSymbolsToAPINames, - TSymbolTable *symbolTable) const; - - // Initializes all lazily-initialized members. - void realize(); - - private: - void invalidateMangledName(); - const char *buildMangledName() const; - - TBasicType type; - TPrecision precision; - TQualifier qualifier; - bool invariant; - TMemoryQualifier memoryQualifier; - TLayoutQualifier layoutQualifier; - unsigned char primarySize; // size of vector or cols matrix - unsigned char secondarySize; // rows of a matrix - - // Used to make an array type. Outermost array size is stored at the end of the vector. Having 0 - // in this vector means an unsized array. - TVector<unsigned int> *mArraySizes; - - // This is set only in the following two cases: - // 1) Represents an interface block. - // 2) Represents the member variable of an unnamed interface block. - // It's nullptr also for members of named interface blocks. - TInterfaceBlock *mInterfaceBlock; - - // 0 unless this is a struct - TStructure *mStructure; - bool mIsStructSpecifier; - - mutable const char *mMangledName; -}; - -// TTypeSpecifierNonArray stores all of the necessary fields for type_specifier_nonarray from the -// grammar -struct TTypeSpecifierNonArray -{ - TBasicType type; - unsigned char primarySize; // size of vector or cols of matrix - unsigned char secondarySize; // rows of matrix - TStructure *userDef; - TSourceLoc line; - - // true if the type was defined by a struct specifier rather than a reference to a type name. - bool isStructSpecifier; - - void initialize(TBasicType aType, const TSourceLoc &aLine) - { - ASSERT(aType != EbtStruct); - type = aType; - primarySize = 1; - secondarySize = 1; - userDef = nullptr; - line = aLine; - isStructSpecifier = false; - } - - void initializeStruct(TStructure *aUserDef, bool aIsStructSpecifier, const TSourceLoc &aLine) - { - type = EbtStruct; - primarySize = 1; - secondarySize = 1; - userDef = aUserDef; - line = aLine; - isStructSpecifier = aIsStructSpecifier; - } - - void setAggregate(unsigned char size) { primarySize = size; } - - void setMatrix(unsigned char columns, unsigned char rows) - { - ASSERT(columns > 1 && rows > 1 && columns <= 4 && rows <= 4); - primarySize = columns; - secondarySize = rows; - } - - bool isMatrix() const { return primarySize > 1 && secondarySize > 1; } - - bool isVector() const { return primarySize > 1 && secondarySize == 1; } -}; - -// -// This is a workaround for a problem with the yacc stack, It can't have -// types that it thinks have non-trivial constructors. It should -// just be used while recognizing the grammar, not anything else. Pointers -// could be used, but also trying to avoid lots of memory management overhead. -// -// Not as bad as it looks, there is no actual assumption that the fields -// match up or are name the same or anything like that. -// -struct TPublicType -{ - // Must have a trivial default constructor since it is used in YYSTYPE. - TPublicType() = default; - - void initialize(const TTypeSpecifierNonArray &typeSpecifier, TQualifier q); - void initializeBasicType(TBasicType basicType); - - TBasicType getBasicType() const { return typeSpecifierNonArray.type; } - void setBasicType(TBasicType basicType) { typeSpecifierNonArray.type = basicType; } - - unsigned char getPrimarySize() const { return typeSpecifierNonArray.primarySize; } - unsigned char getSecondarySize() const { return typeSpecifierNonArray.secondarySize; } - - TStructure *getUserDef() const { return typeSpecifierNonArray.userDef; } - const TSourceLoc &getLine() const { return typeSpecifierNonArray.line; } - - bool isStructSpecifier() const { return typeSpecifierNonArray.isStructSpecifier; } - - bool isStructureContainingArrays() const; - bool isStructureContainingType(TBasicType t) const; - void setArraySizes(TVector<unsigned int> *sizes); - bool isArray() const; - void clearArrayness(); - bool isAggregate() const; - - TTypeSpecifierNonArray typeSpecifierNonArray; - TLayoutQualifier layoutQualifier; - TMemoryQualifier memoryQualifier; - TQualifier qualifier; - bool invariant; - TPrecision precision; - - // Either nullptr or empty in case the type is not an array. The last element is the outermost - // array size. Note that due to bison restrictions, copies of the public type created by the - // copy constructor share the same arraySizes pointer. - const TVector<unsigned int> *arraySizes; -}; - -} // namespace sh - -#endif // COMPILER_TRANSLATOR_TYPES_H_ |