Commit 065aa863 by Olli Etuaho Committed by Commit Bot

Generate code for unmangled name lookup

Instead of using an std::map at each symbol table level, use the gen_builtin_symbols.py script to build a function to query unmangled names. BUG=angleproject:2267 TEST=angle_unittests Change-Id: I4f1cf1df1f50fe9d909f3249150ee002ee6efb61 Reviewed-on: https://chromium-review.googlesource.com/931885 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 8f184ae9
......@@ -153,6 +153,7 @@ generators = {
],
'outputs': [
'src/compiler/translator/SymbolTable_autogen.cpp',
'tests/compiler_tests/ImmutableString_test_autogen.cpp',
],
'script': 'src/compiler/translator/gen_builtin_symbols.py',
},
......
......@@ -63,23 +63,15 @@ class TSymbolTable::TSymbolTableBuiltInLevel
public:
TSymbolTableBuiltInLevel() = default;
bool insert(const TSymbol *symbol);
void insert(const TSymbol *symbol);
const TSymbol *find(const ImmutableString &name) const;
void insertUnmangledBuiltIn(const ImmutableString &name, TExtension ext);
const UnmangledBuiltIn *getUnmangledBuiltIn(const ImmutableString &name) const;
private:
using tLevel = TUnorderedMap<ImmutableString,
const TSymbol *,
ImmutableString::FowlerNollVoHash<sizeof(size_t)>>;
using tLevelPair = const tLevel::value_type;
using tInsertResult = std::pair<tLevel::iterator, bool>;
tLevel mLevel;
std::map<ImmutableString, UnmangledBuiltIn> mUnmangledBuiltIns;
};
bool TSymbolTable::TSymbolTableLevel::insert(TSymbol *symbol)
......@@ -103,11 +95,9 @@ TSymbol *TSymbolTable::TSymbolTableLevel::find(const ImmutableString &name) cons
return (*it).second;
}
bool TSymbolTable::TSymbolTableBuiltInLevel::insert(const TSymbol *symbol)
void TSymbolTable::TSymbolTableBuiltInLevel::insert(const TSymbol *symbol)
{
// returning true means symbol was added to the table
tInsertResult result = mLevel.insert(tLevelPair(symbol->getMangledName(), symbol));
return result.second;
mLevel.insert(tLevelPair(symbol->getMangledName(), symbol));
}
const TSymbol *TSymbolTable::TSymbolTableBuiltInLevel::find(const ImmutableString &name) const
......@@ -119,27 +109,8 @@ const TSymbol *TSymbolTable::TSymbolTableBuiltInLevel::find(const ImmutableStrin
return (*it).second;
}
void TSymbolTable::TSymbolTableBuiltInLevel::insertUnmangledBuiltIn(const ImmutableString &name,
TExtension ext)
{
if (ext == TExtension::UNDEFINED || mUnmangledBuiltIns.find(name) == mUnmangledBuiltIns.end())
{
mUnmangledBuiltIns[name] = UnmangledBuiltIn(ext);
}
}
const UnmangledBuiltIn *TSymbolTable::TSymbolTableBuiltInLevel::getUnmangledBuiltIn(
const ImmutableString &name) const
{
auto it = mUnmangledBuiltIns.find(ImmutableString(name));
if (it == mUnmangledBuiltIns.end())
{
return nullptr;
}
return &(it->second);
}
TSymbolTable::TSymbolTable() : mUniqueIdCounter(0), mUserDefinedUniqueIdsStart(-1)
TSymbolTable::TSymbolTable()
: mUniqueIdCounter(0), mUserDefinedUniqueIdsStart(-1), mShaderType(GL_FRAGMENT_SHADER)
{
}
......@@ -401,49 +372,6 @@ void TSymbolTable::setGlobalInvariant(bool invariant)
mTable.back()->setGlobalInvariant(invariant);
}
void TSymbolTable::insertUnmangledBuiltIn(const ImmutableString &name,
TExtension ext,
ESymbolLevel level)
{
ASSERT(level >= 0 && level <= LAST_BUILTIN_LEVEL);
ASSERT(mUserDefinedUniqueIdsStart == -1);
mBuiltInTable[level]->insertUnmangledBuiltIn(name, ext);
}
bool TSymbolTable::hasUnmangledBuiltInAtLevel(const char *name, ESymbolLevel level)
{
ASSERT(level >= 0 && level <= LAST_BUILTIN_LEVEL);
return mBuiltInTable[level]->getUnmangledBuiltIn(ImmutableString(name)) != nullptr;
}
const UnmangledBuiltIn *TSymbolTable::getUnmangledBuiltInForShaderVersion(
const ImmutableString &name,
int shaderVersion)
{
for (int level = LAST_BUILTIN_LEVEL; level >= 0; --level)
{
if (level == ESSL3_1_BUILTINS && shaderVersion != 310)
{
--level;
}
if (level == ESSL3_BUILTINS && shaderVersion < 300)
{
--level;
}
if (level == ESSL1_BUILTINS && shaderVersion != 100)
{
--level;
}
const UnmangledBuiltIn *builtIn = mBuiltInTable[level]->getUnmangledBuiltIn(name);
if (builtIn != nullptr)
{
return builtIn;
}
}
return nullptr;
}
void TSymbolTable::markBuiltInInitializationFinished()
{
mUserDefinedUniqueIdsStart = mUniqueIdCounter;
......@@ -467,6 +395,8 @@ void TSymbolTable::initializeBuiltIns(sh::GLenum type,
ShShaderSpec spec,
const ShBuiltInResources &resources)
{
mShaderType = type;
ASSERT(isEmpty());
pushBuiltInLevel(); // COMMON_BUILTINS
pushBuiltInLevel(); // ESSL1_BUILTINS
......@@ -506,7 +436,6 @@ void TSymbolTable::initializeBuiltIns(sh::GLenum type,
setDefaultPrecision(EbtAtomicCounter, EbpHigh);
insertBuiltInFunctions(type);
insertBuiltInFunctionUnmangledNames(type);
mUniqueIdCounter = kLastStaticBuiltInId + 1;
initializeBuiltInVariables(type, spec, resources);
......
......@@ -56,8 +56,6 @@ const int LAST_BUILTIN_LEVEL = GLSL_BUILTINS;
struct UnmangledBuiltIn
{
constexpr UnmangledBuiltIn() : extension(TExtension::UNDEFINED) {}
constexpr UnmangledBuiltIn(TExtension extension) : extension(extension) {}
TExtension extension;
......@@ -172,12 +170,6 @@ class TSymbolTable : angle::NonCopyable
TFunction *findUserDefinedFunction(const ImmutableString &name) const;
// Used to insert unmangled functions to check redeclaration of built-ins in ESSL 3.00 and
// above.
void insertUnmangledBuiltIn(const ImmutableString &name, TExtension ext, ESymbolLevel level);
bool hasUnmangledBuiltInAtLevel(const char *name, ESymbolLevel level);
void initSamplerDefaultPrecision(TBasicType samplerType);
void initializeBuiltInVariables(sh::GLenum type,
......@@ -186,7 +178,6 @@ class TSymbolTable : angle::NonCopyable
void markBuiltInInitializationFinished();
void insertBuiltInFunctions(sh::GLenum shaderType);
void insertBuiltInFunctionUnmangledNames(sh::GLenum shaderType);
std::vector<std::unique_ptr<TSymbolTableBuiltInLevel>> mBuiltInTable;
std::vector<std::unique_ptr<TSymbolTableLevel>> mTable;
......@@ -204,6 +195,8 @@ class TSymbolTable : angle::NonCopyable
// TODO(oetuaho): Make this a compile-time constant once the symbol table is initialized at
// compile time. http://anglebug.com/1432
int mUserDefinedUniqueIdsStart;
sh::GLenum mShaderType;
};
} // namespace sh
......
......@@ -3531,6 +3531,18 @@ constexpr const TConstParameter p_usM_[1] = {
} // namespace BuiltInParameters
namespace UnmangledBuiltIns
{
constexpr const UnmangledBuiltIn ARB_texture_rectangle(TExtension::ARB_texture_rectangle);
constexpr const UnmangledBuiltIn EXT_YUV_target(TExtension::EXT_YUV_target);
constexpr const UnmangledBuiltIn EXT_geometry_shader(TExtension::EXT_geometry_shader);
constexpr const UnmangledBuiltIn EXT_shader_texture_lod(TExtension::EXT_shader_texture_lod);
constexpr const UnmangledBuiltIn OES_standard_derivatives(TExtension::OES_standard_derivatives);
constexpr const UnmangledBuiltIn UNDEFINED(TExtension::UNDEFINED);
} // namespace UnmangledBuiltIns
// TODO(oetuaho): Would be nice to make this a class instead of a namespace so that we could friend
// this from TFunction. Now symbol constructors taking an id have to be public even though they're
// not supposed to be accessible from outside of here. http://anglebug.com/2390
......@@ -12926,215 +12938,1367 @@ void TSymbolTable::insertBuiltInFunctions(sh::GLenum shaderType)
}
}
void TSymbolTable::insertBuiltInFunctionUnmangledNames(sh::GLenum shaderType)
const UnmangledBuiltIn *TSymbolTable::getUnmangledBuiltInForShaderVersion(
const ImmutableString &name,
int shaderVersion)
{
insertUnmangledBuiltIn(BuiltInName::radians, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::degrees, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::sin, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::cos, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::tan, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::asin, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::acos, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atan, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::sinh, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::cosh, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::tanh, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::asinh, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::acosh, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atanh, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::pow, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::exp, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::log, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::exp2, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::log2, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::sqrt, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::inversesqrt, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::abs, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::abs, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::sign, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::sign, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::floor, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::trunc, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::round, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::roundEven, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::ceil, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::fract, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::mod, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::min, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::min, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::max, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::max, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::clamp, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::clamp, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::mix, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::mix, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::step, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::smoothstep, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::modf, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::isnan, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::isinf, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::floatBitsToInt, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::floatBitsToUint, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::intBitsToFloat, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::uintBitsToFloat, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::frexp, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::ldexp, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::packSnorm2x16, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::packUnorm2x16, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::packHalf2x16, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::unpackSnorm2x16, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::unpackUnorm2x16, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::unpackHalf2x16, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::packUnorm4x8, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::packSnorm4x8, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::unpackUnorm4x8, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::unpackSnorm4x8, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::length, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::distance, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::dot, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::cross, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::normalize, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::faceforward, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::reflect, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::refract, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::matrixCompMult, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::matrixCompMult, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::outerProduct, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::transpose, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::determinant, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::inverse, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::lessThan, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::lessThan, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::lessThanEqual, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::lessThanEqual, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::greaterThan, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::greaterThan, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::greaterThanEqual, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::greaterThanEqual, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::equal, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::equal, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::notEqual, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::notEqual, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::any, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::all, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::notFunc, TExtension::UNDEFINED, COMMON_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::bitfieldExtract, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::bitfieldInsert, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::bitfieldReverse, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::bitCount, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::findLSB, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::findMSB, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::uaddCarry, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::usubBorrow, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::umulExtended, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::imulExtended, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2D, TExtension::UNDEFINED, ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DProj, TExtension::UNDEFINED, ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureCube, TExtension::UNDEFINED, ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DRect, TExtension::ARB_texture_rectangle,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DRectProj, TExtension::ARB_texture_rectangle,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DGradEXT, TExtension::EXT_shader_texture_lod,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DProjGradEXT, TExtension::EXT_shader_texture_lod,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureCubeGradEXT, TExtension::EXT_shader_texture_lod,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProj, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureLod, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureSize, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProjLod, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texelFetch, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureGrad, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProjGrad, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureOffset, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProjOffset, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureLodOffset, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProjLodOffset, TExtension::UNDEFINED,
ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texelFetchOffset, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureGradOffset, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProjGradOffset, TExtension::UNDEFINED,
ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::rgb_2_yuv, TExtension::EXT_YUV_target, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::yuv_2_rgb, TExtension::EXT_YUV_target, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texelFetch, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureGather, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureGatherOffset, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicCounter, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicCounterIncrement, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicCounterDecrement, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicAdd, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicMin, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicMax, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicAnd, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicOr, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicXor, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicExchange, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::atomicCompSwap, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::imageSize, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::imageLoad, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::imageStore, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::memoryBarrier, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::memoryBarrierAtomicCounter, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::memoryBarrierBuffer, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::memoryBarrierImage, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
if (shaderType == GL_FRAGMENT_SHADER)
uint32_t nameHash = name.hash32();
if (shaderVersion >= 310)
{
insertUnmangledBuiltIn(BuiltInName::texture2D, TExtension::UNDEFINED, ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DProj, TExtension::UNDEFINED, ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureCube, TExtension::UNDEFINED, ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::dFdxExt, TExtension::OES_standard_derivatives,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::dFdyExt, TExtension::OES_standard_derivatives,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::fwidthExt, TExtension::OES_standard_derivatives,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DLodEXT, TExtension::EXT_shader_texture_lod,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DProjLodEXT, TExtension::EXT_shader_texture_lod,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureCubeLodEXT, TExtension::EXT_shader_texture_lod,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureOffset, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProjOffset, TExtension::UNDEFINED,
ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureProj, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::dFdx, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::dFdy, TExtension::UNDEFINED, ESSL3_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::fwidth, TExtension::UNDEFINED, ESSL3_BUILTINS);
switch (nameHash)
{
case 0x26813a3u:
{
if (name == BuiltInName::atomicAdd)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x1150d92eu:
{
if (name == BuiltInName::atomicMax)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x23647d3cu:
{
if (name == BuiltInName::atomicMin)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2568837fu:
{
if (name == BuiltInName::bitCount)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x310cbdf3u:
{
if (name == BuiltInName::findLSB)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x33b8cbf8u:
{
if (name == BuiltInName::unpackUnorm4x8)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x3815d075u:
{
if (name == BuiltInName::memoryBarrier)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x44a612d1u:
{
if (name == BuiltInName::texelFetch)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x493c8c52u:
{
if (name == BuiltInName::imageLoad)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x4d4a19b5u:
{
if (name == BuiltInName::packSnorm4x8)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x4dafa4aau:
{
if (name == BuiltInName::memoryBarrierImage)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x4f0e8e9bu:
{
if (name == BuiltInName::imageStore)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x55fde64fu:
{
if (name == BuiltInName::imulExtended)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x666490f9u:
{
if (name == BuiltInName::atomicCounterIncrement)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x6ef2b1c3u:
{
if (name == BuiltInName::imageSize)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x6fdf21cbu:
{
if (name == BuiltInName::memoryBarrierBuffer)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x7ba9e270u:
{
if (name == BuiltInName::findMSB)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x7c07f1eeu:
{
if (name == BuiltInName::unpackSnorm4x8)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x8c63f160u:
{
if (name == BuiltInName::ldexp)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xa30cdef4u:
{
if (name == BuiltInName::frexp)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xa3a03233u:
{
if (name == BuiltInName::textureGather)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xae0f4e53u:
{
if (name == BuiltInName::packUnorm4x8)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb24338c0u:
{
if (name == BuiltInName::textureGatherOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb5e7ff54u:
{
if (name == BuiltInName::memoryBarrierAtomicCounter)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb82cbfe3u:
{
if (name == BuiltInName::usubBorrow)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb94d85ddu:
{
if (name == BuiltInName::atomicExchange)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xbfd854b5u:
{
if (name == BuiltInName::atomicXor)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc1e02fa4u:
{
if (name == BuiltInName::atomicCounter)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xca0f40eeu:
{
if (name == BuiltInName::uaddCarry)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd2b1c53du:
{
if (name == BuiltInName::atomicOr)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd651bc5du:
{
if (name == BuiltInName::atomicCounterDecrement)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xe5c5029au:
{
if (name == BuiltInName::bitfieldReverse)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xe676f219u:
{
if (name == BuiltInName::atomicAnd)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xebfef903u:
{
if (name == BuiltInName::umulExtended)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xf3bd9210u:
{
if (name == BuiltInName::atomicCompSwap)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xf50788fdu:
{
if (name == BuiltInName::bitfieldExtract)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xf81301b9u:
{
if (name == BuiltInName::bitfieldInsert)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
}
if (mShaderType == GL_COMPUTE_SHADER)
{
switch (nameHash)
{
case 0x3d693fa0u:
{
if (name == BuiltInName::barrier)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x7afaf16eu:
{
if (name == BuiltInName::groupMemoryBarrier)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xe85fa9e4u:
{
if (name == BuiltInName::memoryBarrierShared)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
}
}
if (mShaderType == GL_GEOMETRY_SHADER_EXT)
{
switch (nameHash)
{
case 0xb413b257u:
{
if (name == BuiltInName::EndPrimitive)
{
return &UnmangledBuiltIns::EXT_geometry_shader;
}
break;
}
case 0xb5d34358u:
{
if (name == BuiltInName::EmitVertex)
{
return &UnmangledBuiltIns::EXT_geometry_shader;
}
break;
}
}
}
}
if (shaderType == GL_VERTEX_SHADER)
if (shaderVersion >= 300)
{
insertUnmangledBuiltIn(BuiltInName::texture2DLod, TExtension::UNDEFINED, ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::texture2DProjLod, TExtension::UNDEFINED,
ESSL1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::textureCubeLod, TExtension::UNDEFINED, ESSL1_BUILTINS);
switch (nameHash)
{
case 0x23feff3u:
{
if (name == BuiltInName::textureLod)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x4644cdeu:
{
if (name == BuiltInName::greaterThan)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x491f109u:
{
if (name == BuiltInName::lessThanEqual)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x5fc75c3u:
{
if (name == BuiltInName::lessThan)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x7275075u:
{
if (name == BuiltInName::atanh)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x92855d0u:
{
if (name == BuiltInName::tanh)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xcbc8ba4u:
{
if (name == BuiltInName::sign)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x10d2583fu:
{
if (name == BuiltInName::sinh)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x12b2640eu:
{
if (name == BuiltInName::texelFetchOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x1535b7a5u:
{
if (name == BuiltInName::textureProjLodOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2485bbbeu:
{
if (name == BuiltInName::notEqual)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x25680679u:
{
if (name == BuiltInName::unpackUnorm2x16)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x26ac11d8u:
{
if (name == BuiltInName::isinf)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x28cedbc3u:
{
if (name == BuiltInName::unpackHalf2x16)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2a48023bu:
{
if (name == BuiltInName::abs)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2f7508efu:
{
if (name == BuiltInName::equal)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x33a56e6cu:
{
if (name == BuiltInName::textureGrad)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x39d34980u:
{
if (name == BuiltInName::textureLodOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x3c6468f4u:
{
if (name == BuiltInName::texture)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x4326f80au:
{
if (name == BuiltInName::packSnorm2x16)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x44a612d1u:
{
if (name == BuiltInName::texelFetch)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x4f0be23bu:
{
if (name == BuiltInName::round)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x5bd36438u:
{
if (name == BuiltInName::packHalf2x16)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x6b0ca057u:
{
if (name == BuiltInName::textureGradOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x6e02ba1bu:
{
if (name == BuiltInName::unpackSnorm2x16)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x6ff78d04u:
{
if (name == BuiltInName::packUnorm2x16)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x767e36c0u:
{
if (name == BuiltInName::determinant)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x7bf8de3bu:
{
if (name == BuiltInName::textureProjGrad)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x88c917cfu:
{
if (name == BuiltInName::textureOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x8b45ed38u:
{
if (name == BuiltInName::textureProjGradOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x8f8617abu:
{
if (name == BuiltInName::outerProduct)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x94b08f7fu:
{
if (name == BuiltInName::textureProj)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xa4639127u:
{
if (name == BuiltInName::roundEven)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xa5212424u:
{
if (name == BuiltInName::textureProjOffset)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xa6789406u:
{
if (name == BuiltInName::rgb_2_yuv)
{
return &UnmangledBuiltIns::EXT_YUV_target;
}
break;
}
case 0xa82efcbcu:
{
if (name == BuiltInName::clamp)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb15a3cc9u:
{
if (name == BuiltInName::floatBitsToInt)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb1b3c06au:
{
if (name == BuiltInName::isnan)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb201f283u:
{
if (name == BuiltInName::inverse)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb755b482u:
{
if (name == BuiltInName::textureProjLod)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xbab19e4au:
{
if (name == BuiltInName::asinh)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc03183c0u:
{
if (name == BuiltInName::transpose)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc29ffa7eu:
{
if (name == BuiltInName::uintBitsToFloat)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc73e788du:
{
if (name == BuiltInName::textureSize)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc7818fa2u:
{
if (name == BuiltInName::yuv_2_rgb)
{
return &UnmangledBuiltIns::EXT_YUV_target;
}
break;
}
case 0xc8575388u:
{
if (name == BuiltInName::floatBitsToUint)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc98f4557u:
{
if (name == BuiltInName::min)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd55e61e5u:
{
if (name == BuiltInName::trunc)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd5f05125u:
{
if (name == BuiltInName::matrixCompMult)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd78f5b61u:
{
if (name == BuiltInName::mix)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd7a2e319u:
{
if (name == BuiltInName::max)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xeb6ede7fu:
{
if (name == BuiltInName::modf)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xed7dc722u:
{
if (name == BuiltInName::greaterThanEqual)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xedf2c855u:
{
if (name == BuiltInName::acosh)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xf45c461cu:
{
if (name == BuiltInName::cosh)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xfc501e17u:
{
if (name == BuiltInName::intBitsToFloat)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
}
if (mShaderType == GL_FRAGMENT_SHADER)
{
switch (nameHash)
{
case 0x4b6e55d3u:
{
if (name == BuiltInName::fwidth)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc78598f8u:
{
if (name == BuiltInName::dFdy)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc8859a8bu:
{
if (name == BuiltInName::dFdx)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
}
}
}
if (shaderType == GL_COMPUTE_SHADER)
if (shaderVersion == 100)
{
insertUnmangledBuiltIn(BuiltInName::barrier, TExtension::UNDEFINED, ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::memoryBarrierShared, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::groupMemoryBarrier, TExtension::UNDEFINED,
ESSL3_1_BUILTINS);
switch (nameHash)
{
case 0x18a9c042u:
{
if (name == BuiltInName::texture2D)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x1d18f29cu:
{
if (name == BuiltInName::textureCubeGradEXT)
{
return &UnmangledBuiltIns::EXT_shader_texture_lod;
}
break;
}
case 0x3d4abf10u:
{
if (name == BuiltInName::texture2DRect)
{
return &UnmangledBuiltIns::ARB_texture_rectangle;
}
break;
}
case 0x4040698cu:
{
if (name == BuiltInName::texture2DProjGradEXT)
{
return &UnmangledBuiltIns::EXT_shader_texture_lod;
}
break;
}
case 0x6dc0e8e3u:
{
if (name == BuiltInName::texture2DRectProj)
{
return &UnmangledBuiltIns::ARB_texture_rectangle;
}
break;
}
case 0xc7cb8969u:
{
if (name == BuiltInName::texture2DProj)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd1836639u:
{
if (name == BuiltInName::texture2DGradEXT)
{
return &UnmangledBuiltIns::EXT_shader_texture_lod;
}
break;
}
case 0xfece2a39u:
{
if (name == BuiltInName::textureCube)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
}
if (mShaderType == GL_FRAGMENT_SHADER)
{
switch (nameHash)
{
case 0x4b6e55d3u:
{
if (name == BuiltInName::fwidthExt)
{
return &UnmangledBuiltIns::OES_standard_derivatives;
}
break;
}
case 0x7150ceb8u:
{
if (name == BuiltInName::texture2DLodEXT)
{
return &UnmangledBuiltIns::EXT_shader_texture_lod;
}
break;
}
case 0x7309b987u:
{
if (name == BuiltInName::textureCubeLodEXT)
{
return &UnmangledBuiltIns::EXT_shader_texture_lod;
}
break;
}
case 0xbacaedf7u:
{
if (name == BuiltInName::texture2DProjLodEXT)
{
return &UnmangledBuiltIns::EXT_shader_texture_lod;
}
break;
}
case 0xc78598f8u:
{
if (name == BuiltInName::dFdyExt)
{
return &UnmangledBuiltIns::OES_standard_derivatives;
}
break;
}
case 0xc8859a8bu:
{
if (name == BuiltInName::dFdxExt)
{
return &UnmangledBuiltIns::OES_standard_derivatives;
}
break;
}
}
}
if (mShaderType == GL_VERTEX_SHADER)
{
switch (nameHash)
{
case 0x30ed9cfcu:
{
if (name == BuiltInName::texture2DProjLod)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb35e342cu:
{
if (name == BuiltInName::textureCubeLod)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xfa79f401u:
{
if (name == BuiltInName::texture2DLod)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
}
}
}
if (shaderType == GL_GEOMETRY_SHADER_EXT)
switch (nameHash)
{
insertUnmangledBuiltIn(BuiltInName::EmitVertex, TExtension::EXT_geometry_shader,
ESSL3_1_BUILTINS);
insertUnmangledBuiltIn(BuiltInName::EndPrimitive, TExtension::EXT_geometry_shader,
ESSL3_1_BUILTINS);
case 0x4644cdeu:
{
if (name == BuiltInName::greaterThan)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x491f109u:
{
if (name == BuiltInName::lessThanEqual)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x5fc75c3u:
{
if (name == BuiltInName::lessThan)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x66c705cu:
{
if (name == BuiltInName::refract)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x678cabfu:
{
if (name == BuiltInName::atan)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xcbc8ba4u:
{
if (name == BuiltInName::sign)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x10031ed9u:
{
if (name == BuiltInName::log2)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x13254bc4u:
{
if (name == BuiltInName::all)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2485bbbeu:
{
if (name == BuiltInName::notEqual)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x29b19c8au:
{
if (name == BuiltInName::notFunc)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x29f5189bu:
{
if (name == BuiltInName::cross)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2a48023bu:
{
if (name == BuiltInName::abs)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2c29f04du:
{
if (name == BuiltInName::any)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2eb31462u:
{
if (name == BuiltInName::distance)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x2f7508efu:
{
if (name == BuiltInName::equal)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x3c01df1fu:
{
if (name == BuiltInName::acos)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x3f515151u:
{
if (name == BuiltInName::log)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x58336ad5u:
{
if (name == BuiltInName::pow)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x5fd55fe1u:
{
if (name == BuiltInName::faceforward)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x62e4e208u:
{
if (name == BuiltInName::ceil)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x72a68728u:
{
if (name == BuiltInName::exp)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x7dee3bcfu:
{
if (name == BuiltInName::sqrt)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x83d03615u:
{
if (name == BuiltInName::length)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x856a57e1u:
{
if (name == BuiltInName::radians)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x92c778aau:
{
if (name == BuiltInName::reflect)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x95964e7du:
{
if (name == BuiltInName::smoothstep)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x9626adeeu:
{
if (name == BuiltInName::exp2)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0x9cf73498u:
{
if (name == BuiltInName::tan)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xa82efcbcu:
{
if (name == BuiltInName::clamp)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xaf5442eeu:
{
if (name == BuiltInName::degrees)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xb8e70c1du:
{
if (name == BuiltInName::floor)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc7441a0fu:
{
if (name == BuiltInName::step)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xc98f4557u:
{
if (name == BuiltInName::min)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xce79296cu:
{
if (name == BuiltInName::normalize)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd3689f20u:
{
if (name == BuiltInName::dot)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd5f05125u:
{
if (name == BuiltInName::matrixCompMult)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd78f5b61u:
{
if (name == BuiltInName::mix)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xd7a2e319u:
{
if (name == BuiltInName::max)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xdf9e7283u:
{
if (name == BuiltInName::mod)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xe0302a4du:
{
if (name == BuiltInName::sin)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xe8b548a5u:
{
if (name == BuiltInName::inversesqrt)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xed7dc722u:
{
if (name == BuiltInName::greaterThanEqual)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xeef29a67u:
{
if (name == BuiltInName::fract)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xfb8de29cu:
{
if (name == BuiltInName::cos)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
case 0xfeae7ea6u:
{
if (name == BuiltInName::asin)
{
return &UnmangledBuiltIns::UNDEFINED;
}
break;
}
}
return nullptr;
}
} // namespace sh
......@@ -23,6 +23,30 @@ parser = argparse.ArgumentParser()
parser.add_argument('--dump-intermediate-json', help='Dump parsed function data as a JSON file builtin_functions.json', action="store_true")
args = parser.parse_args()
template_immutablestringtest_cpp = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {function_data_source_name}.
//
// Copyright {copyright_year} 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.
//
// ImmutableString_test_autogen.cpp:
// Tests for matching script-generated hashes with runtime computed hashes.
#include "compiler/translator/ImmutableString.h"
#include "gtest/gtest.h"
namespace sh
{{
TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
{{
{script_generated_hash_tests}
}}
}} // namespace sh
"""
# By having the variables defined in a cpp file we ensure that there's just one instance of each of the declared variables.
template_symboltable_cpp = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {function_data_source_name}.
......@@ -72,6 +96,13 @@ namespace BuiltInParameters
}} // namespace BuiltInParameters
namespace UnmangledBuiltIns
{{
{unmangled_builtin_declarations}
}} // namespace UnmangledBuiltIns
// TODO(oetuaho): Would be nice to make this a class instead of a namespace so that we could friend
// this from TFunction. Now symbol constructors taking an id have to be public even though they're
// not supposed to be accessible from outside of here. http://anglebug.com/2390
......@@ -87,9 +118,10 @@ void TSymbolTable::insertBuiltInFunctions(sh::GLenum shaderType)
{insert_functions}
}}
void TSymbolTable::insertBuiltInFunctionUnmangledNames(sh::GLenum shaderType)
const UnmangledBuiltIn *TSymbolTable::getUnmangledBuiltInForShaderVersion(const ImmutableString &name, int shaderVersion)
{{
{insert_unmangled_functions}
uint32_t nameHash = name.hash32();
{get_unmangled_builtin}
}}
}} // namespace sh
......@@ -139,6 +171,39 @@ basic_mangled_names = {
'AtomicCounter': 'a'
}
levels = ['ESSL3_1_BUILTINS', 'ESSL3_BUILTINS', 'ESSL1_BUILTINS', 'COMMON_BUILTINS']
class GroupedList:
""""Class for storing a list of objects grouped by symbol table level and condition."""
def __init__(self):
self.objs = OrderedDict()
# We need to add all the levels here instead of lazily since they must be in a specific order.
for l in levels:
self.objs[l] = OrderedDict()
def add_obj(self, level, condition, name, obj):
if (level not in levels):
raise Exception('Unexpected level: ' + str(level))
if condition not in self.objs[level]:
self.objs[level][condition] = OrderedDict()
self.objs[level][condition][name] = obj
def has_key(self, level, condition, name):
if (level not in levels):
raise Exception('Unexpected level: ' + str(level))
if condition not in self.objs[level]:
return False
return (name in self.objs[level][condition])
def get(self, level, condition, name):
if self.has_key(level, condition, name):
return self.objs[level][condition][name]
return None
def iter_conditions(self, level):
return self.objs[level].iteritems()
class TType:
def __init__(self, glsl_header_type):
if isinstance(glsl_header_type, basestring):
......@@ -378,12 +443,27 @@ function_declarations = []
# Code for inserting builtin TFunctions to the symbol table. Grouped by condition.
insert_functions_by_condition = OrderedDict()
# Code for inserting unmangled builtin function names to the symbol table. Grouped by condition.
# Each item in the dictionary is an OrderedDict from function name + level to the insert call.
insert_unmangled_functions_by_condition = OrderedDict()
# Declarations of UnmangledBuiltIn objects
unmangled_builtin_declarations = set()
# Code for querying builtin function unmangled names.
unmangled_function_if_statements = GroupedList()
# Code for testing that script-generated hashes match with runtime computed hashes.
script_generated_hash_tests = OrderedDict()
id_counter = 0
def hash32(str):
fnvOffsetBasis = 0x811c9dc5
fnvPrime = 16777619
hash = fnvOffsetBasis
for c in str:
hash = hash ^ ord(c)
hash = hash * fnvPrime & 0xffffffff
sanity_check = ' ASSERT_EQ(0x{hash}u, ImmutableString("{str}").hash32());'.format(hash = ('%x' % hash), str = str)
script_generated_hash_tests.update({sanity_check: None})
return hash
def get_suffix(props):
if 'suffix' in props:
......@@ -514,10 +594,19 @@ def process_single_function_group(condition, group_name, group):
if not name_declaration in name_declarations:
name_declarations.add(name_declaration)
template_insert_unmangled = ' insertUnmangledBuiltIn(BuiltInName::{name_with_suffix}, TExtension::{extension}, {level});'
insert_unmangled = template_insert_unmangled.format(**template_args)
if (function_name + ',' + level) not in insert_unmangled_functions_by_condition[condition] or extension == 'UNDEFINED':
insert_unmangled_functions_by_condition[condition][function_name + ',' + level] = insert_unmangled
template_unmangled_if = """if (name == BuiltInName::{name_with_suffix})
{{
return &UnmangledBuiltIns::{extension};
}}"""
unmangled_if = template_unmangled_if.format(**template_args)
unmangled_builtin_no_condition = unmangled_function_if_statements.get(level, 'NO_CONDITION', function_name)
if unmangled_builtin_no_condition != None and unmangled_builtin_no_condition['extension'] == 'UNDEFINED':
# We already have this unmangled name without a condition nor extension on the same level. No need to add a duplicate with a condition.
pass
elif (not unmangled_function_if_statements.has_key(level, condition, function_name)) or extension == 'UNDEFINED':
# We don't have this unmangled builtin recorded yet or we might replace an unmangled builtin from an extension with one from core.
unmangled_function_if_statements.add_obj(level, condition, function_name, {'code': unmangled_if, 'extension': extension})
unmangled_builtin_declarations.add('constexpr const UnmangledBuiltIn {extension}(TExtension::{extension});'.format(**template_args))
for function_props in function_variants:
template_args['id'] = id_counter
......@@ -567,7 +656,7 @@ def process_function_group(group_name, group):
condition = group['condition']
if condition not in insert_functions_by_condition:
insert_functions_by_condition[condition] = []
insert_unmangled_functions_by_condition[condition] = OrderedDict()
process_single_function_group(condition, group_name, group)
if 'subgroups' in group:
......@@ -591,25 +680,70 @@ output_strings = {
}
insert_functions = []
insert_unmangled_functions = []
get_unmangled_builtin = []
def get_shader_version_condition_for_level(level):
if level == 'ESSL3_1_BUILTINS':
return 'shaderVersion >= 310'
elif level == 'ESSL3_BUILTINS':
return 'shaderVersion >= 300'
elif level == 'ESSL1_BUILTINS':
return 'shaderVersion == 100'
elif level == 'COMMON_BUILTINS':
return ''
else:
raise Exception('Unsupported symbol table level')
for condition in insert_functions_by_condition:
if condition != 'NO_CONDITION':
condition_header = ' if ({condition})\n {{'.format(condition = condition)
insert_functions.append(condition_header)
insert_unmangled_functions.append(condition_header)
for insert_function in insert_functions_by_condition[condition]:
insert_functions.append(insert_function)
for function_name, insert_function in insert_unmangled_functions_by_condition[condition].iteritems():
insert_unmangled_functions.append(insert_function)
if condition != 'NO_CONDITION':
insert_functions.append('}')
insert_unmangled_functions.append('}')
for level in levels:
level_condition = get_shader_version_condition_for_level(level)
if level_condition != '':
get_unmangled_builtin.append('if ({condition})\n {{'.format(condition = level_condition))
for condition, functions in unmangled_function_if_statements.iter_conditions(level):
if len(functions) > 0:
if condition != 'NO_CONDITION':
condition_header = ' if ({condition})\n {{'.format(condition = condition)
get_unmangled_builtin.append(condition_header.replace('shaderType', 'mShaderType'))
get_unmangled_builtin_switch = {}
for function_name, get_unmangled_case in functions.iteritems():
name_hash = hash32(function_name)
if name_hash not in get_unmangled_builtin_switch:
get_unmangled_builtin_switch[name_hash] = []
get_unmangled_builtin_switch[name_hash].append(get_unmangled_case['code'])
get_unmangled_builtin.append('switch(nameHash) {')
for name_hash, get_unmangled_cases in sorted(get_unmangled_builtin_switch.iteritems()):
get_unmangled_builtin.append('case 0x' + ('%x' % name_hash) + 'u:\n{')
get_unmangled_builtin += get_unmangled_cases
get_unmangled_builtin.append('break;\n}')
get_unmangled_builtin.append('}')
if condition != 'NO_CONDITION':
get_unmangled_builtin.append('}')
if level_condition != '':
get_unmangled_builtin.append('}')
get_unmangled_builtin.append('return nullptr;')
output_strings['insert_functions'] = '\n'.join(insert_functions)
output_strings['insert_unmangled_functions'] = '\n'.join(insert_unmangled_functions)
output_strings['unmangled_builtin_declarations'] = '\n'.join(sorted(unmangled_builtin_declarations))
output_strings['get_unmangled_builtin'] = '\n'.join(get_unmangled_builtin)
output_strings['script_generated_hash_tests'] = '\n'.join(script_generated_hash_tests.iterkeys())
with open('../../tests/compiler_tests/ImmutableString_test_autogen.cpp', 'wt') as outfile_cpp:
output_cpp = template_immutablestringtest_cpp.format(**output_strings)
outfile_cpp.write(output_cpp)
with open('SymbolTable_autogen.cpp', 'wt') as outfile_cpp:
output_cpp = template_symboltable_cpp.format(**output_strings)
......
......@@ -72,6 +72,7 @@
'<(angle_path)/src/tests/compiler_tests/GLSLCompatibilityOutput_test.cpp',
'<(angle_path)/src/tests/compiler_tests/GlFragDataNotModified_test.cpp',
'<(angle_path)/src/tests/compiler_tests/GeometryShader_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ImmutableString_test_autogen.cpp',
'<(angle_path)/src/tests/compiler_tests/InitOutputVariables_test.cpp',
'<(angle_path)/src/tests/compiler_tests/IntermNode_test.cpp',
'<(angle_path)/src/tests/compiler_tests/NV_draw_buffers_test.cpp',
......
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_builtin_symbols.py using data from builtin_function_declarations.txt.
//
// Copyright 2018 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.
//
// ImmutableString_test_autogen.cpp:
// Tests for matching script-generated hashes with runtime computed hashes.
#include "compiler/translator/ImmutableString.h"
#include "gtest/gtest.h"
namespace sh
{
TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
{
ASSERT_EQ(0xa30cdef4u, ImmutableString("frexp").hash32());
ASSERT_EQ(0x8c63f160u, ImmutableString("ldexp").hash32());
ASSERT_EQ(0xae0f4e53u, ImmutableString("packUnorm4x8").hash32());
ASSERT_EQ(0x4d4a19b5u, ImmutableString("packSnorm4x8").hash32());
ASSERT_EQ(0x33b8cbf8u, ImmutableString("unpackUnorm4x8").hash32());
ASSERT_EQ(0x7c07f1eeu, ImmutableString("unpackSnorm4x8").hash32());
ASSERT_EQ(0xf50788fdu, ImmutableString("bitfieldExtract").hash32());
ASSERT_EQ(0xf81301b9u, ImmutableString("bitfieldInsert").hash32());
ASSERT_EQ(0xe5c5029au, ImmutableString("bitfieldReverse").hash32());
ASSERT_EQ(0x2568837fu, ImmutableString("bitCount").hash32());
ASSERT_EQ(0x310cbdf3u, ImmutableString("findLSB").hash32());
ASSERT_EQ(0x7ba9e270u, ImmutableString("findMSB").hash32());
ASSERT_EQ(0xca0f40eeu, ImmutableString("uaddCarry").hash32());
ASSERT_EQ(0xb82cbfe3u, ImmutableString("usubBorrow").hash32());
ASSERT_EQ(0xebfef903u, ImmutableString("umulExtended").hash32());
ASSERT_EQ(0x55fde64fu, ImmutableString("imulExtended").hash32());
ASSERT_EQ(0x44a612d1u, ImmutableString("texelFetch").hash32());
ASSERT_EQ(0xa3a03233u, ImmutableString("textureGather").hash32());
ASSERT_EQ(0xb24338c0u, ImmutableString("textureGatherOffset").hash32());
ASSERT_EQ(0xc1e02fa4u, ImmutableString("atomicCounter").hash32());
ASSERT_EQ(0x666490f9u, ImmutableString("atomicCounterIncrement").hash32());
ASSERT_EQ(0xd651bc5du, ImmutableString("atomicCounterDecrement").hash32());
ASSERT_EQ(0x26813a3u, ImmutableString("atomicAdd").hash32());
ASSERT_EQ(0x23647d3cu, ImmutableString("atomicMin").hash32());
ASSERT_EQ(0x1150d92eu, ImmutableString("atomicMax").hash32());
ASSERT_EQ(0xe676f219u, ImmutableString("atomicAnd").hash32());
ASSERT_EQ(0xd2b1c53du, ImmutableString("atomicOr").hash32());
ASSERT_EQ(0xbfd854b5u, ImmutableString("atomicXor").hash32());
ASSERT_EQ(0xb94d85ddu, ImmutableString("atomicExchange").hash32());
ASSERT_EQ(0xf3bd9210u, ImmutableString("atomicCompSwap").hash32());
ASSERT_EQ(0x6ef2b1c3u, ImmutableString("imageSize").hash32());
ASSERT_EQ(0x493c8c52u, ImmutableString("imageLoad").hash32());
ASSERT_EQ(0x4f0e8e9bu, ImmutableString("imageStore").hash32());
ASSERT_EQ(0x3815d075u, ImmutableString("memoryBarrier").hash32());
ASSERT_EQ(0xb5e7ff54u, ImmutableString("memoryBarrierAtomicCounter").hash32());
ASSERT_EQ(0x6fdf21cbu, ImmutableString("memoryBarrierBuffer").hash32());
ASSERT_EQ(0x4dafa4aau, ImmutableString("memoryBarrierImage").hash32());
ASSERT_EQ(0x3d693fa0u, ImmutableString("barrier").hash32());
ASSERT_EQ(0xe85fa9e4u, ImmutableString("memoryBarrierShared").hash32());
ASSERT_EQ(0x7afaf16eu, ImmutableString("groupMemoryBarrier").hash32());
ASSERT_EQ(0xb5d34358u, ImmutableString("EmitVertex").hash32());
ASSERT_EQ(0xb413b257u, ImmutableString("EndPrimitive").hash32());
ASSERT_EQ(0x10d2583fu, ImmutableString("sinh").hash32());
ASSERT_EQ(0xf45c461cu, ImmutableString("cosh").hash32());
ASSERT_EQ(0x92855d0u, ImmutableString("tanh").hash32());
ASSERT_EQ(0xbab19e4au, ImmutableString("asinh").hash32());
ASSERT_EQ(0xedf2c855u, ImmutableString("acosh").hash32());
ASSERT_EQ(0x7275075u, ImmutableString("atanh").hash32());
ASSERT_EQ(0x2a48023bu, ImmutableString("abs").hash32());
ASSERT_EQ(0xcbc8ba4u, ImmutableString("sign").hash32());
ASSERT_EQ(0xd55e61e5u, ImmutableString("trunc").hash32());
ASSERT_EQ(0x4f0be23bu, ImmutableString("round").hash32());
ASSERT_EQ(0xa4639127u, ImmutableString("roundEven").hash32());
ASSERT_EQ(0xc98f4557u, ImmutableString("min").hash32());
ASSERT_EQ(0xd7a2e319u, ImmutableString("max").hash32());
ASSERT_EQ(0xa82efcbcu, ImmutableString("clamp").hash32());
ASSERT_EQ(0xd78f5b61u, ImmutableString("mix").hash32());
ASSERT_EQ(0xeb6ede7fu, ImmutableString("modf").hash32());
ASSERT_EQ(0xb1b3c06au, ImmutableString("isnan").hash32());
ASSERT_EQ(0x26ac11d8u, ImmutableString("isinf").hash32());
ASSERT_EQ(0xb15a3cc9u, ImmutableString("floatBitsToInt").hash32());
ASSERT_EQ(0xc8575388u, ImmutableString("floatBitsToUint").hash32());
ASSERT_EQ(0xfc501e17u, ImmutableString("intBitsToFloat").hash32());
ASSERT_EQ(0xc29ffa7eu, ImmutableString("uintBitsToFloat").hash32());
ASSERT_EQ(0x4326f80au, ImmutableString("packSnorm2x16").hash32());
ASSERT_EQ(0x6ff78d04u, ImmutableString("packUnorm2x16").hash32());
ASSERT_EQ(0x5bd36438u, ImmutableString("packHalf2x16").hash32());
ASSERT_EQ(0x6e02ba1bu, ImmutableString("unpackSnorm2x16").hash32());
ASSERT_EQ(0x25680679u, ImmutableString("unpackUnorm2x16").hash32());
ASSERT_EQ(0x28cedbc3u, ImmutableString("unpackHalf2x16").hash32());
ASSERT_EQ(0xd5f05125u, ImmutableString("matrixCompMult").hash32());
ASSERT_EQ(0x8f8617abu, ImmutableString("outerProduct").hash32());
ASSERT_EQ(0xc03183c0u, ImmutableString("transpose").hash32());
ASSERT_EQ(0x767e36c0u, ImmutableString("determinant").hash32());
ASSERT_EQ(0xb201f283u, ImmutableString("inverse").hash32());
ASSERT_EQ(0x5fc75c3u, ImmutableString("lessThan").hash32());
ASSERT_EQ(0x491f109u, ImmutableString("lessThanEqual").hash32());
ASSERT_EQ(0x4644cdeu, ImmutableString("greaterThan").hash32());
ASSERT_EQ(0xed7dc722u, ImmutableString("greaterThanEqual").hash32());
ASSERT_EQ(0x2f7508efu, ImmutableString("equal").hash32());
ASSERT_EQ(0x2485bbbeu, ImmutableString("notEqual").hash32());
ASSERT_EQ(0x3c6468f4u, ImmutableString("texture").hash32());
ASSERT_EQ(0x94b08f7fu, ImmutableString("textureProj").hash32());
ASSERT_EQ(0x23feff3u, ImmutableString("textureLod").hash32());
ASSERT_EQ(0xc73e788du, ImmutableString("textureSize").hash32());
ASSERT_EQ(0xb755b482u, ImmutableString("textureProjLod").hash32());
ASSERT_EQ(0x33a56e6cu, ImmutableString("textureGrad").hash32());
ASSERT_EQ(0x7bf8de3bu, ImmutableString("textureProjGrad").hash32());
ASSERT_EQ(0x88c917cfu, ImmutableString("textureOffset").hash32());
ASSERT_EQ(0xa5212424u, ImmutableString("textureProjOffset").hash32());
ASSERT_EQ(0x39d34980u, ImmutableString("textureLodOffset").hash32());
ASSERT_EQ(0x1535b7a5u, ImmutableString("textureProjLodOffset").hash32());
ASSERT_EQ(0x12b2640eu, ImmutableString("texelFetchOffset").hash32());
ASSERT_EQ(0x6b0ca057u, ImmutableString("textureGradOffset").hash32());
ASSERT_EQ(0x8b45ed38u, ImmutableString("textureProjGradOffset").hash32());
ASSERT_EQ(0xa6789406u, ImmutableString("rgb_2_yuv").hash32());
ASSERT_EQ(0xc7818fa2u, ImmutableString("yuv_2_rgb").hash32());
ASSERT_EQ(0xc8859a8bu, ImmutableString("dFdx").hash32());
ASSERT_EQ(0xc78598f8u, ImmutableString("dFdy").hash32());
ASSERT_EQ(0x4b6e55d3u, ImmutableString("fwidth").hash32());
ASSERT_EQ(0x18a9c042u, ImmutableString("texture2D").hash32());
ASSERT_EQ(0xc7cb8969u, ImmutableString("texture2DProj").hash32());
ASSERT_EQ(0xfece2a39u, ImmutableString("textureCube").hash32());
ASSERT_EQ(0x3d4abf10u, ImmutableString("texture2DRect").hash32());
ASSERT_EQ(0x6dc0e8e3u, ImmutableString("texture2DRectProj").hash32());
ASSERT_EQ(0xd1836639u, ImmutableString("texture2DGradEXT").hash32());
ASSERT_EQ(0x4040698cu, ImmutableString("texture2DProjGradEXT").hash32());
ASSERT_EQ(0x1d18f29cu, ImmutableString("textureCubeGradEXT").hash32());
ASSERT_EQ(0x7150ceb8u, ImmutableString("texture2DLodEXT").hash32());
ASSERT_EQ(0xbacaedf7u, ImmutableString("texture2DProjLodEXT").hash32());
ASSERT_EQ(0x7309b987u, ImmutableString("textureCubeLodEXT").hash32());
ASSERT_EQ(0xfa79f401u, ImmutableString("texture2DLod").hash32());
ASSERT_EQ(0x30ed9cfcu, ImmutableString("texture2DProjLod").hash32());
ASSERT_EQ(0xb35e342cu, ImmutableString("textureCubeLod").hash32());
ASSERT_EQ(0x856a57e1u, ImmutableString("radians").hash32());
ASSERT_EQ(0xaf5442eeu, ImmutableString("degrees").hash32());
ASSERT_EQ(0xe0302a4du, ImmutableString("sin").hash32());
ASSERT_EQ(0xfb8de29cu, ImmutableString("cos").hash32());
ASSERT_EQ(0x9cf73498u, ImmutableString("tan").hash32());
ASSERT_EQ(0xfeae7ea6u, ImmutableString("asin").hash32());
ASSERT_EQ(0x3c01df1fu, ImmutableString("acos").hash32());
ASSERT_EQ(0x678cabfu, ImmutableString("atan").hash32());
ASSERT_EQ(0x58336ad5u, ImmutableString("pow").hash32());
ASSERT_EQ(0x72a68728u, ImmutableString("exp").hash32());
ASSERT_EQ(0x3f515151u, ImmutableString("log").hash32());
ASSERT_EQ(0x9626adeeu, ImmutableString("exp2").hash32());
ASSERT_EQ(0x10031ed9u, ImmutableString("log2").hash32());
ASSERT_EQ(0x7dee3bcfu, ImmutableString("sqrt").hash32());
ASSERT_EQ(0xe8b548a5u, ImmutableString("inversesqrt").hash32());
ASSERT_EQ(0xb8e70c1du, ImmutableString("floor").hash32());
ASSERT_EQ(0x62e4e208u, ImmutableString("ceil").hash32());
ASSERT_EQ(0xeef29a67u, ImmutableString("fract").hash32());
ASSERT_EQ(0xdf9e7283u, ImmutableString("mod").hash32());
ASSERT_EQ(0xc7441a0fu, ImmutableString("step").hash32());
ASSERT_EQ(0x95964e7du, ImmutableString("smoothstep").hash32());
ASSERT_EQ(0x83d03615u, ImmutableString("length").hash32());
ASSERT_EQ(0x2eb31462u, ImmutableString("distance").hash32());
ASSERT_EQ(0xd3689f20u, ImmutableString("dot").hash32());
ASSERT_EQ(0x29f5189bu, ImmutableString("cross").hash32());
ASSERT_EQ(0xce79296cu, ImmutableString("normalize").hash32());
ASSERT_EQ(0x5fd55fe1u, ImmutableString("faceforward").hash32());
ASSERT_EQ(0x92c778aau, ImmutableString("reflect").hash32());
ASSERT_EQ(0x66c705cu, ImmutableString("refract").hash32());
ASSERT_EQ(0x2c29f04du, ImmutableString("any").hash32());
ASSERT_EQ(0x13254bc4u, ImmutableString("all").hash32());
ASSERT_EQ(0x29b19c8au, ImmutableString("not").hash32());
}
} // namespace sh
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment