Commit 115b2c4a by Olli Etuaho Committed by Commit Bot

Remove desktop GLSL builtins from symbol lookups

Desktop GLSL builtins can be accessed through functions in BuiltIn_autogen.h. They don't need to be included in symbol table lookups. BUG=angleproject:2267 TEST=angle_unittests Change-Id: I8ba188a0d2584353e34159c2732c9e2bd420c168 Reviewed-on: https://chromium-review.googlesource.com/964447Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent b2c60b1a
......@@ -246,7 +246,7 @@ TIntermSymbol *ReferenceBuiltInVariable(const ImmutableString &name,
int shaderVersion)
{
const TVariable *var =
reinterpret_cast<const TVariable *>(symbolTable.findBuiltIn(name, shaderVersion, true));
reinterpret_cast<const TVariable *>(symbolTable.findBuiltIn(name, shaderVersion));
ASSERT(var);
return new TIntermSymbol(var);
}
......
......@@ -52,7 +52,8 @@ TIntermBlock *EnsureBlock(TIntermNode *node);
TIntermSymbol *ReferenceGlobalVariable(const ImmutableString &name,
const TSymbolTable &symbolTable);
// Note: this can access desktop GLSL built-ins that are hidden from the parser.
// Note: this can't access desktop GLSL built-ins. Those can only be accessed directly through
// BuiltIn_autogen.h.
TIntermSymbol *ReferenceBuiltInVariable(const ImmutableString &name,
const TSymbolTable &symbolTable,
int shaderVersion);
......
......@@ -151,7 +151,7 @@ const TSymbol *TSymbolTable::find(const ImmutableString &name, int shaderVersion
userDefinedLevel--;
}
return findBuiltIn(name, shaderVersion, false);
return findBuiltIn(name, shaderVersion);
}
TFunction *TSymbolTable::findUserDefinedFunction(const ImmutableString &name) const
......@@ -167,11 +167,6 @@ const TSymbol *TSymbolTable::findGlobal(const ImmutableString &name) const
return mTable[0]->find(name);
}
const TSymbol *TSymbolTable::findBuiltIn(const ImmutableString &name, int shaderVersion) const
{
return findBuiltIn(name, shaderVersion, false);
}
bool TSymbolTable::declare(TSymbol *symbol)
{
ASSERT(!mTable.empty());
......
......@@ -98,10 +98,6 @@ class TSymbolTable : angle::NonCopyable, TSymbolTableBase
const TSymbol *findBuiltIn(const ImmutableString &name, int shaderVersion) const;
const TSymbol *findBuiltIn(const ImmutableString &name,
int shaderVersion,
bool includeGLSLBuiltins) const;
void setDefaultPrecision(TBasicType type, TPrecision prec);
// Searches down the precisionStack for a precision qualifier
......
......@@ -12769,36 +12769,9 @@ void TSymbolTable::initializeBuiltInVariables(sh::GLenum shaderType,
TExtension::EXT_geometry_shader, type_gl_PositionGS);
}
const TSymbol *TSymbolTable::findBuiltIn(const ImmutableString &name,
int shaderVersion,
bool includeGLSLBuiltins) const
const TSymbol *TSymbolTable::findBuiltIn(const ImmutableString &name, int shaderVersion) const
{
uint32_t nameHash = name.hash32();
if (includeGLSLBuiltins)
{
if (mShaderType == GL_VERTEX_SHADER)
{
switch (nameHash)
{
case 0x02731c1cu:
{
if (name == BuiltInName::gl_Layer)
{
return &BuiltInVariable::kVar_gl_LayerVS;
}
break;
}
case 0x30c87b17u:
{
if (name == BuiltInName::gl_ViewportIndex)
{
return &BuiltInVariable::kVar_gl_ViewportIndex;
}
break;
}
}
}
}
if (shaderVersion >= 310)
{
switch (nameHash)
......
......@@ -200,8 +200,7 @@ void TSymbolTable::initializeBuiltInVariables(sh::GLenum shaderType,
}}
const TSymbol *TSymbolTable::findBuiltIn(const ImmutableString &name,
int shaderVersion,
bool includeGLSLBuiltins) const
int shaderVersion) const
{{
uint32_t nameHash = name.hash32();
{get_builtin}
......@@ -300,12 +299,10 @@ def get_basic_mangled_name(basic):
return chr(ord('A') + index)
return chr(ord('a') + index - 26)
levels = ['GLSL_BUILTINS', 'ESSL3_1_BUILTINS', 'ESSL3_BUILTINS', 'ESSL1_BUILTINS', 'COMMON_BUILTINS']
levels = ['ESSL3_1_BUILTINS', 'ESSL3_BUILTINS', 'ESSL1_BUILTINS', 'COMMON_BUILTINS']
def get_shader_version_condition_for_level(level):
if level == 'GLSL_BUILTINS':
return 'includeGLSLBuiltins'
elif level == 'ESSL3_1_BUILTINS':
if level == 'ESSL3_1_BUILTINS':
return 'shaderVersion >= 310'
elif level == 'ESSL3_BUILTINS':
return 'shaderVersion >= 300'
......@@ -1019,12 +1016,13 @@ def process_single_variable_group(condition, group_name, group):
"""
get_variable_definitions.append(template_get_variable_definition.format(**template_args))
template_name_if = """if (name == BuiltInName::{name})
if level != 'GLSL_BUILTINS':
template_name_if = """if (name == BuiltInName::{name})
{{
return &BuiltInVariable::kVar_{name_with_suffix};
}}"""
name_if = template_name_if.format(**template_args)
get_builtin_if_statements.add_obj(level, condition, template_args['name'], {'hash_matched_code': name_if})
name_if = template_name_if.format(**template_args)
get_builtin_if_statements.add_obj(level, condition, template_args['name'], {'hash_matched_code': name_if})
if is_member:
get_condition = condition
......@@ -1042,13 +1040,14 @@ def process_single_variable_group(condition, group_name, group):
template_declare_member_variable = '{class} *mVar_{name_with_suffix} = nullptr;'
declare_member_variables.append(template_declare_member_variable.format(**template_args))
template_name_if = """if (name == BuiltInName::{name})
if level != 'GLSL_BUILTINS':
template_name_if = """if (name == BuiltInName::{name})
{{{condition_comment}
return mVar_{name_with_suffix};
}}"""
name_if = template_name_if.format(**template_args)
get_builtin_if_statements.add_obj(level, get_condition, variable_name, {'hash_matched_code': name_if})
name_if = template_name_if.format(**template_args)
get_builtin_if_statements.add_obj(level, get_condition, variable_name, {'hash_matched_code': name_if})
id_counter += 1
......
......@@ -162,8 +162,6 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x2c29f04du, ImmutableString("any").hash32());
ASSERT_EQ(0x13254bc4u, ImmutableString("all").hash32());
ASSERT_EQ(0x29b19c8au, ImmutableString("not").hash32());
ASSERT_EQ(0x30c87b17u, ImmutableString("gl_ViewportIndex").hash32());
ASSERT_EQ(0x02731c1cu, ImmutableString("gl_Layer").hash32());
ASSERT_EQ(0xf3de0717u, ImmutableString("frexp(0B0C").hash32());
ASSERT_EQ(0xa30b98d3u, ImmutableString("frexp(1B1C").hash32());
ASSERT_EQ(0x17aa3bbfu, ImmutableString("frexp(2B2C").hash32());
......@@ -384,6 +382,7 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0xc91ada96u, ImmutableString("gl_PrimitiveIDIn").hash32());
ASSERT_EQ(0xfc2907ccu, ImmutableString("gl_InvocationID").hash32());
ASSERT_EQ(0x863d719du, ImmutableString("gl_PrimitiveID").hash32());
ASSERT_EQ(0x02731c1cu, ImmutableString("gl_Layer").hash32());
ASSERT_EQ(0xe29142f0u, ImmutableString("gl_PerVertex").hash32());
ASSERT_EQ(0x02c4bde0u, ImmutableString("gl_Position").hash32());
ASSERT_EQ(0x556a8827u, ImmutableString("sinh(0B").hash32());
......
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