summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/compiler/translator/Types.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/Types.cpp')
-rw-r--r--src/3rdparty/angle/src/compiler/translator/Types.cpp1072
1 files changed, 0 insertions, 1072 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/Types.cpp b/src/3rdparty/angle/src/compiler/translator/Types.cpp
deleted file mode 100644
index 530ffe3aeb..0000000000
--- a/src/3rdparty/angle/src/compiler/translator/Types.cpp
+++ /dev/null
@@ -1,1072 +0,0 @@
-//
-// Copyright (c) 2002-2014 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.
-//
-
-#if defined(_MSC_VER)
-#pragma warning(disable : 4718)
-#endif
-
-#include "compiler/translator/Types.h"
-#include "compiler/translator/InfoSink.h"
-#include "compiler/translator/IntermNode.h"
-#include "compiler/translator/SymbolTable.h"
-
-#include <algorithm>
-#include <climits>
-
-namespace sh
-{
-
-const char *getBasicString(TBasicType t)
-{
- switch (t)
- {
- case EbtVoid:
- return "void";
- case EbtFloat:
- return "float";
- case EbtInt:
- return "int";
- case EbtUInt:
- return "uint";
- case EbtBool:
- return "bool";
- case EbtYuvCscStandardEXT:
- return "yuvCscStandardEXT";
- case EbtSampler2D:
- return "sampler2D";
- case EbtSampler3D:
- return "sampler3D";
- case EbtSamplerCube:
- return "samplerCube";
- case EbtSamplerExternalOES:
- return "samplerExternalOES";
- case EbtSamplerExternal2DY2YEXT:
- return "__samplerExternal2DY2YEXT";
- case EbtSampler2DRect:
- return "sampler2DRect";
- case EbtSampler2DArray:
- return "sampler2DArray";
- case EbtSampler2DMS:
- return "sampler2DMS";
- case EbtISampler2D:
- return "isampler2D";
- case EbtISampler3D:
- return "isampler3D";
- case EbtISamplerCube:
- return "isamplerCube";
- case EbtISampler2DArray:
- return "isampler2DArray";
- case EbtISampler2DMS:
- return "isampler2DMS";
- case EbtUSampler2D:
- return "usampler2D";
- case EbtUSampler3D:
- return "usampler3D";
- case EbtUSamplerCube:
- return "usamplerCube";
- case EbtUSampler2DArray:
- return "usampler2DArray";
- case EbtUSampler2DMS:
- return "usampler2DMS";
- case EbtSampler2DShadow:
- return "sampler2DShadow";
- case EbtSamplerCubeShadow:
- return "samplerCubeShadow";
- case EbtSampler2DArrayShadow:
- return "sampler2DArrayShadow";
- case EbtStruct:
- return "structure";
- case EbtInterfaceBlock:
- return "interface block";
- case EbtImage2D:
- return "image2D";
- case EbtIImage2D:
- return "iimage2D";
- case EbtUImage2D:
- return "uimage2D";
- case EbtImage3D:
- return "image3D";
- case EbtIImage3D:
- return "iimage3D";
- case EbtUImage3D:
- return "uimage3D";
- case EbtImage2DArray:
- return "image2DArray";
- case EbtIImage2DArray:
- return "iimage2DArray";
- case EbtUImage2DArray:
- return "uimage2DArray";
- case EbtImageCube:
- return "imageCube";
- case EbtIImageCube:
- return "iimageCube";
- case EbtUImageCube:
- return "uimageCube";
- case EbtAtomicCounter:
- return "atomic_uint";
- default:
- UNREACHABLE();
- return "unknown type";
- }
-}
-
-// TType implementation.
-TType::TType()
- : type(EbtVoid),
- precision(EbpUndefined),
- qualifier(EvqGlobal),
- invariant(false),
- memoryQualifier(TMemoryQualifier::Create()),
- layoutQualifier(TLayoutQualifier::Create()),
- primarySize(0),
- secondarySize(0),
- mArraySizes(nullptr),
- mInterfaceBlock(nullptr),
- mStructure(nullptr),
- mIsStructSpecifier(false),
- mMangledName(nullptr)
-{
-}
-
-TType::TType(TBasicType t, unsigned char ps, unsigned char ss)
- : type(t),
- precision(EbpUndefined),
- qualifier(EvqGlobal),
- invariant(false),
- memoryQualifier(TMemoryQualifier::Create()),
- layoutQualifier(TLayoutQualifier::Create()),
- primarySize(ps),
- secondarySize(ss),
- mArraySizes(nullptr),
- mInterfaceBlock(nullptr),
- mStructure(nullptr),
- mIsStructSpecifier(false),
- mMangledName(nullptr)
-{
-}
-
-TType::TType(TBasicType t, TPrecision p, TQualifier q, unsigned char ps, unsigned char ss)
- : type(t),
- precision(p),
- qualifier(q),
- invariant(false),
- memoryQualifier(TMemoryQualifier::Create()),
- layoutQualifier(TLayoutQualifier::Create()),
- primarySize(ps),
- secondarySize(ss),
- mArraySizes(nullptr),
- mInterfaceBlock(nullptr),
- mStructure(nullptr),
- mIsStructSpecifier(false),
- mMangledName(nullptr)
-{
-}
-
-TType::TType(const TPublicType &p)
- : type(p.getBasicType()),
- precision(p.precision),
- qualifier(p.qualifier),
- invariant(p.invariant),
- memoryQualifier(p.memoryQualifier),
- layoutQualifier(p.layoutQualifier),
- primarySize(p.getPrimarySize()),
- secondarySize(p.getSecondarySize()),
- mArraySizes(nullptr),
- mInterfaceBlock(nullptr),
- mStructure(nullptr),
- mIsStructSpecifier(false),
- mMangledName(nullptr)
-{
- ASSERT(primarySize <= 4);
- ASSERT(secondarySize <= 4);
- if (p.isArray())
- {
- mArraySizes = new TVector<unsigned int>(*p.arraySizes);
- }
- if (p.getUserDef())
- {
- mStructure = p.getUserDef();
- mIsStructSpecifier = p.isStructSpecifier();
- }
-}
-
-TType::TType(TStructure *userDef)
- : type(EbtStruct),
- precision(EbpUndefined),
- qualifier(EvqTemporary),
- invariant(false),
- memoryQualifier(TMemoryQualifier::Create()),
- layoutQualifier(TLayoutQualifier::Create()),
- primarySize(1),
- secondarySize(1),
- mArraySizes(nullptr),
- mInterfaceBlock(nullptr),
- mStructure(userDef),
- mIsStructSpecifier(false),
- mMangledName(nullptr)
-{
-}
-
-TType::TType(TInterfaceBlock *interfaceBlockIn,
- TQualifier qualifierIn,
- TLayoutQualifier layoutQualifierIn)
- : type(EbtInterfaceBlock),
- precision(EbpUndefined),
- qualifier(qualifierIn),
- invariant(false),
- memoryQualifier(TMemoryQualifier::Create()),
- layoutQualifier(layoutQualifierIn),
- primarySize(1),
- secondarySize(1),
- mArraySizes(nullptr),
- mInterfaceBlock(interfaceBlockIn),
- mStructure(0),
- mIsStructSpecifier(false),
- mMangledName(nullptr)
-{
-}
-
-TType::TType(const TType &t)
- : type(t.type),
- precision(t.precision),
- qualifier(t.qualifier),
- invariant(t.invariant),
- memoryQualifier(t.memoryQualifier),
- layoutQualifier(t.layoutQualifier),
- primarySize(t.primarySize),
- secondarySize(t.secondarySize),
- mArraySizes(t.mArraySizes ? new TVector<unsigned int>(*t.mArraySizes) : nullptr),
- mInterfaceBlock(t.mInterfaceBlock),
- mStructure(t.mStructure),
- mIsStructSpecifier(t.mIsStructSpecifier),
- mMangledName(t.mMangledName)
-{
-}
-
-TType &TType::operator=(const TType &t)
-{
- type = t.type;
- precision = t.precision;
- qualifier = t.qualifier;
- invariant = t.invariant;
- memoryQualifier = t.memoryQualifier;
- layoutQualifier = t.layoutQualifier;
- primarySize = t.primarySize;
- secondarySize = t.secondarySize;
- mArraySizes = t.mArraySizes ? new TVector<unsigned int>(*t.mArraySizes) : nullptr;
- mInterfaceBlock = t.mInterfaceBlock;
- mStructure = t.mStructure;
- mIsStructSpecifier = t.mIsStructSpecifier;
- mMangledName = t.mMangledName;
- return *this;
-}
-
-bool TType::canBeConstructed() const
-{
- switch (type)
- {
- case EbtFloat:
- case EbtInt:
- case EbtUInt:
- case EbtBool:
- case EbtStruct:
- return true;
- default:
- return false;
- }
-}
-
-const char *TType::getBuiltInTypeNameString() const
-{
- if (isMatrix())
- {
- switch (getCols())
- {
- case 2:
- switch (getRows())
- {
- case 2:
- return "mat2";
- case 3:
- return "mat2x3";
- case 4:
- return "mat2x4";
- default:
- UNREACHABLE();
- return nullptr;
- }
- case 3:
- switch (getRows())
- {
- case 2:
- return "mat3x2";
- case 3:
- return "mat3";
- case 4:
- return "mat3x4";
- default:
- UNREACHABLE();
- return nullptr;
- }
- case 4:
- switch (getRows())
- {
- case 2:
- return "mat4x2";
- case 3:
- return "mat4x3";
- case 4:
- return "mat4";
- default:
- UNREACHABLE();
- return nullptr;
- }
- default:
- UNREACHABLE();
- return nullptr;
- }
- }
- if (isVector())
- {
- switch (getBasicType())
- {
- case EbtFloat:
- switch (getNominalSize())
- {
- case 2:
- return "vec2";
- case 3:
- return "vec3";
- case 4:
- return "vec4";
- default:
- UNREACHABLE();
- return nullptr;
- }
- case EbtInt:
- switch (getNominalSize())
- {
- case 2:
- return "ivec2";
- case 3:
- return "ivec3";
- case 4:
- return "ivec4";
- default:
- UNREACHABLE();
- return nullptr;
- }
- case EbtBool:
- switch (getNominalSize())
- {
- case 2:
- return "bvec2";
- case 3:
- return "bvec3";
- case 4:
- return "bvec4";
- default:
- UNREACHABLE();
- return nullptr;
- }
- case EbtUInt:
- switch (getNominalSize())
- {
- case 2:
- return "uvec2";
- case 3:
- return "uvec3";
- case 4:
- return "uvec4";
- default:
- UNREACHABLE();
- return nullptr;
- }
- default:
- UNREACHABLE();
- return nullptr;
- }
- }
- ASSERT(getBasicType() != EbtStruct);
- ASSERT(getBasicType() != EbtInterfaceBlock);
- return getBasicString();
-}
-
-TString TType::getCompleteString() const
-{
- TStringStream stream;
-
- if (invariant)
- stream << "invariant ";
- if (qualifier != EvqTemporary && qualifier != EvqGlobal)
- stream << getQualifierString() << " ";
- if (precision != EbpUndefined)
- stream << getPrecisionString() << " ";
- if (mArraySizes)
- {
- for (auto arraySizeIter = mArraySizes->rbegin(); arraySizeIter != mArraySizes->rend();
- ++arraySizeIter)
- {
- stream << "array[" << (*arraySizeIter) << "] of ";
- }
- }
- if (isMatrix())
- stream << getCols() << "X" << getRows() << " matrix of ";
- else if (isVector())
- stream << getNominalSize() << "-component vector of ";
-
- stream << getBasicString();
- return stream.str();
-}
-
-//
-// Recursively generate mangled names.
-//
-const char *TType::buildMangledName() const
-{
- TString mangledName;
- if (isMatrix())
- mangledName += 'm';
- else if (isVector())
- mangledName += 'v';
-
- switch (type)
- {
- case EbtFloat:
- mangledName += 'f';
- break;
- case EbtInt:
- mangledName += 'i';
- break;
- case EbtUInt:
- mangledName += 'u';
- break;
- case EbtBool:
- mangledName += 'b';
- break;
- case EbtYuvCscStandardEXT:
- mangledName += "ycs";
- break;
- case EbtSampler2D:
- mangledName += "s2";
- break;
- case EbtSampler3D:
- mangledName += "s3";
- break;
- case EbtSamplerCube:
- mangledName += "sC";
- break;
- case EbtSampler2DArray:
- mangledName += "s2a";
- break;
- case EbtSamplerExternalOES:
- mangledName += "sext";
- break;
- case EbtSamplerExternal2DY2YEXT:
- mangledName += "sext2y2y";
- break;
- case EbtSampler2DRect:
- mangledName += "s2r";
- break;
- case EbtSampler2DMS:
- mangledName += "s2ms";
- break;
- case EbtISampler2D:
- mangledName += "is2";
- break;
- case EbtISampler3D:
- mangledName += "is3";
- break;
- case EbtISamplerCube:
- mangledName += "isC";
- break;
- case EbtISampler2DArray:
- mangledName += "is2a";
- break;
- case EbtISampler2DMS:
- mangledName += "is2ms";
- break;
- case EbtUSampler2D:
- mangledName += "us2";
- break;
- case EbtUSampler3D:
- mangledName += "us3";
- break;
- case EbtUSamplerCube:
- mangledName += "usC";
- break;
- case EbtUSampler2DArray:
- mangledName += "us2a";
- break;
- case EbtUSampler2DMS:
- mangledName += "us2ms";
- break;
- case EbtSampler2DShadow:
- mangledName += "s2s";
- break;
- case EbtSamplerCubeShadow:
- mangledName += "sCs";
- break;
- case EbtSampler2DArrayShadow:
- mangledName += "s2as";
- break;
- case EbtImage2D:
- mangledName += "im2";
- break;
- case EbtIImage2D:
- mangledName += "iim2";
- break;
- case EbtUImage2D:
- mangledName += "uim2";
- break;
- case EbtImage3D:
- mangledName += "im3";
- break;
- case EbtIImage3D:
- mangledName += "iim3";
- break;
- case EbtUImage3D:
- mangledName += "uim3";
- break;
- case EbtImage2DArray:
- mangledName += "im2a";
- break;
- case EbtIImage2DArray:
- mangledName += "iim2a";
- break;
- case EbtUImage2DArray:
- mangledName += "uim2a";
- break;
- case EbtImageCube:
- mangledName += "imc";
- break;
- case EbtIImageCube:
- mangledName += "iimc";
- break;
- case EbtUImageCube:
- mangledName += "uimc";
- break;
- case EbtAtomicCounter:
- mangledName += "ac";
- break;
- case EbtStruct:
- mangledName += mStructure->mangledName();
- break;
- case EbtInterfaceBlock:
- mangledName += mInterfaceBlock->mangledName();
- break;
- default:
- // EbtVoid, EbtAddress and non types
- break;
- }
-
- if (isMatrix())
- {
- mangledName += static_cast<char>('0' + getCols());
- mangledName += static_cast<char>('x');
- mangledName += static_cast<char>('0' + getRows());
- }
- else
- {
- mangledName += static_cast<char>('0' + getNominalSize());
- }
-
- if (mArraySizes)
- {
- for (unsigned int arraySize : *mArraySizes)
- {
- char buf[20];
- snprintf(buf, sizeof(buf), "%d", arraySize);
- mangledName += '[';
- mangledName += buf;
- mangledName += ']';
- }
- }
-
- mangledName += ';';
-
- // Copy string contents into a pool-allocated buffer, so we never need to call delete.
- size_t requiredSize = mangledName.size() + 1;
- char *buffer = reinterpret_cast<char *>(GetGlobalPoolAllocator()->allocate(requiredSize));
- memcpy(buffer, mangledName.c_str(), requiredSize);
- return buffer;
-}
-
-size_t TType::getObjectSize() const
-{
- size_t totalSize;
-
- if (getBasicType() == EbtStruct)
- totalSize = mStructure->objectSize();
- else
- totalSize = primarySize * secondarySize;
-
- if (totalSize == 0)
- return 0;
-
- if (mArraySizes)
- {
- for (size_t arraySize : *mArraySizes)
- {
- if (arraySize > INT_MAX / totalSize)
- totalSize = INT_MAX;
- else
- totalSize *= arraySize;
- }
- }
-
- return totalSize;
-}
-
-int TType::getLocationCount() const
-{
- int count = 1;
-
- if (getBasicType() == EbtStruct)
- {
- count = mStructure->getLocationCount();
- }
-
- if (count == 0)
- {
- return 0;
- }
-
- if (mArraySizes)
- {
- for (unsigned int arraySize : *mArraySizes)
- {
- if (arraySize > static_cast<unsigned int>(std::numeric_limits<int>::max() / count))
- {
- count = std::numeric_limits<int>::max();
- }
- else
- {
- count *= static_cast<int>(arraySize);
- }
- }
- }
-
- return count;
-}
-
-unsigned int TType::getArraySizeProduct() const
-{
- if (!mArraySizes)
- return 1u;
-
- unsigned int product = 1u;
-
- for (unsigned int arraySize : *mArraySizes)
- {
- product *= arraySize;
- }
- return product;
-}
-
-bool TType::isUnsizedArray() const
-{
- if (!mArraySizes)
- return false;
-
- for (unsigned int arraySize : *mArraySizes)
- {
- if (arraySize == 0u)
- {
- return true;
- }
- }
- return false;
-}
-
-bool TType::sameNonArrayType(const TType &right) const
-{
- return (type == right.type && primarySize == right.primarySize &&
- secondarySize == right.secondarySize && mStructure == right.mStructure);
-}
-
-bool TType::isElementTypeOf(const TType &arrayType) const
-{
- if (!sameNonArrayType(arrayType))
- {
- return false;
- }
- if (arrayType.getNumArraySizes() != getNumArraySizes() + 1u)
- {
- return false;
- }
- if (isArray())
- {
- for (size_t i = 0; i < mArraySizes->size(); ++i)
- {
- if ((*mArraySizes)[i] != (*arrayType.mArraySizes)[i])
- {
- return false;
- }
- }
- }
- return true;
-}
-
-void TType::sizeUnsizedArrays(const TVector<unsigned int> *newArraySizes)
-{
- size_t newArraySizesSize = newArraySizes ? newArraySizes->size() : 0;
- for (size_t i = 0u; i < getNumArraySizes(); ++i)
- {
- if ((*mArraySizes)[i] == 0)
- {
- if (i < newArraySizesSize)
- {
- ASSERT(newArraySizes != nullptr);
- (*mArraySizes)[i] = (*newArraySizes)[i];
- }
- else
- {
- (*mArraySizes)[i] = 1u;
- }
- }
- }
- invalidateMangledName();
-}
-
-void TType::sizeOutermostUnsizedArray(unsigned int arraySize)
-{
- ASSERT(isArray());
- ASSERT(mArraySizes->back() == 0u);
- mArraySizes->back() = arraySize;
-}
-
-void TType::setBasicType(TBasicType t)
-{
- if (type != t)
- {
- type = t;
- invalidateMangledName();
- }
-}
-
-void TType::setPrimarySize(unsigned char ps)
-{
- if (primarySize != ps)
- {
- ASSERT(ps <= 4);
- primarySize = ps;
- invalidateMangledName();
- }
-}
-
-void TType::setSecondarySize(unsigned char ss)
-{
- if (secondarySize != ss)
- {
- ASSERT(ss <= 4);
- secondarySize = ss;
- invalidateMangledName();
- }
-}
-
-void TType::makeArray(unsigned int s)
-{
- if (!mArraySizes)
- mArraySizes = new TVector<unsigned int>();
-
- mArraySizes->push_back(s);
- invalidateMangledName();
-}
-
-void TType::makeArrays(const TVector<unsigned int> &sizes)
-{
- if (!mArraySizes)
- mArraySizes = new TVector<unsigned int>();
-
- mArraySizes->insert(mArraySizes->end(), sizes.begin(), sizes.end());
- invalidateMangledName();
-}
-
-void TType::setArraySize(size_t arrayDimension, unsigned int s)
-{
- ASSERT(mArraySizes != nullptr);
- ASSERT(arrayDimension < mArraySizes->size());
- if (mArraySizes->at(arrayDimension) != s)
- {
- (*mArraySizes)[arrayDimension] = s;
- invalidateMangledName();
- }
-}
-
-void TType::toArrayElementType()
-{
- ASSERT(mArraySizes != nullptr);
- if (mArraySizes->size() > 0)
- {
- mArraySizes->pop_back();
- invalidateMangledName();
- }
-}
-
-void TType::setInterfaceBlock(TInterfaceBlock *interfaceBlockIn)
-{
- if (mInterfaceBlock != interfaceBlockIn)
- {
- mInterfaceBlock = interfaceBlockIn;
- invalidateMangledName();
- }
-}
-
-void TType::setStruct(TStructure *s)
-{
- if (mStructure != s)
- {
- mStructure = s;
- invalidateMangledName();
- }
-}
-
-const char *TType::getMangledName() const
-{
- if (mMangledName == nullptr)
- {
- mMangledName = buildMangledName();
- }
-
- return mMangledName;
-}
-
-void TType::realize()
-{
- getMangledName();
-}
-
-void TType::invalidateMangledName()
-{
- mMangledName = nullptr;
-}
-
-// TStructure implementation.
-TStructure::TStructure(TSymbolTable *symbolTable, const TString *name, TFieldList *fields)
- : TFieldListCollection(name, fields),
- mDeepestNesting(0),
- mUniqueId(symbolTable->nextUniqueId()),
- mAtGlobalScope(false)
-{
-}
-
-bool TStructure::equals(const TStructure &other) const
-{
- return (uniqueId() == other.uniqueId());
-}
-
-bool TStructure::containsArrays() const
-{
- for (size_t i = 0; i < mFields->size(); ++i)
- {
- const TType *fieldType = (*mFields)[i]->type();
- if (fieldType->isArray() || fieldType->isStructureContainingArrays())
- return true;
- }
- return false;
-}
-
-bool TStructure::containsType(TBasicType type) const
-{
- for (size_t i = 0; i < mFields->size(); ++i)
- {
- const TType *fieldType = (*mFields)[i]->type();
- if (fieldType->getBasicType() == type || fieldType->isStructureContainingType(type))
- return true;
- }
- return false;
-}
-
-bool TStructure::containsSamplers() const
-{
- for (size_t i = 0; i < mFields->size(); ++i)
- {
- const TType *fieldType = (*mFields)[i]->type();
- if (IsSampler(fieldType->getBasicType()) || fieldType->isStructureContainingSamplers())
- return true;
- }
- return false;
-}
-
-void TType::createSamplerSymbols(const TString &namePrefix,
- const TString &apiNamePrefix,
- TVector<TIntermSymbol *> *outputSymbols,
- TMap<TIntermSymbol *, TString> *outputSymbolsToAPINames,
- TSymbolTable *symbolTable) const
-{
- if (isStructureContainingSamplers())
- {
- if (isArray())
- {
- TType elementType(*this);
- elementType.toArrayElementType();
- for (unsigned int arrayIndex = 0u; arrayIndex < getOutermostArraySize(); ++arrayIndex)
- {
- TStringStream elementName;
- elementName << namePrefix << "_" << arrayIndex;
- TStringStream elementApiName;
- elementApiName << apiNamePrefix << "[" << arrayIndex << "]";
- elementType.createSamplerSymbols(elementName.str(), elementApiName.str(),
- outputSymbols, outputSymbolsToAPINames,
- symbolTable);
- }
- }
- else
- {
- mStructure->createSamplerSymbols(namePrefix, apiNamePrefix, outputSymbols,
- outputSymbolsToAPINames, symbolTable);
- }
- return;
- }
-
- ASSERT(IsSampler(type));
- TIntermSymbol *symbol = new TIntermSymbol(symbolTable->nextUniqueId(), namePrefix, *this);
- outputSymbols->push_back(symbol);
- if (outputSymbolsToAPINames)
- {
- (*outputSymbolsToAPINames)[symbol] = apiNamePrefix;
- }
-}
-
-void TStructure::createSamplerSymbols(const TString &namePrefix,
- const TString &apiNamePrefix,
- TVector<TIntermSymbol *> *outputSymbols,
- TMap<TIntermSymbol *, TString> *outputSymbolsToAPINames,
- TSymbolTable *symbolTable) const
-{
- ASSERT(containsSamplers());
- for (auto &field : *mFields)
- {
- const TType *fieldType = field->type();
- if (IsSampler(fieldType->getBasicType()) || fieldType->isStructureContainingSamplers())
- {
- TString fieldName = namePrefix + "_" + field->name();
- TString fieldApiName = apiNamePrefix + "." + field->name();
- fieldType->createSamplerSymbols(fieldName, fieldApiName, outputSymbols,
- outputSymbolsToAPINames, symbolTable);
- }
- }
-}
-
-TString TFieldListCollection::buildMangledName(const TString &mangledNamePrefix) const
-{
- TString mangledName(mangledNamePrefix);
- mangledName += *mName;
- for (size_t i = 0; i < mFields->size(); ++i)
- {
- mangledName += '-';
- mangledName += (*mFields)[i]->type()->getMangledName();
- }
- return mangledName;
-}
-
-size_t TFieldListCollection::calculateObjectSize() const
-{
- size_t size = 0;
- for (const TField *field : *mFields)
- {
- size_t fieldSize = field->type()->getObjectSize();
- if (fieldSize > INT_MAX - size)
- size = INT_MAX;
- else
- size += fieldSize;
- }
- return size;
-}
-
-int TFieldListCollection::getLocationCount() const
-{
- int count = 0;
- for (const TField *field : *mFields)
- {
- int fieldCount = field->type()->getLocationCount();
- if (fieldCount > std::numeric_limits<int>::max() - count)
- {
- count = std::numeric_limits<int>::max();
- }
- else
- {
- count += fieldCount;
- }
- }
- return count;
-}
-
-int TStructure::calculateDeepestNesting() const
-{
- int maxNesting = 0;
- for (size_t i = 0; i < mFields->size(); ++i)
- maxNesting = std::max(maxNesting, (*mFields)[i]->type()->getDeepestStructNesting());
- return 1 + maxNesting;
-}
-
-// TPublicType implementation.
-void TPublicType::initialize(const TTypeSpecifierNonArray &typeSpecifier, TQualifier q)
-{
- typeSpecifierNonArray = typeSpecifier;
- layoutQualifier = TLayoutQualifier::Create();
- memoryQualifier = TMemoryQualifier::Create();
- qualifier = q;
- invariant = false;
- precision = EbpUndefined;
- arraySizes = nullptr;
-}
-
-void TPublicType::initializeBasicType(TBasicType basicType)
-{
- typeSpecifierNonArray.type = basicType;
- typeSpecifierNonArray.primarySize = 1;
- typeSpecifierNonArray.secondarySize = 1;
- layoutQualifier = TLayoutQualifier::Create();
- memoryQualifier = TMemoryQualifier::Create();
- qualifier = EvqTemporary;
- invariant = false;
- precision = EbpUndefined;
- arraySizes = nullptr;
-}
-
-bool TPublicType::isStructureContainingArrays() const
-{
- if (!typeSpecifierNonArray.userDef)
- {
- return false;
- }
-
- return typeSpecifierNonArray.userDef->containsArrays();
-}
-
-bool TPublicType::isStructureContainingType(TBasicType t) const
-{
- if (!typeSpecifierNonArray.userDef)
- {
- return false;
- }
-
- return typeSpecifierNonArray.userDef->containsType(t);
-}
-
-void TPublicType::setArraySizes(TVector<unsigned int> *sizes)
-{
- arraySizes = sizes;
-}
-
-bool TPublicType::isArray() const
-{
- return arraySizes && !arraySizes->empty();
-}
-
-void TPublicType::clearArrayness()
-{
- arraySizes = nullptr;
-}
-
-bool TPublicType::isAggregate() const
-{
- return isArray() || typeSpecifierNonArray.isMatrix() || typeSpecifierNonArray.isVector();
-}
-
-} // namespace sh