Commit a240a2f9 by Shannon Woods

Initialize the symbol table without invoking the parser.

TRAC #23368 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Nicolas Capens
parent 407c6a53
# Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. # Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
...@@ -64,8 +64,6 @@ ...@@ -64,8 +64,6 @@
'COMPILER_IMPLEMENTATION', 'COMPILER_IMPLEMENTATION',
], ],
'sources': [ 'sources': [
'compiler/builtin_symbol_table.h',
'compiler/builtin_symbol_table.cpp',
'compiler/BaseTypes.h', 'compiler/BaseTypes.h',
'compiler/BuiltInFunctionEmulator.cpp', 'compiler/BuiltInFunctionEmulator.cpp',
'compiler/BuiltInFunctionEmulator.h', 'compiler/BuiltInFunctionEmulator.h',
......
#define MAJOR_VERSION 1 #define MAJOR_VERSION 1
#define MINOR_VERSION 0 #define MINOR_VERSION 0
#define BUILD_VERSION 0 #define BUILD_VERSION 0
#define BUILD_REVISION 2250 #define BUILD_REVISION 2251
#define STRINGIFY(x) #x #define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x) #define MACRO_STRINGIFY(x) STRINGIFY(x)
......
// //
// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. // 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
#include "compiler/builtin_symbol_table.h"
#include "compiler/BuiltInFunctionEmulator.h" #include "compiler/BuiltInFunctionEmulator.h"
#include "compiler/DetectCallDepth.h" #include "compiler/DetectCallDepth.h"
#include "compiler/ForLoopUnroll.h" #include "compiler/ForLoopUnroll.h"
...@@ -28,66 +27,6 @@ bool isWebGLBasedSpec(ShShaderSpec spec) ...@@ -28,66 +27,6 @@ bool isWebGLBasedSpec(ShShaderSpec spec)
} }
namespace { namespace {
bool InitializeSymbolTable(
const TBuiltInStrings& builtInStrings,
ShShaderType type, ShShaderSpec spec, const ShBuiltInResources& resources,
TInfoSink& infoSink, TSymbolTable& symbolTable)
{
TIntermediate intermediate(infoSink);
TExtensionBehavior extBehavior;
InitExtensionBehavior(resources, extBehavior);
// The builtins deliberately don't specify precisions for the function
// arguments and return types. For that reason we don't try to check them.
TParseContext parseContext(symbolTable, extBehavior, intermediate, type, spec, 0, false, NULL, infoSink);
parseContext.fragmentPrecisionHigh = resources.FragmentPrecisionHigh == 1;
GlobalParseContext = &parseContext;
assert(symbolTable.isEmpty());
//
// Parse the built-ins. This should only happen once per
// language symbol table.
//
// Push the symbol table to give it an initial scope. This
// push should not have a corresponding pop, so that built-ins
// are preserved, and the test for an empty table fails.
//
symbolTable.push();
for (TBuiltInStrings::const_iterator i = builtInStrings.begin(); i != builtInStrings.end(); ++i)
{
const char* builtInShaders = i->c_str();
int builtInLengths = static_cast<int>(i->size());
if (builtInLengths <= 0)
continue;
if (PaParseStrings(1, &builtInShaders, &builtInLengths, &parseContext) != 0)
{
infoSink.info.prefix(EPrefixInternalError);
infoSink.info << "Unable to parse built-ins";
return false;
}
}
switch (type) {
case SH_FRAGMENT_SHADER:
InsertBuiltInFunctionsCommon(resources, &symbolTable);
break;
case SH_VERTEX_SHADER:
InsertBuiltInFunctionsCommon(resources, &symbolTable);
InsertBuiltInFunctionsVertex(resources, &symbolTable);
break;
default: assert(false && "Language not supported");
}
IdentifyBuiltIns(type, spec, resources, symbolTable);
return true;
}
class TScopedPoolAllocator { class TScopedPoolAllocator {
public: public:
TScopedPoolAllocator(TPoolAllocator* allocator, bool pushPop) TScopedPoolAllocator(TPoolAllocator* allocator, bool pushPop)
...@@ -268,13 +207,40 @@ bool TCompiler::compile(const char* const shaderStrings[], ...@@ -268,13 +207,40 @@ bool TCompiler::compile(const char* const shaderStrings[],
return success; return success;
} }
bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources& resources) bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
{ {
TBuiltIns builtIns; assert(symbolTable.isEmpty());
symbolTable.push();
TPublicType integer;
integer.type = EbtInt;
integer.size = 1;
integer.matrix = false;
integer.array = false;
TPublicType floatingPoint;
floatingPoint.type = EbtFloat;
floatingPoint.size = 1;
floatingPoint.matrix = false;
floatingPoint.array = false;
builtIns.initialize(shaderType, shaderSpec, resources); switch(shaderType)
return InitializeSymbolTable(builtIns.getBuiltInStrings(), {
shaderType, shaderSpec, resources, infoSink, symbolTable); case SH_FRAGMENT_SHADER:
symbolTable.setDefaultPrecision(integer, EbpMedium);
break;
case SH_VERTEX_SHADER:
symbolTable.setDefaultPrecision(integer, EbpHigh);
symbolTable.setDefaultPrecision(floatingPoint, EbpHigh);
break;
default: assert(false && "Language not supported");
}
InsertBuiltInFunctions(shaderType, shaderSpec, resources, extensionBehavior, symbolTable);
IdentifyBuiltIns(shaderType, shaderSpec, resources, symbolTable);
return true;
} }
void TCompiler::clearResults() void TCompiler::clearResults()
......
// //
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. // 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -14,143 +14,418 @@ ...@@ -14,143 +14,418 @@
#include "compiler/intermediate.h" #include "compiler/intermediate.h"
//============================================================================ void InsertBuiltInFunctions(ShShaderType type, ShShaderSpec spec, const ShBuiltInResources &resources,
// const TExtensionBehavior &extensionBehavior, TSymbolTable &symbolTable)
// Prototypes for built-in functions seen by fragment shaders only.
//
//============================================================================
static TString BuiltInFunctionsFragment(const ShBuiltInResources& resources)
{ {
TString s; TType *float1 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 1);
TType *float2 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 2);
TType *float3 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 3);
TType *float4 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 4);
TType *int2 = new TType(EbtInt, EbpUndefined, EvqGlobal, 2);
TType *int3 = new TType(EbtInt, EbpUndefined, EvqGlobal, 3);
TType *int4 = new TType(EbtInt, EbpUndefined, EvqGlobal, 4);
// //
// Texture Functions. // Angle and Trigonometric Functions.
// //
s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord, float bias);")); symbolTable.insertBuiltIn(float1, "radians", float1, "degrees");
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);")); symbolTable.insertBuiltIn(float2, "radians", float2, "degrees");
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);")); symbolTable.insertBuiltIn(float3, "radians", float3, "degrees");
s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);")); symbolTable.insertBuiltIn(float4, "radians", float4, "degrees");
if (resources.OES_standard_derivatives) { symbolTable.insertBuiltIn(float1, "degrees", float1, "radians");
s.append(TString("float dFdx(float p);")); symbolTable.insertBuiltIn(float2, "degrees", float2, "radians");
s.append(TString("vec2 dFdx(vec2 p);")); symbolTable.insertBuiltIn(float3, "degrees", float3, "radians");
s.append(TString("vec3 dFdx(vec3 p);")); symbolTable.insertBuiltIn(float4, "degrees", float4, "radians");
s.append(TString("vec4 dFdx(vec4 p);"));
symbolTable.insertBuiltIn(float1, "sin", float1, "angle");
s.append(TString("float dFdy(float p);")); symbolTable.insertBuiltIn(float2, "sin", float2, "angle");
s.append(TString("vec2 dFdy(vec2 p);")); symbolTable.insertBuiltIn(float3, "sin", float3, "angle");
s.append(TString("vec3 dFdy(vec3 p);")); symbolTable.insertBuiltIn(float4, "sin", float4, "angle");
s.append(TString("vec4 dFdy(vec4 p);"));
symbolTable.insertBuiltIn(float1, "cos", float1, "angle");
s.append(TString("float fwidth(float p);")); symbolTable.insertBuiltIn(float2, "cos", float2, "angle");
s.append(TString("vec2 fwidth(vec2 p);")); symbolTable.insertBuiltIn(float3, "cos", float3, "angle");
s.append(TString("vec3 fwidth(vec3 p);")); symbolTable.insertBuiltIn(float4, "cos", float4, "angle");
s.append(TString("vec4 fwidth(vec4 p);"));
} symbolTable.insertBuiltIn(float1, "tan", float1, "angle");
symbolTable.insertBuiltIn(float2, "tan", float2, "angle");
symbolTable.insertBuiltIn(float3, "tan", float3, "angle");
symbolTable.insertBuiltIn(float4, "tan", float4, "angle");
symbolTable.insertBuiltIn(float1, "asin", float1, "x");
symbolTable.insertBuiltIn(float2, "asin", float2, "x");
symbolTable.insertBuiltIn(float3, "asin", float3, "x");
symbolTable.insertBuiltIn(float4, "asin", float4, "x");
symbolTable.insertBuiltIn(float1, "acos", float1, "x");
symbolTable.insertBuiltIn(float2, "acos", float2, "x");
symbolTable.insertBuiltIn(float3, "acos", float3, "x");
symbolTable.insertBuiltIn(float4, "acos", float4, "x");
symbolTable.insertBuiltIn(float1, "atan", float1, "y", float1, "x");
symbolTable.insertBuiltIn(float2, "atan", float2, "y", float2, "x");
symbolTable.insertBuiltIn(float3, "atan", float3, "y", float3, "x");
symbolTable.insertBuiltIn(float4, "atan", float4, "y", float4, "x");
symbolTable.insertBuiltIn(float1, "atan", float1, "y_over_x");
symbolTable.insertBuiltIn(float2, "atan", float2, "y_over_x");
symbolTable.insertBuiltIn(float3, "atan", float3, "y_over_x");
symbolTable.insertBuiltIn(float4, "atan", float4, "y_over_x");
return s; //
} // Exponential Functions.
//
symbolTable.insertBuiltIn(float1, "pow", float1, "x", float1, "y");
symbolTable.insertBuiltIn(float2, "pow", float2, "x", float2, "y");
symbolTable.insertBuiltIn(float3, "pow", float3, "x", float3, "y");
symbolTable.insertBuiltIn(float4, "pow", float4, "x", float4, "y");
symbolTable.insertBuiltIn(float1, "exp", float1, "x");
symbolTable.insertBuiltIn(float2, "exp", float2, "x");
symbolTable.insertBuiltIn(float3, "exp", float3, "x");
symbolTable.insertBuiltIn(float4, "exp", float4, "x");
symbolTable.insertBuiltIn(float1, "log", float1, "x");
symbolTable.insertBuiltIn(float2, "log", float2, "x");
symbolTable.insertBuiltIn(float3, "log", float3, "x");
symbolTable.insertBuiltIn(float4, "log", float4, "x");
symbolTable.insertBuiltIn(float1, "exp2", float1, "x");
symbolTable.insertBuiltIn(float2, "exp2", float2, "x");
symbolTable.insertBuiltIn(float3, "exp2", float3, "x");
symbolTable.insertBuiltIn(float4, "exp2", float4, "x");
symbolTable.insertBuiltIn(float1, "log2", float1, "x");
symbolTable.insertBuiltIn(float2, "log2", float2, "x");
symbolTable.insertBuiltIn(float3, "log2", float3, "x");
symbolTable.insertBuiltIn(float4, "log2", float4, "x");
symbolTable.insertBuiltIn(float1, "sqrt", float1, "x");
symbolTable.insertBuiltIn(float2, "sqrt", float2, "x");
symbolTable.insertBuiltIn(float3, "sqrt", float3, "x");
symbolTable.insertBuiltIn(float4, "sqrt", float4, "x");
symbolTable.insertBuiltIn(float1, "inversesqrt", float1, "x");
symbolTable.insertBuiltIn(float2, "inversesqrt", float2, "x");
symbolTable.insertBuiltIn(float3, "inversesqrt", float3, "x");
symbolTable.insertBuiltIn(float4, "inversesqrt", float4, "x");
//============================================================================ //
// // Common Functions.
// Standard uniforms. //
// symbolTable.insertBuiltIn(float1, "abs", float1, "x");
//============================================================================ symbolTable.insertBuiltIn(float2, "abs", float2, "x");
static TString StandardUniforms() symbolTable.insertBuiltIn(float3, "abs", float3, "x");
{ symbolTable.insertBuiltIn(float4, "abs", float4, "x");
TString s;
symbolTable.insertBuiltIn(float1, "sign", float1, "x");
symbolTable.insertBuiltIn(float2, "sign", float2, "x");
symbolTable.insertBuiltIn(float3, "sign", float3, "x");
symbolTable.insertBuiltIn(float4, "sign", float4, "x");
symbolTable.insertBuiltIn(float1, "floor", float1, "x");
symbolTable.insertBuiltIn(float2, "floor", float2, "x");
symbolTable.insertBuiltIn(float3, "floor", float3, "x");
symbolTable.insertBuiltIn(float4, "floor", float4, "x");
symbolTable.insertBuiltIn(float1, "ceil", float1, "x");
symbolTable.insertBuiltIn(float2, "ceil", float2, "x");
symbolTable.insertBuiltIn(float3, "ceil", float3, "x");
symbolTable.insertBuiltIn(float4, "ceil", float4, "x");
symbolTable.insertBuiltIn(float1, "fract", float1, "x");
symbolTable.insertBuiltIn(float2, "fract", float2, "x");
symbolTable.insertBuiltIn(float3, "fract", float3, "x");
symbolTable.insertBuiltIn(float4, "fract", float4, "x");
symbolTable.insertBuiltIn(float1, "mod", float1, "x", float1, "y");
symbolTable.insertBuiltIn(float2, "mod", float2, "x", float1, "y");
symbolTable.insertBuiltIn(float3, "mod", float3, "x", float1, "y");
symbolTable.insertBuiltIn(float4, "mod", float4, "x", float1, "y");
symbolTable.insertBuiltIn(float2, "mod", float2, "x", float2, "y");
symbolTable.insertBuiltIn(float3, "mod", float3, "x", float3, "y");
symbolTable.insertBuiltIn(float4, "mod", float4, "x", float4, "y");
symbolTable.insertBuiltIn(float1, "min", float1, "x", float1, "y");
symbolTable.insertBuiltIn(float2, "min", float2, "x", float1, "y");
symbolTable.insertBuiltIn(float3, "min", float3, "x", float1, "y");
symbolTable.insertBuiltIn(float4, "min", float4, "x", float1, "y");
symbolTable.insertBuiltIn(float2, "min", float2, "x", float2, "y");
symbolTable.insertBuiltIn(float3, "min", float3, "x", float3, "y");
symbolTable.insertBuiltIn(float4, "min", float4, "x", float4, "y");
symbolTable.insertBuiltIn(float1, "max", float1, "x", float1, "y");
symbolTable.insertBuiltIn(float2, "max", float2, "x", float1, "y");
symbolTable.insertBuiltIn(float3, "max", float3, "x", float1, "y");
symbolTable.insertBuiltIn(float4, "max", float4, "x", float1, "y");
symbolTable.insertBuiltIn(float2, "max", float2, "x", float2, "y");
symbolTable.insertBuiltIn(float3, "max", float3, "x", float3, "y");
symbolTable.insertBuiltIn(float4, "max", float4, "x", float4, "y");
symbolTable.insertBuiltIn(float1, "clamp", float1, "x", float1, "minVal", float1, "maxVal");
symbolTable.insertBuiltIn(float2, "clamp", float2, "x", float1, "minVal", float1, "maxVal");
symbolTable.insertBuiltIn(float3, "clamp", float3, "x", float1, "minVal", float1, "maxVal");
symbolTable.insertBuiltIn(float4, "clamp", float4, "x", float1, "minVal", float1, "maxVal");
symbolTable.insertBuiltIn(float2, "clamp", float2, "x", float2, "minVal", float2, "maxVal");
symbolTable.insertBuiltIn(float3, "clamp", float3, "x", float3, "minVal", float3, "maxVal");
symbolTable.insertBuiltIn(float4, "clamp", float4, "x", float4, "minVal", float4, "maxVal");
symbolTable.insertBuiltIn(float1, "mix", float1, "x", float1, "y", float1, "a");
symbolTable.insertBuiltIn(float2, "mix", float2, "x", float2, "y", float1, "a");
symbolTable.insertBuiltIn(float3, "mix", float3, "x", float3, "y", float1, "a");
symbolTable.insertBuiltIn(float4, "mix", float4, "x", float4, "y", float1, "a");
symbolTable.insertBuiltIn(float2, "mix", float2, "x", float2, "y", float2, "a");
symbolTable.insertBuiltIn(float3, "mix", float3, "x", float3, "y", float3, "a");
symbolTable.insertBuiltIn(float4, "mix", float4, "x", float4, "y", float4, "a");
symbolTable.insertBuiltIn(float1, "step", float1, "edge", float1, "x");
symbolTable.insertBuiltIn(float2, "step", float2, "edge", float2, "x");
symbolTable.insertBuiltIn(float3, "step", float3, "edge", float3, "x");
symbolTable.insertBuiltIn(float4, "step", float4, "edge", float4, "x");
symbolTable.insertBuiltIn(float2, "step", float1, "edge", float2, "x");
symbolTable.insertBuiltIn(float3, "step", float1, "edge", float3, "x");
symbolTable.insertBuiltIn(float4, "step", float1, "edge", float4, "x");
symbolTable.insertBuiltIn(float1, "smoothstep", float1, "edge0", float1, "edge1", float1, "x");
symbolTable.insertBuiltIn(float2, "smoothstep", float2, "edge0", float2, "edge1", float2, "x");
symbolTable.insertBuiltIn(float3, "smoothstep", float3, "edge0", float3, "edge1", float3, "x");
symbolTable.insertBuiltIn(float4, "smoothstep", float4, "edge0", float4, "edge1", float4, "x");
symbolTable.insertBuiltIn(float2, "smoothstep", float1, "edge0", float1, "edge1", float2, "x");
symbolTable.insertBuiltIn(float3, "smoothstep", float1, "edge0", float1, "edge1", float3, "x");
symbolTable.insertBuiltIn(float4, "smoothstep", float1, "edge0", float1, "edge1", float4, "x");
// //
// Depth range in window coordinates // Geometric Functions.
// //
s.append(TString("struct gl_DepthRangeParameters {")); symbolTable.insertBuiltIn(float1, "length", float1, "x");
s.append(TString(" highp float near;")); // n symbolTable.insertBuiltIn(float1, "length", float2, "x");
s.append(TString(" highp float far;")); // f symbolTable.insertBuiltIn(float1, "length", float3, "x");
s.append(TString(" highp float diff;")); // f - n symbolTable.insertBuiltIn(float1, "length", float4, "x");
s.append(TString("};"));
s.append(TString("uniform gl_DepthRangeParameters gl_DepthRange;")); symbolTable.insertBuiltIn(float1, "distance", float1, "p0", float1, "p1");
symbolTable.insertBuiltIn(float1, "distance", float2, "p0", float2, "p1");
return s; symbolTable.insertBuiltIn(float1, "distance", float3, "p0", float3, "p1");
} symbolTable.insertBuiltIn(float1, "distance", float4, "p0", float4, "p1");
symbolTable.insertBuiltIn(float1, "dot", float1, "x", float1, "y");
symbolTable.insertBuiltIn(float1, "dot", float2, "x", float2, "y");
symbolTable.insertBuiltIn(float1, "dot", float3, "x", float3, "y");
symbolTable.insertBuiltIn(float1, "dot", float4, "x", float4, "y");
symbolTable.insertBuiltIn(float3, "cross", float3, "x", float3, "y");
symbolTable.insertBuiltIn(float1, "normalize", float1, "x");
symbolTable.insertBuiltIn(float2, "normalize", float2, "x");
symbolTable.insertBuiltIn(float3, "normalize", float3, "x");
symbolTable.insertBuiltIn(float4, "normalize", float4, "x");
symbolTable.insertBuiltIn(float1, "faceforward", float1, "N", float1, "I", float1, "Nref");
symbolTable.insertBuiltIn(float2, "faceforward", float2, "N", float2, "I", float2, "Nref");
symbolTable.insertBuiltIn(float3, "faceforward", float3, "N", float3, "I", float3, "Nref");
symbolTable.insertBuiltIn(float4, "faceforward", float4, "N", float4, "I", float4, "Nref");
symbolTable.insertBuiltIn(float1, "reflect", float1, "I", float1, "N");
symbolTable.insertBuiltIn(float2, "reflect", float2, "I", float2, "N");
symbolTable.insertBuiltIn(float3, "reflect", float3, "I", float3, "N");
symbolTable.insertBuiltIn(float4, "reflect", float4, "I", float4, "N");
symbolTable.insertBuiltIn(float1, "refract", float1, "I", float1, "N", float1, "eta");
symbolTable.insertBuiltIn(float2, "refract", float2, "I", float2, "N", float1, "eta");
symbolTable.insertBuiltIn(float3, "refract", float3, "I", float3, "N", float1, "eta");
symbolTable.insertBuiltIn(float4, "refract", float4, "I", float4, "N", float1, "eta");
TType *mat2 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, true);
TType *mat3 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, true);
TType *mat4 = new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, true);
//============================================================================ //
// // Matrix Functions.
// Default precision for vertex shaders. //
// symbolTable.insertBuiltIn(mat2, "matrixCompMult", mat2, "x", mat2, "y");
//============================================================================ symbolTable.insertBuiltIn(mat3, "matrixCompMult", mat3, "x", mat3, "y");
static TString DefaultPrecisionVertex() symbolTable.insertBuiltIn(mat4, "matrixCompMult", mat4, "x", mat4, "y");
{
TString s;
s.append(TString("precision highp int;")); TType *bool1 = new TType(EbtBool, EbpUndefined, EvqGlobal, 1);
s.append(TString("precision highp float;")); TType *bool2 = new TType(EbtBool, EbpUndefined, EvqGlobal, 2);
TType *bool3 = new TType(EbtBool, EbpUndefined, EvqGlobal, 3);
TType *bool4 = new TType(EbtBool, EbpUndefined, EvqGlobal, 4);
return s; //
} // Vector relational functions.
//
symbolTable.insertBuiltIn(bool2, "lessThan", float2, "x", float2, "y");
symbolTable.insertBuiltIn(bool3, "lessThan", float3, "x", float3, "y");
symbolTable.insertBuiltIn(bool4, "lessThan", float4, "x", float4, "y");
//============================================================================ symbolTable.insertBuiltIn(bool2, "lessThan", int2, "x", int2, "y");
// symbolTable.insertBuiltIn(bool3, "lessThan", int3, "x", int3, "y");
// Default precision for fragment shaders. symbolTable.insertBuiltIn(bool4, "lessThan", int4, "x", int4, "y");
//
//============================================================================
static TString DefaultPrecisionFragment()
{
TString s;
s.append(TString("precision mediump int;")); symbolTable.insertBuiltIn(bool2, "lessThanEqual", float2, "x", float2, "y");
// No default precision for float in fragment shaders symbolTable.insertBuiltIn(bool3, "lessThanEqual", float3, "x", float3, "y");
symbolTable.insertBuiltIn(bool4, "lessThanEqual", float4, "x", float4, "y");
return s; symbolTable.insertBuiltIn(bool2, "lessThanEqual", int2, "x", int2, "y");
} symbolTable.insertBuiltIn(bool3, "lessThanEqual", int3, "x", int3, "y");
symbolTable.insertBuiltIn(bool4, "lessThanEqual", int4, "x", int4, "y");
//============================================================================ symbolTable.insertBuiltIn(bool2, "greaterThan", float2, "x", float2, "y");
// symbolTable.insertBuiltIn(bool3, "greaterThan", float3, "x", float3, "y");
// Implementation dependent built-in constants. symbolTable.insertBuiltIn(bool4, "greaterThan", float4, "x", float4, "y");
//
//============================================================================
static TString BuiltInConstants(ShShaderSpec spec, const ShBuiltInResources &resources)
{
TStringStream s;
s << "const int gl_MaxVertexAttribs = " << resources.MaxVertexAttribs << ";"; symbolTable.insertBuiltIn(bool2, "greaterThan", int2, "x", int2, "y");
s << "const int gl_MaxVertexUniformVectors = " << resources.MaxVertexUniformVectors << ";"; symbolTable.insertBuiltIn(bool3, "greaterThan", int3, "x", int3, "y");
symbolTable.insertBuiltIn(bool4, "greaterThan", int4, "x", int4, "y");
s << "const int gl_MaxVaryingVectors = " << resources.MaxVaryingVectors << ";"; symbolTable.insertBuiltIn(bool2, "greaterThanEqual", float2, "x", float2, "y");
s << "const int gl_MaxVertexTextureImageUnits = " << resources.MaxVertexTextureImageUnits << ";"; symbolTable.insertBuiltIn(bool3, "greaterThanEqual", float3, "x", float3, "y");
s << "const int gl_MaxCombinedTextureImageUnits = " << resources.MaxCombinedTextureImageUnits << ";"; symbolTable.insertBuiltIn(bool4, "greaterThanEqual", float4, "x", float4, "y");
s << "const int gl_MaxTextureImageUnits = " << resources.MaxTextureImageUnits << ";";
s << "const int gl_MaxFragmentUniformVectors = " << resources.MaxFragmentUniformVectors << ";";
if (spec != SH_CSS_SHADERS_SPEC) symbolTable.insertBuiltIn(bool2, "greaterThanEqual", int2, "x", int2, "y");
s << "const int gl_MaxDrawBuffers = " << resources.MaxDrawBuffers << ";"; symbolTable.insertBuiltIn(bool3, "greaterThanEqual", int3, "x", int3, "y");
symbolTable.insertBuiltIn(bool4, "greaterThanEqual", int4, "x", int4, "y");
return s.str(); symbolTable.insertBuiltIn(bool2, "equal", float2, "x", float2, "y");
} symbolTable.insertBuiltIn(bool3, "equal", float3, "x", float3, "y");
symbolTable.insertBuiltIn(bool4, "equal", float4, "x", float4, "y");
void TBuiltIns::initialize(ShShaderType type, ShShaderSpec spec, symbolTable.insertBuiltIn(bool2, "equal", int2, "x", int2, "y");
const ShBuiltInResources& resources) symbolTable.insertBuiltIn(bool3, "equal", int3, "x", int3, "y");
{ symbolTable.insertBuiltIn(bool4, "equal", int4, "x", int4, "y");
switch (type) {
case SH_FRAGMENT_SHADER:
builtInStrings.push_back(DefaultPrecisionFragment());
builtInStrings.push_back(BuiltInFunctionsFragment(resources));
builtInStrings.push_back(StandardUniforms());
break;
case SH_VERTEX_SHADER: symbolTable.insertBuiltIn(bool2, "equal", bool2, "x", bool2, "y");
builtInStrings.push_back(DefaultPrecisionVertex()); symbolTable.insertBuiltIn(bool3, "equal", bool3, "x", bool3, "y");
builtInStrings.push_back(StandardUniforms()); symbolTable.insertBuiltIn(bool4, "equal", bool4, "x", bool4, "y");
break;
default: assert(false && "Language not supported"); symbolTable.insertBuiltIn(bool2, "notEqual", float2, "x", float2, "y");
symbolTable.insertBuiltIn(bool3, "notEqual", float3, "x", float3, "y");
symbolTable.insertBuiltIn(bool4, "notEqual", float4, "x", float4, "y");
symbolTable.insertBuiltIn(bool2, "notEqual", int2, "x", int2, "y");
symbolTable.insertBuiltIn(bool3, "notEqual", int3, "x", int3, "y");
symbolTable.insertBuiltIn(bool4, "notEqual", int4, "x", int4, "y");
symbolTable.insertBuiltIn(bool2, "notEqual", bool2, "x", bool2, "y");
symbolTable.insertBuiltIn(bool3, "notEqual", bool3, "x", bool3, "y");
symbolTable.insertBuiltIn(bool4, "notEqual", bool4, "x", bool4, "y");
symbolTable.insertBuiltIn(bool1, "any", bool2, "x");
symbolTable.insertBuiltIn(bool1, "any", bool3, "x");
symbolTable.insertBuiltIn(bool1, "any", bool4, "x");
symbolTable.insertBuiltIn(bool1, "all", bool2, "x");
symbolTable.insertBuiltIn(bool1, "all", bool3, "x");
symbolTable.insertBuiltIn(bool1, "all", bool4, "x");
symbolTable.insertBuiltIn(bool2, "not", bool2, "x");
symbolTable.insertBuiltIn(bool3, "not", bool3, "x");
symbolTable.insertBuiltIn(bool4, "not", bool4, "x");
TType *sampler2D = new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1);
TType *samplerCube = new TType(EbtSamplerCube, EbpUndefined, EvqGlobal, 1);
//
// Texture Functions
//
symbolTable.insertBuiltIn(float4, "texture2D", sampler2D, "sampler", float2, "coord");
symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, "sampler", float3, "coord");
symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, "sampler", float4, "coord");
symbolTable.insertBuiltIn(float4, "textureCube", samplerCube, "sampler", float3, "coord");
if (resources.OES_EGL_image_external)
{
TType *samplerExternalOES = new TType(EbtSamplerExternalOES, EbpUndefined, EvqGlobal, 1);
symbolTable.insertBuiltIn(float4, "texture2D", samplerExternalOES, "sampler", float2, "coord");
symbolTable.insertBuiltIn(float4, "texture2DProj", samplerExternalOES, "sampler", float3, "coord");
symbolTable.insertBuiltIn(float4, "texture2DProj", samplerExternalOES, "sampler", float4, "coord");
}
if (resources.ARB_texture_rectangle)
{
TType *sampler2DRect = new TType(EbtSampler2DRect, EbpUndefined, EvqGlobal, 1);
symbolTable.insertBuiltIn(float4, "texture2DRect", sampler2DRect, "sampler", float2, "coord");
symbolTable.insertBuiltIn(float4, "texture2DRectProj", sampler2DRect, "sampler", float3, "coord");
symbolTable.insertBuiltIn(float4, "texture2DRectProj", sampler2DRect, "sampler", float4, "coord");
} }
builtInStrings.push_back(BuiltInConstants(spec, resources)); if(type == SH_FRAGMENT_SHADER)
{
symbolTable.insertBuiltIn(float4, "texture2D", sampler2D, "sampler", float2, "coord", float1, "bias");
symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, "sampler", float3, "coord", float1, "bias");
symbolTable.insertBuiltIn(float4, "texture2DProj", sampler2D, "sampler", float4, "coord", float1, "bias");
symbolTable.insertBuiltIn(float4, "textureCube", samplerCube, "sampler", float3, "coord", float1, "bias");
if (resources.OES_standard_derivatives)
{
symbolTable.insertBuiltIn(float1, "dFdx", float1, "p");
symbolTable.insertBuiltIn(float2, "dFdx", float2, "p");
symbolTable.insertBuiltIn(float3, "dFdx", float3, "p");
symbolTable.insertBuiltIn(float4, "dFdx", float4, "p");
symbolTable.insertBuiltIn(float1, "dFdy", float1, "p");
symbolTable.insertBuiltIn(float2, "dFdy", float2, "p");
symbolTable.insertBuiltIn(float3, "dFdy", float3, "p");
symbolTable.insertBuiltIn(float4, "dFdy", float4, "p");
symbolTable.insertBuiltIn(float1, "fwidth", float1, "p");
symbolTable.insertBuiltIn(float2, "fwidth", float2, "p");
symbolTable.insertBuiltIn(float3, "fwidth", float3, "p");
symbolTable.insertBuiltIn(float4, "fwidth", float4, "p");
}
}
if(type == SH_VERTEX_SHADER)
{
symbolTable.insertBuiltIn(float4, "texture2DLod", sampler2D, "sampler", float2, "coord", float1, "lod");
symbolTable.insertBuiltIn(float4, "texture2DProjLod", sampler2D, "sampler", float3, "coord", float1, "lod");
symbolTable.insertBuiltIn(float4, "texture2DProjLod", sampler2D, "sampler", float4, "coord", float1, "lod");
symbolTable.insertBuiltIn(float4, "textureCubeLod", samplerCube, "sampler", float3, "coord", float1, "lod");
}
//
// Depth range in window coordinates
//
TFieldList *members = NewPoolTFieldList();
TField *near = new TField(new TType(EbtFloat, EbpHigh, EvqGlobal, 1), NewPoolTString("near"));
TField *far = new TField(new TType(EbtFloat, EbpHigh, EvqGlobal, 1), NewPoolTString("far"));
TField *diff = new TField(new TType(EbtFloat, EbpHigh, EvqGlobal, 1), NewPoolTString("diff"));
members->push_back(near);
members->push_back(far);
members->push_back(diff);
const TType &depthRangeType = TType(new TStructure(NewPoolTString("gl_DepthRangeParameters"), members));
TVariable *depthRangeParameters = new TVariable(NewPoolTString("gl_DepthRangeParameters"), depthRangeType, true);
symbolTable.insert(*depthRangeParameters);
TVariable *depthRange = new TVariable(NewPoolTString("gl_DepthRange"), depthRangeType);
depthRange->setQualifier(EvqUniform);
symbolTable.insert(*depthRange);
//
// Implementation dependent built-in constants.
//
symbolTable.insertConstInt("gl_MaxVertexAttribs", resources.MaxVertexAttribs);
symbolTable.insertConstInt("gl_MaxVertexUniformVectors", resources.MaxVertexUniformVectors);
symbolTable.insertConstInt("gl_MaxVaryingVectors", resources.MaxVaryingVectors);
symbolTable.insertConstInt("gl_MaxVertexTextureImageUnits", resources.MaxVertexTextureImageUnits);
symbolTable.insertConstInt("gl_MaxCombinedTextureImageUnits", resources.MaxCombinedTextureImageUnits);
symbolTable.insertConstInt("gl_MaxTextureImageUnits", resources.MaxTextureImageUnits);
symbolTable.insertConstInt("gl_MaxFragmentUniformVectors", resources.MaxFragmentUniformVectors);
if (spec != SH_CSS_SHADERS_SPEC)
{
TExtensionBehavior::const_iterator iter = extensionBehavior.find("GL_EXT_draw_buffers");
const bool usingMRTExtension = (iter != extensionBehavior.end() && (iter->second == EBhEnable || iter->second == EBhRequire));
const int maxDrawBuffers = (usingMRTExtension ? resources.MaxDrawBuffers : 1);
symbolTable.insertConstInt("gl_MaxDrawBuffers", maxDrawBuffers);
}
} }
void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec, void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec,
const ShBuiltInResources& resources, const ShBuiltInResources &resources,
TSymbolTable& symbolTable) TSymbolTable &symbolTable)
{ {
// //
// First, insert some special built-in variables that are not in // First, insert some special built-in variables that are not in
...@@ -194,8 +469,6 @@ void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec, ...@@ -194,8 +469,6 @@ void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec,
// expected to be resolved through a library of functions, versus as // expected to be resolved through a library of functions, versus as
// operations. // operations.
// //
symbolTable.relateToOperator("not", EOpVectorLogicalNot);
symbolTable.relateToOperator("matrixCompMult", EOpMul); symbolTable.relateToOperator("matrixCompMult", EOpMul);
symbolTable.relateToOperator("equal", EOpVectorEqual); symbolTable.relateToOperator("equal", EOpVectorEqual);
...@@ -246,6 +519,7 @@ void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec, ...@@ -246,6 +519,7 @@ void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec,
symbolTable.relateToOperator("any", EOpAny); symbolTable.relateToOperator("any", EOpAny);
symbolTable.relateToOperator("all", EOpAll); symbolTable.relateToOperator("all", EOpAll);
symbolTable.relateToOperator("not", EOpVectorLogicalNot);
// Map language-specific operators. // Map language-specific operators.
switch(type) { switch(type) {
......
// //
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. // 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -11,19 +11,8 @@ ...@@ -11,19 +11,8 @@
#include "compiler/ShHandle.h" #include "compiler/ShHandle.h"
#include "compiler/SymbolTable.h" #include "compiler/SymbolTable.h"
typedef TVector<TString> TBuiltInStrings; void InsertBuiltInFunctions(ShShaderType type, ShShaderSpec spec, const ShBuiltInResources &resources,
const TExtensionBehavior &extensionBehavior, TSymbolTable &table);
class TBuiltIns {
public:
POOL_ALLOCATOR_NEW_DELETE(GlobalPoolAllocator)
void initialize(ShShaderType type, ShShaderSpec spec,
const ShBuiltInResources& resources);
const TBuiltInStrings& getBuiltInStrings() { return builtInStrings; }
protected:
TBuiltInStrings builtInStrings;
};
void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec, void IdentifyBuiltIns(ShShaderType type, ShShaderSpec spec,
const ShBuiltInResources& resources, const ShBuiltInResources& resources,
......
// //
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. // 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -273,6 +273,35 @@ public: ...@@ -273,6 +273,35 @@ public:
return table[currentLevel()]->insert(symbol); return table[currentLevel()]->insert(symbol);
} }
bool insertConstInt(const char *name, int value)
{
TVariable *constant = new TVariable(NewPoolTString(name), TType(EbtInt, EbpUndefined, EvqConst, 1));
constant->getConstPointer()->setIConst(value);
return insert(*constant);
}
bool insertBuiltIn(TType *rvalue, const char *name, TType *ptype1, const char *pname1, TType *ptype2 = 0, const char *pname2 = 0, TType *ptype3 = 0, const char *pname3 = 0)
{
TFunction *function = new TFunction(NewPoolTString(name), *rvalue);
TParameter param1 = {NewPoolTString(pname1), ptype1};
function->addParameter(param1);
if (pname2)
{
TParameter param2 = {NewPoolTString(pname2), ptype2};
function->addParameter(param2);
}
if (pname3)
{
TParameter param3 = {NewPoolTString(pname3), ptype3};
function->addParameter(param3);
}
return insert(*function);
}
TSymbol* find(const TString& name, bool* builtIn = 0, bool *sameScope = 0) TSymbol* find(const TString& name, bool* builtIn = 0, bool *sameScope = 0)
{ {
int level = currentLevel(); int level = currentLevel();
......
// 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.
// *************************************************************
// This file is generated by generate_builtin_symbol_table.py.
// * DO NOT HAND MODIFY *
// *************************************************************
#include "compiler/builtin_symbol_table.h"
#include "compiler/SymbolTable.h"
static void builtin1(TSymbolTable* t, TType* rvalue, const char* name, TType* ptype1, const char* pname1)
{
TFunction* f = new TFunction(new TString(name), *rvalue);
TParameter param = {new TString(pname1), ptype1};
f->addParameter(param);
t->insert(*f);
}
static void builtin2(TSymbolTable* t, TType* rvalue, const char* name, TType* ptype1, const char* pname1, TType* ptype2, const char* pname2)
{
TFunction* f = new TFunction(new TString(name), *rvalue);
TParameter param1 = {new TString(pname1), ptype1};
f->addParameter(param1);
TParameter param2 = {new TString(pname2), ptype2};
f->addParameter(param2);
t->insert(*f);
}
static void builtin3(TSymbolTable* t, TType* rvalue, const char* name, TType* ptype1, const char* pname1, TType* ptype2, const char* pname2, TType* ptype3, const char* pname3)
{
TFunction* f = new TFunction(new TString(name), *rvalue);
TParameter param1 = {new TString(pname1), ptype1};
f->addParameter(param1);
TParameter param2 = {new TString(pname2), ptype2};
f->addParameter(param2);
TParameter param3 = {new TString(pname3), ptype3};
f->addParameter(param3);
t->insert(*f);
}
void InsertBuiltInFunctionsCommon(const ShBuiltInResources& resources, TSymbolTable* t) {
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "radians", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "degrees");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "radians", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "degrees");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "radians", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "degrees");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "radians", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "degrees");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "degrees", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "radians");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "degrees", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "radians");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "degrees", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "radians");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "degrees", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "radians");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "sin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "sin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "sin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "sin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "cos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "cos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "cos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "cos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "tan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "tan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "tan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "tan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "angle");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "asin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "asin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "asin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "asin", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "acos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "acos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "acos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "acos", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y_over_x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y_over_x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y_over_x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "atan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y_over_x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "pow", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "pow", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "pow", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "pow", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "exp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "exp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "exp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "exp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "log", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "log", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "log", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "log", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "exp2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "exp2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "exp2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "exp2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "log2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "log2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "log2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "log2", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "sqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "sqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "sqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "sqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "inversesqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "inversesqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "inversesqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "inversesqrt", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "abs", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "abs", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "abs", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "abs", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "sign", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "sign", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "sign", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "sign", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "floor", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "floor", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "floor", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "floor", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "ceil", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "ceil", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "ceil", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "ceil", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "fract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "fract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "fract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "fract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "mod", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "mod", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "mod", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "mod", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "mod", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "mod", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "mod", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "min", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "min", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "min", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "min", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "min", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "min", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "min", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "max", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "max", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "max", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "max", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "max", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "max", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "max", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "clamp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "minVal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "maxVal");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "clamp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "minVal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "maxVal");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "clamp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "minVal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "maxVal");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "clamp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "minVal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "maxVal");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "clamp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "minVal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "maxVal");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "clamp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "minVal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "maxVal");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "clamp", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "minVal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "maxVal");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "mix", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "a");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "mix", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "a");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "mix", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "a");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "mix", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "a");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "mix", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "a");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "mix", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "a");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "mix", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "a");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "step", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "step", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "edge", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "step", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "edge", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "step", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "edge", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "step", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "step", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "step", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "smoothstep", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge1", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "smoothstep", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "edge0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "edge1", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "smoothstep", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "edge0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "edge1", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "smoothstep", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "edge0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "edge1", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "smoothstep", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge1", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "smoothstep", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge1", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "smoothstep", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "edge1", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "length", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "length", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "length", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "length", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "distance", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "p0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "p1");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "distance", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "p0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "p1");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "distance", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "p0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "p1");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "distance", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "p0", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "p1");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "dot", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "dot", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "dot", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "dot", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "cross", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "normalize", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "normalize", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "normalize", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "normalize", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "faceforward", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "Nref");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "faceforward", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "Nref");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "faceforward", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "Nref");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "faceforward", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "Nref");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "reflect", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "N");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "reflect", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "N");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "reflect", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "N");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "reflect", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "N");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "refract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "eta");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "refract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "eta");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "refract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "eta");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "refract", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "I", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "N", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "eta");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, true, false), "matrixCompMult", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, true, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, true, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, true, false), "matrixCompMult", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, true, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, true, false), "y");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, true, false), "matrixCompMult", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, true, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, true, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "lessThan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "lessThan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "lessThan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "lessThan", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "lessThan", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "lessThan", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "lessThanEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "lessThanEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "lessThanEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "lessThanEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "lessThanEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "lessThanEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "greaterThan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "greaterThan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "greaterThan", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "greaterThan", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "greaterThan", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "greaterThan", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "greaterThanEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "greaterThanEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "greaterThanEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "greaterThanEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "greaterThanEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "greaterThanEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "equal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "equal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "equal", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "equal", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "equal", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "equal", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "equal", new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "equal", new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "equal", new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "notEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "notEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "notEqual", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "notEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "notEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "notEqual", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "notEqual", new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "x", new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "notEqual", new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "x", new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "y");
builtin2(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "notEqual", new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "x", new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "y");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 1, false, false), "any", new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 1, false, false), "any", new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 1, false, false), "any", new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 1, false, false), "all", new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 1, false, false), "all", new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 1, false, false), "all", new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "not", new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "not", new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false), "x");
builtin1(t, new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "not", new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false), "x");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2D", new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "coord");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DProj", new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "coord");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DProj", new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "coord");
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "textureCube", new TType(EbtSamplerCube, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "coord");
if (resources.OES_EGL_image_external) {
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2D", new TType(EbtSamplerExternalOES, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "coord");
}
if (resources.OES_EGL_image_external) {
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DProj", new TType(EbtSamplerExternalOES, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "coord");
}
if (resources.OES_EGL_image_external) {
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DProj", new TType(EbtSamplerExternalOES, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "coord");
}
if (resources.ARB_texture_rectangle) {
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DRect", new TType(EbtSampler2DRect, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "coord");
}
if (resources.ARB_texture_rectangle) {
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DRectProj", new TType(EbtSampler2DRect, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "coord");
}
if (resources.ARB_texture_rectangle) {
builtin2(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DRectProj", new TType(EbtSampler2DRect, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "coord");
}
}
void InsertBuiltInFunctionsVertex(const ShBuiltInResources& resources, TSymbolTable* t) {
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DLod", new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false), "coord", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "lod");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DProjLod", new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "coord", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "lod");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "texture2DProjLod", new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "coord", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "lod");
builtin3(t, new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false), "textureCubeLod", new TType(EbtSamplerCube, EbpUndefined, EvqGlobal, 1, false, false), "sampler", new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false), "coord", new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false), "lod");
}
//
// 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 _BUILTIN_SYMBOL_TABLE_INCLUDED_
#define _BUILTIN_SYMBOL_TABLE_INCLUDED_
#include "GLSLANG/ShaderLang.h"
class TSymbolTable;
extern void InsertBuiltInFunctionsCommon(const ShBuiltInResources& resources, TSymbolTable* t);
extern void InsertBuiltInFunctionsVertex(const ShBuiltInResources& resources, TSymbolTable* t);
#endif // _BUILTIN_SYMBOL_TABLE_INCLUDED_
{
"ttypemap" : {
"float":"new TType(EbtFloat, EbpUndefined, EvqGlobal, 1, false, false)",
"int":"new TType(EbtInt, EbpUndefined, EvqGlobal, 1, false, false)",
"bool":"new TType(EbtBool, EbpUndefined, EvqGlobal, 1, false, false)",
"vec2":"new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, false, false)",
"vec3":"new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, false, false)",
"vec4":"new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, false, false)",
"bvec2":"new TType(EbtBool, EbpUndefined, EvqGlobal, 2, false, false)",
"bvec3":"new TType(EbtBool, EbpUndefined, EvqGlobal, 3, false, false)",
"bvec4":"new TType(EbtBool, EbpUndefined, EvqGlobal, 4, false, false)",
"ivec2":"new TType(EbtInt, EbpUndefined, EvqGlobal, 2, false, false)",
"ivec3":"new TType(EbtInt, EbpUndefined, EvqGlobal, 3, false, false)",
"ivec4":"new TType(EbtInt, EbpUndefined, EvqGlobal, 4, false, false)",
"mat2":"new TType(EbtFloat, EbpUndefined, EvqGlobal, 2, true, false)",
"mat3":"new TType(EbtFloat, EbpUndefined, EvqGlobal, 3, true, false)",
"mat4":"new TType(EbtFloat, EbpUndefined, EvqGlobal, 4, true, false)",
"sampler2D":"new TType(EbtSampler2D, EbpUndefined, EvqGlobal, 1, false, false)",
"samplerCube":"new TType(EbtSamplerCube, EbpUndefined, EvqGlobal, 1, false, false)",
"samplerExternalOES":"new TType(EbtSamplerExternalOES, EbpUndefined, EvqGlobal, 1, false, false)",
"sampler2DRect":"new TType(EbtSampler2DRect, EbpUndefined, EvqGlobal, 1, false, false)"
},
"common" : [
{
"name": "radians",
"return_type": "float",
"parameter": [
{"type": "float", "name": "degrees"}
]
},
{
"name": "radians",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "degrees"}
]
},
{
"name": "radians",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "degrees"}
]
},
{
"name": "radians",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "degrees"}
]
},
{
"name": "degrees",
"return_type": "float",
"parameter": [
{"type": "float", "name": "radians"}
]
},
{
"name": "degrees",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "radians"}
]
},
{
"name": "degrees",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "radians"}
]
},
{
"name": "degrees",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "radians"}
]
},
{
"name": "sin",
"return_type": "float",
"parameter": [
{"type": "float", "name": "angle"}
]
},
{
"name": "sin",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "angle"}
]
},
{
"name": "sin",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "angle"}
]
},
{
"name": "sin",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "angle"}
]
},
{
"name": "cos",
"return_type": "float",
"parameter": [
{"type": "float", "name": "angle"}
]
},
{
"name": "cos",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "angle"}
]
},
{
"name": "cos",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "angle"}
]
},
{
"name": "cos",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "angle"}
]
},
{
"name": "tan",
"return_type": "float",
"parameter": [
{"type": "float", "name": "angle"}
]
},
{
"name": "tan",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "angle"}
]
},
{
"name": "tan",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "angle"}
]
},
{
"name": "tan",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "angle"}
]
},
{
"name": "asin",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "asin",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "asin",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "asin",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "acos",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "acos",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "acos",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "acos",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "atan",
"return_type": "float",
"parameter": [
{"type": "float", "name": "y"},
{"type": "float", "name": "x"}
]
},
{
"name": "atan",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "y"},
{"type": "vec2", "name": "x"}
]
},
{
"name": "atan",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "y"},
{"type": "vec3", "name": "x"}
]
},
{
"name": "atan",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "y"},
{"type": "vec4", "name": "x"}
]
},
{
"name": "atan",
"return_type": "float",
"parameter": [
{"type": "float", "name": "y_over_x"}
]
},
{
"name": "atan",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "y_over_x"}
]
},
{
"name": "atan",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "y_over_x"}
]
},
{
"name": "atan",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "y_over_x"}
]
},
{
"name": "pow",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "pow",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "pow",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "pow",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "exp",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "exp",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "exp",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "exp",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "log",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "log",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "log",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "log",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "exp2",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "exp2",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "exp2",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "exp2",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "log2",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "log2",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "log2",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "log2",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "sqrt",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "sqrt",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "sqrt",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "sqrt",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "inversesqrt",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "inversesqrt",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "inversesqrt",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "inversesqrt",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "abs",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "abs",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "abs",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "abs",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "sign",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "sign",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "sign",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "sign",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "floor",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "floor",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "floor",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "floor",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "ceil",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "ceil",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "ceil",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "ceil",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "fract",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "fract",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "fract",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "fract",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "mod",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "mod",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "mod",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "mod",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "mod",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "mod",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "mod",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "min",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "min",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "min",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "min",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "min",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "min",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "min",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "max",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "max",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "max",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "max",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "max",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "max",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "max",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "clamp",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"},
{"type": "float", "name": "minVal"},
{"type": "float", "name": "maxVal"}
]
},
{
"name": "clamp",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "float", "name": "minVal"},
{"type": "float", "name": "maxVal"}
]
},
{
"name": "clamp",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "float", "name": "minVal"},
{"type": "float", "name": "maxVal"}
]
},
{
"name": "clamp",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "float", "name": "minVal"},
{"type": "float", "name": "maxVal"}
]
},
{
"name": "clamp",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "minVal"},
{"type": "vec2", "name": "maxVal"}
]
},
{
"name": "clamp",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "minVal"},
{"type": "vec3", "name": "maxVal"}
]
},
{
"name": "clamp",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "minVal"},
{"type": "vec4", "name": "maxVal"}
]
},
{
"name": "mix",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"},
{"type": "float", "name": "y"},
{"type": "float", "name": "a"}
]
},
{
"name": "mix",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"},
{"type": "float", "name": "a"}
]
},
{
"name": "mix",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"},
{"type": "float", "name": "a"}
]
},
{
"name": "mix",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"},
{"type": "float", "name": "a"}
]
},
{
"name": "mix",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"},
{"type": "vec2", "name": "a"}
]
},
{
"name": "mix",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"},
{"type": "vec3", "name": "a"}
]
},
{
"name": "mix",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"},
{"type": "vec4", "name": "a"}
]
},
{
"name": "step",
"return_type": "float",
"parameter": [
{"type": "float", "name": "edge"},
{"type": "float", "name": "x"}
]
},
{
"name": "step",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "edge"},
{"type": "vec2", "name": "x"}
]
},
{
"name": "step",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "edge"},
{"type": "vec3", "name": "x"}
]
},
{
"name": "step",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "edge"},
{"type": "vec4", "name": "x"}
]
},
{
"name": "step",
"return_type": "vec2",
"parameter": [
{"type": "float", "name": "edge"},
{"type": "vec2", "name": "x"}
]
},
{
"name": "step",
"return_type": "vec3",
"parameter": [
{"type": "float", "name": "edge"},
{"type": "vec3", "name": "x"}
]
},
{
"name": "step",
"return_type": "vec4",
"parameter": [
{"type": "float", "name": "edge"},
{"type": "vec4", "name": "x"}
]
},
{
"name": "smoothstep",
"return_type": "float",
"parameter": [
{"type": "float", "name": "edge0"},
{"type": "float", "name": "edge1"},
{"type": "float", "name": "x"}
]
},
{
"name": "smoothstep",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "edge0"},
{"type": "vec2", "name": "edge1"},
{"type": "vec2", "name": "x"}
]
},
{
"name": "smoothstep",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "edge0"},
{"type": "vec3", "name": "edge1"},
{"type": "vec3", "name": "x"}
]
},
{
"name": "smoothstep",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "edge0"},
{"type": "vec4", "name": "edge1"},
{"type": "vec4", "name": "x"}
]
},
{
"name": "smoothstep",
"return_type": "vec2",
"parameter": [
{"type": "float", "name": "edge0"},
{"type": "float", "name": "edge1"},
{"type": "vec2", "name": "x"}
]
},
{
"name": "smoothstep",
"return_type": "vec3",
"parameter": [
{"type": "float", "name": "edge0"},
{"type": "float", "name": "edge1"},
{"type": "vec3", "name": "x"}
]
},
{
"name": "smoothstep",
"return_type": "vec4",
"parameter": [
{"type": "float", "name": "edge0"},
{"type": "float", "name": "edge1"},
{"type": "vec4", "name": "x"}
]
},
{
"name": "length",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "length",
"return_type": "float",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "length",
"return_type": "float",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "length",
"return_type": "float",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "distance",
"return_type": "float",
"parameter": [
{"type": "float", "name": "p0"},
{"type": "float", "name": "p1"}
]
},
{
"name": "distance",
"return_type": "float",
"parameter": [
{"type": "vec2", "name": "p0"},
{"type": "vec2", "name": "p1"}
]
},
{
"name": "distance",
"return_type": "float",
"parameter": [
{"type": "vec3", "name": "p0"},
{"type": "vec3", "name": "p1"}
]
},
{
"name": "distance",
"return_type": "float",
"parameter": [
{"type": "vec4", "name": "p0"},
{"type": "vec4", "name": "p1"}
]
},
{
"name": "dot",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"},
{"type": "float", "name": "y"}
]
},
{
"name": "dot",
"return_type": "float",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "dot",
"return_type": "float",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "dot",
"return_type": "float",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "cross",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "normalize",
"return_type": "float",
"parameter": [
{"type": "float", "name": "x"}
]
},
{
"name": "normalize",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "x"}
]
},
{
"name": "normalize",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "x"}
]
},
{
"name": "normalize",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "x"}
]
},
{
"name": "faceforward",
"return_type": "float",
"parameter": [
{"type": "float", "name": "N"},
{"type": "float", "name": "I"},
{"type": "float", "name": "Nref"}
]
},
{
"name": "faceforward",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "N"},
{"type": "vec2", "name": "I"},
{"type": "vec2", "name": "Nref"}
]
},
{
"name": "faceforward",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "N"},
{"type": "vec3", "name": "I"},
{"type": "vec3", "name": "Nref"}
]
},
{
"name": "faceforward",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "N"},
{"type": "vec4", "name": "I"},
{"type": "vec4", "name": "Nref"}
]
},
{
"name": "reflect",
"return_type": "float",
"parameter": [
{"type": "float", "name": "I"},
{"type": "float", "name": "N"}
]
},
{
"name": "reflect",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "I"},
{"type": "vec2", "name": "N"}
]
},
{
"name": "reflect",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "I"},
{"type": "vec3", "name": "N"}
]
},
{
"name": "reflect",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "I"},
{"type": "vec4", "name": "N"}
]
},
{
"name": "refract",
"return_type": "float",
"parameter": [
{"type": "float", "name": "I"},
{"type": "float", "name": "N"},
{"type": "float", "name": "eta"}
]
},
{
"name": "refract",
"return_type": "vec2",
"parameter": [
{"type": "vec2", "name": "I"},
{"type": "vec2", "name": "N"},
{"type": "float", "name": "eta"}
]
},
{
"name": "refract",
"return_type": "vec3",
"parameter": [
{"type": "vec3", "name": "I"},
{"type": "vec3", "name": "N"},
{"type": "float", "name": "eta"}
]
},
{
"name": "refract",
"return_type": "vec4",
"parameter": [
{"type": "vec4", "name": "I"},
{"type": "vec4", "name": "N"},
{"type": "float", "name": "eta"}
]
},
{
"name": "matrixCompMult",
"return_type": "mat2",
"parameter": [
{"type": "mat2", "name": "x"},
{"type": "mat2", "name": "y"}
]
},
{
"name": "matrixCompMult",
"return_type": "mat3",
"parameter": [
{"type": "mat3", "name": "x"},
{"type": "mat3", "name": "y"}
]
},
{
"name": "matrixCompMult",
"return_type": "mat4",
"parameter": [
{"type": "mat4", "name": "x"},
{"type": "mat4", "name": "y"}
]
},
{
"name": "lessThan",
"return_type": "bvec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "lessThan",
"return_type": "bvec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "lessThan",
"return_type": "bvec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "lessThan",
"return_type": "bvec2",
"parameter": [
{"type": "ivec2", "name": "x"},
{"type": "ivec2", "name": "y"}
]
},
{
"name": "lessThan",
"return_type": "bvec3",
"parameter": [
{"type": "ivec3", "name": "x"},
{"type": "ivec3", "name": "y"}
]
},
{
"name": "lessThan",
"return_type": "bvec4",
"parameter": [
{"type": "ivec4", "name": "x"},
{"type": "ivec4", "name": "y"}
]
},
{
"name": "lessThanEqual",
"return_type": "bvec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "lessThanEqual",
"return_type": "bvec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "lessThanEqual",
"return_type": "bvec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "lessThanEqual",
"return_type": "bvec2",
"parameter": [
{"type": "ivec2", "name": "x"},
{"type": "ivec2", "name": "y"}
]
},
{
"name": "lessThanEqual",
"return_type": "bvec3",
"parameter": [
{"type": "ivec3", "name": "x"},
{"type": "ivec3", "name": "y"}
]
},
{
"name": "lessThanEqual",
"return_type": "bvec4",
"parameter": [
{"type": "ivec4", "name": "x"},
{"type": "ivec4", "name": "y"}
]
},
{
"name": "greaterThan",
"return_type": "bvec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "greaterThan",
"return_type": "bvec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "greaterThan",
"return_type": "bvec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "greaterThan",
"return_type": "bvec2",
"parameter": [
{"type": "ivec2", "name": "x"},
{"type": "ivec2", "name": "y"}
]
},
{
"name": "greaterThan",
"return_type": "bvec3",
"parameter": [
{"type": "ivec3", "name": "x"},
{"type": "ivec3", "name": "y"}
]
},
{
"name": "greaterThan",
"return_type": "bvec4",
"parameter": [
{"type": "ivec4", "name": "x"},
{"type": "ivec4", "name": "y"}
]
},
{
"name": "greaterThanEqual",
"return_type": "bvec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "greaterThanEqual",
"return_type": "bvec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "greaterThanEqual",
"return_type": "bvec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "greaterThanEqual",
"return_type": "bvec2",
"parameter": [
{"type": "ivec2", "name": "x"},
{"type": "ivec2", "name": "y"}
]
},
{
"name": "greaterThanEqual",
"return_type": "bvec3",
"parameter": [
{"type": "ivec3", "name": "x"},
{"type": "ivec3", "name": "y"}
]
},
{
"name": "greaterThanEqual",
"return_type": "bvec4",
"parameter": [
{"type": "ivec4", "name": "x"},
{"type": "ivec4", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec2",
"parameter": [
{"type": "ivec2", "name": "x"},
{"type": "ivec2", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec3",
"parameter": [
{"type": "ivec3", "name": "x"},
{"type": "ivec3", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec4",
"parameter": [
{"type": "ivec4", "name": "x"},
{"type": "ivec4", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec2",
"parameter": [
{"type": "bvec2", "name": "x"},
{"type": "bvec2", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec3",
"parameter": [
{"type": "bvec3", "name": "x"},
{"type": "bvec3", "name": "y"}
]
},
{
"name": "equal",
"return_type": "bvec4",
"parameter": [
{"type": "bvec4", "name": "x"},
{"type": "bvec4", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec2",
"parameter": [
{"type": "vec2", "name": "x"},
{"type": "vec2", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec3",
"parameter": [
{"type": "vec3", "name": "x"},
{"type": "vec3", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec4",
"parameter": [
{"type": "vec4", "name": "x"},
{"type": "vec4", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec2",
"parameter": [
{"type": "ivec2", "name": "x"},
{"type": "ivec2", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec3",
"parameter": [
{"type": "ivec3", "name": "x"},
{"type": "ivec3", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec4",
"parameter": [
{"type": "ivec4", "name": "x"},
{"type": "ivec4", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec2",
"parameter": [
{"type": "bvec2", "name": "x"},
{"type": "bvec2", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec3",
"parameter": [
{"type": "bvec3", "name": "x"},
{"type": "bvec3", "name": "y"}
]
},
{
"name": "notEqual",
"return_type": "bvec4",
"parameter": [
{"type": "bvec4", "name": "x"},
{"type": "bvec4", "name": "y"}
]
},
{
"name": "any",
"return_type": "bool",
"parameter": [
{"type": "bvec2", "name": "x"}
]
},
{
"name": "any",
"return_type": "bool",
"parameter": [
{"type": "bvec3", "name": "x"}
]
},
{
"name": "any",
"return_type": "bool",
"parameter": [
{"type": "bvec4", "name": "x"}
]
},
{
"name": "all",
"return_type": "bool",
"parameter": [
{"type": "bvec2", "name": "x"}
]
},
{
"name": "all",
"return_type": "bool",
"parameter": [
{"type": "bvec3", "name": "x"}
]
},
{
"name": "all",
"return_type": "bool",
"parameter": [
{"type": "bvec4", "name": "x"}
]
},
{
"name": "not",
"return_type": "bvec2",
"parameter": [
{"type": "bvec2", "name": "x"}
]
},
{
"name": "not",
"return_type": "bvec3",
"parameter": [
{"type": "bvec3", "name": "x"}
]
},
{
"name": "not",
"return_type": "bvec4",
"parameter": [
{"type": "bvec4", "name": "x"}
]
},
{
"name": "texture2D",
"return_type": "vec4",
"parameter": [
{"type": "sampler2D", "name": "sampler"},
{"type": "vec2", "name": "coord"}
]
},
{
"name": "texture2DProj",
"return_type": "vec4",
"parameter": [
{"type": "sampler2D", "name": "sampler"},
{"type": "vec3", "name": "coord"}
]
},
{
"name": "texture2DProj",
"return_type": "vec4",
"parameter": [
{"type": "sampler2D", "name": "sampler"},
{"type": "vec4", "name": "coord"}
]
},
{
"name": "textureCube",
"return_type": "vec4",
"parameter": [
{"type": "samplerCube", "name": "sampler"},
{"type": "vec3", "name": "coord"}
]
},
{
"name": "texture2D",
"return_type": "vec4",
"parameter": [
{"type": "samplerExternalOES", "name": "sampler"},
{"type": "vec2", "name": "coord"}
],
"condition":"resources.OES_EGL_image_external"
},
{
"name": "texture2DProj",
"return_type": "vec4",
"parameter": [
{"type": "samplerExternalOES", "name": "sampler"},
{"type": "vec3", "name": "coord"}
],
"condition":"resources.OES_EGL_image_external"
},
{
"name": "texture2DProj",
"return_type": "vec4",
"parameter": [
{"type": "samplerExternalOES", "name": "sampler"},
{"type": "vec4", "name": "coord"}
],
"condition":"resources.OES_EGL_image_external"
},
{
"name": "texture2DRect",
"return_type": "vec4",
"parameter": [
{"type": "sampler2DRect", "name": "sampler"},
{"type": "vec2", "name": "coord"}
],
"condition":"resources.ARB_texture_rectangle"
},
{
"name": "texture2DRectProj",
"return_type": "vec4",
"parameter": [
{"type": "sampler2DRect", "name": "sampler"},
{"type": "vec3", "name": "coord"}
],
"condition":"resources.ARB_texture_rectangle"
},
{
"name": "texture2DRectProj",
"return_type": "vec4",
"parameter": [
{"type": "sampler2DRect", "name": "sampler"},
{"type": "vec4", "name": "coord"}
],
"condition":"resources.ARB_texture_rectangle"
}
],
"vertex" : [
{
"name": "texture2DLod",
"return_type": "vec4",
"parameter": [
{"type": "sampler2D", "name": "sampler"},
{"type": "vec2", "name": "coord"},
{"type": "float", "name": "lod"}
]
},
{
"name": "texture2DProjLod",
"return_type": "vec4",
"parameter": [
{"type": "sampler2D", "name": "sampler"},
{"type": "vec3", "name": "coord"},
{"type": "float", "name": "lod"}
]
},
{
"name": "texture2DProjLod",
"return_type": "vec4",
"parameter": [
{"type": "sampler2D", "name": "sampler"},
{"type": "vec4", "name": "coord"},
{"type": "float", "name": "lod"}
]
},
{
"name": "textureCubeLod",
"return_type": "vec4",
"parameter": [
{"type": "samplerCube", "name": "sampler"},
{"type": "vec3", "name": "coord"},
{"type": "float", "name": "lod"}
]
}
]
}
#!/usr/bin/python
# Copyright (c) 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.
import json
# This file contains the definitions for all the builtin in JSON format.
json_data = open('builtin_symbols.json')
builtin = json.load(json_data)
# This maps the shader language's types and how to create the TTypes in the symbol table.
ttypeMap = builtin["ttypemap"]
# This is the output that we are going to generate.
output = open('builtin_symbol_table.cpp', 'w');
# The header part of the file.
header = """// 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.
// *************************************************************
// This file is generated by generate_builtin_symbol_table.py.
// * DO NOT HAND MODIFY *
// *************************************************************
#include "compiler/builtin_symbol_table.h"
#include "compiler/SymbolTable.h"
"""
output.write(header)
registerfunc = """
static void builtin1(TSymbolTable* t, TType* rvalue, const char* name, TType* ptype1, const char* pname1)
{
TFunction* f = new TFunction(new TString(name), *rvalue);
TParameter param = {new TString(pname1), ptype1};
f->addParameter(param);
t->insert(*f);
}
static void builtin2(TSymbolTable* t, TType* rvalue, const char* name, TType* ptype1, const char* pname1, TType* ptype2, const char* pname2)
{
TFunction* f = new TFunction(new TString(name), *rvalue);
TParameter param1 = {new TString(pname1), ptype1};
f->addParameter(param1);
TParameter param2 = {new TString(pname2), ptype2};
f->addParameter(param2);
t->insert(*f);
}
static void builtin3(TSymbolTable* t, TType* rvalue, const char* name, TType* ptype1, const char* pname1, TType* ptype2, const char* pname2, TType* ptype3, const char* pname3)
{
TFunction* f = new TFunction(new TString(name), *rvalue);
TParameter param1 = {new TString(pname1), ptype1};
f->addParameter(param1);
TParameter param2 = {new TString(pname2), ptype2};
f->addParameter(param2);
TParameter param3 = {new TString(pname3), ptype3};
f->addParameter(param3);
t->insert(*f);
}
"""
output.write(registerfunc)
# A function that parses the JSON representation of a list of builtin functions.
def parseBuiltin(name):
for func in builtin[name]:
out = ""
indent = " ";
size = len(func['parameter'])
if 'condition' in func:
out += indent + "if (" + func['condition'] + ") {\n"
indent += indent;
out += indent + "builtin" + str(size) + "(t, "
out += ttypeMap[func['return_type']]
out += ", \"" + func['name'] + "\""
paramlist = func['parameter']
paramdef = "";
for param in paramlist:
paramdef += ", "
paramdef += ttypeMap[param['type']]
paramdef += ", \"" + param['name'] + "\""
out += paramdef + ");\n"
if 'condition' in func:
out += " }\n"
output.write(out)
commonHeader = "void InsertBuiltInFunctionsCommon(const ShBuiltInResources& resources, TSymbolTable* t) {\n"
output.write(commonHeader)
parseBuiltin("common")
output.write("}\n\n")
vertexHeader = "void InsertBuiltInFunctionsVertex(const ShBuiltInResources& resources, TSymbolTable* t) {\n"
output.write(vertexHeader)
parseBuiltin("vertex")
output.write("}\n\n")
json_data.close()
output.close()
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