Commit e79d0f86 by Olli Etuaho Committed by Commit Bot

Rely on hash to check for some mangled name matches

When we are looking up a function with only a few parameters, we can optimize the lookup by relying on the information encoded in the hash value. There's often only one list of parameters with the same function name and mangled name length that results in a matching hash, so we don't actually need to compare the full mangled name. We can just compare 1) the hash value of the mangled name 2) the mangled name length 3) the function name to make sure that the mangled name matches the mangled name of the function. This decreases the binary size since we don't need store as many mangled names of built-in functions. Effect on symbol lookup speed is marginal. BUG=angleproject:2267 BUG=chromium:823856 TEST=angle_unittests Change-Id: I3ef41d943209509d4e8e6ece14ebad7e2677abc6 Reviewed-on: https://chromium-review.googlesource.com/973242Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent 44861c48
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -527,6 +527,35 @@ class TType: ...@@ -527,6 +527,35 @@ class TType:
raise Exception('Unrecognized type: ' + str(glsl_header_type)) raise Exception('Unrecognized type: ' + str(glsl_header_type))
ttype_mangled_name_variants = []
for basic_type in basic_types_enumeration:
primary_sizes = [1]
secondary_sizes = [1]
if basic_type in ['Float', 'Int', 'UInt', 'Bool']:
primary_sizes = [1, 2, 3, 4]
if basic_type == 'Float':
secondary_sizes = [1, 2, 3, 4]
for primary_size in primary_sizes:
for secondary_size in secondary_sizes:
type = TType({'basic': basic_type, 'primarySize': primary_size, 'secondarySize': secondary_size})
ttype_mangled_name_variants.append(type.get_mangled_name())
def gen_parameters_mangled_name_variants(str_len):
if str_len % 2 != 0:
raise Exception('Expecting parameters mangled name length to be divisible by two')
num_variants = pow(len(ttype_mangled_name_variants), str_len / 2)
for variant_id in xrange(num_variants):
variant = ''
while (len(variant)) < str_len:
parameter_index = len(variant) / 2
parameter_variant_index = variant_id
for i in xrange(parameter_index):
parameter_variant_index = parameter_variant_index / len(ttype_mangled_name_variants)
parameter_variant_index = parameter_variant_index % len(ttype_mangled_name_variants)
variant += ttype_mangled_name_variants[parameter_variant_index]
yield variant
def get_parsed_functions(): def get_parsed_functions():
def parse_function_parameters(parameters): def parse_function_parameters(parameters):
...@@ -656,15 +685,16 @@ variable_name_count = {} ...@@ -656,15 +685,16 @@ variable_name_count = {}
id_counter = 0 id_counter = 0
def hash32(str): def hash32(str, save_test = True):
fnvOffsetBasis = 0x811c9dc5 fnvOffsetBasis = 0x811c9dc5
fnvPrime = 16777619 fnvPrime = 16777619
hash = fnvOffsetBasis hash = fnvOffsetBasis
for c in str: for c in str:
hash = hash ^ ord(c) hash = hash ^ ord(c)
hash = hash * fnvPrime & 0xffffffff hash = hash * fnvPrime & 0xffffffff
sanity_check = ' ASSERT_EQ(0x{hash}u, ImmutableString("{str}").hash32());'.format(hash = ('%08x' % hash), str = str) if save_test:
script_generated_hash_tests.update({sanity_check: None}) sanity_check = ' ASSERT_EQ(0x{hash}u, ImmutableString("{str}").hash32());'.format(hash = ('%08x' % hash), str = str)
script_generated_hash_tests.update({sanity_check: None})
return hash return hash
def get_suffix(props): def get_suffix(props):
...@@ -706,6 +736,25 @@ def get_function_mangled_name(function_name, parameters): ...@@ -706,6 +736,25 @@ def get_function_mangled_name(function_name, parameters):
mangled_name += param.get_mangled_name() mangled_name += param.get_mangled_name()
return mangled_name return mangled_name
def mangled_name_hash_can_collide_with_different_parameters(function_variant_props):
# We exhaustively search through all possible lists of parameters and see if any other mangled
# name has the same hash.
mangled_name = function_variant_props['mangled_name']
hash = hash32(mangled_name)
mangled_name_prefix = function_variant_props['name'] + '('
parameters_mangled_name_len = len(mangled_name) - len(mangled_name_prefix)
parameters_mangled_name = mangled_name[len(mangled_name_prefix):]
if (parameters_mangled_name_len > 4):
# In this case a struct parameter or an array parameter would fit to the space reserved for
# parameter mangled names. This increases the complexity of searching for hash collisions
# considerably, so rather than doing it we just conservatively assume that a hash collision
# may be possible.
return True
for variant in gen_parameters_mangled_name_variants(parameters_mangled_name_len):
if parameters_mangled_name != variant and hash32(mangled_name_prefix + variant, False) == hash:
return True
return False
def get_unique_identifier_name(function_name, parameters): def get_unique_identifier_name(function_name, parameters):
unique_name = function_name + '_' unique_name = function_name + '_'
for param in parameters: for param in parameters:
...@@ -831,6 +880,7 @@ def process_single_function_group(condition, group_name, group): ...@@ -831,6 +880,7 @@ def process_single_function_group(condition, group_name, group):
parameters = get_parameters(function_props) parameters = get_parameters(function_props)
template_args['unique_name'] = get_unique_identifier_name(template_args['name_with_suffix'], parameters) template_args['unique_name'] = get_unique_identifier_name(template_args['name_with_suffix'], parameters)
template_args['unique_name_no_parameters'] = get_unique_identifier_name(template_args['name_with_suffix'], [])
if template_args['unique_name'] in defined_function_variants: if template_args['unique_name'] in defined_function_variants:
continue continue
...@@ -839,13 +889,11 @@ def process_single_function_group(condition, group_name, group): ...@@ -839,13 +889,11 @@ def process_single_function_group(condition, group_name, group):
template_args['param_count'] = len(parameters) template_args['param_count'] = len(parameters)
template_args['return_type'] = function_props['returnType'].get_statictype_string() template_args['return_type'] = function_props['returnType'].get_statictype_string()
template_args['mangled_name'] = get_function_mangled_name(function_name, parameters) template_args['mangled_name'] = get_function_mangled_name(function_name, parameters)
template_args['mangled_name_length'] = len(template_args['mangled_name'])
template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {unique_name} = TSymbolUniqueId({id});' template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {unique_name} = TSymbolUniqueId({id});'
builtin_id_declarations.append(template_builtin_id_declaration.format(**template_args)) builtin_id_declarations.append(template_builtin_id_declaration.format(**template_args))
template_mangled_name_declaration = 'constexpr const ImmutableString {unique_name}("{mangled_name}");'
name_declarations.add(template_mangled_name_declaration.format(**template_args))
parameters_list = [] parameters_list = []
for param in parameters: for param in parameters:
unique_param_name = get_variable_name_to_store_parameter(param) unique_param_name = get_variable_name_to_store_parameter(param)
...@@ -876,7 +924,21 @@ def process_single_function_group(condition, group_name, group): ...@@ -876,7 +924,21 @@ def process_single_function_group(condition, group_name, group):
template_function_declaration = 'constexpr const TFunction kFunction_{unique_name}(BuiltInId::{unique_name}, BuiltInName::{name_with_suffix}, TExtension::{extension}, BuiltInParameters::{parameters_var_name}, {param_count}, {return_type}, EOp{op}, {known_to_not_have_side_effects});' template_function_declaration = 'constexpr const TFunction kFunction_{unique_name}(BuiltInId::{unique_name}, BuiltInName::{name_with_suffix}, TExtension::{extension}, BuiltInParameters::{parameters_var_name}, {param_count}, {return_type}, EOp{op}, {known_to_not_have_side_effects});'
function_declarations.append(template_function_declaration.format(**template_args)) function_declarations.append(template_function_declaration.format(**template_args))
template_mangled_if = """if (name == BuiltInName::{unique_name}) # If we can make sure that there's no other mangled name with the same length, function
# name and hash, then we can only check the mangled name length and the function name
# instead of checking the whole mangled name.
template_mangled_if = ''
if mangled_name_hash_can_collide_with_different_parameters(template_args):
template_mangled_name_declaration = 'constexpr const ImmutableString {unique_name}("{mangled_name}");'
name_declarations.add(template_mangled_name_declaration.format(**template_args))
template_mangled_if = """if (name == BuiltInName::{unique_name})
{{
return &BuiltInFunction::kFunction_{unique_name};
}}"""
else:
template_mangled_name_declaration = 'constexpr const ImmutableString {unique_name_no_parameters}("{name}(");'
name_declarations.add(template_mangled_name_declaration.format(**template_args))
template_mangled_if = """if (name.length() == {mangled_name_length} && name.beginsWith(BuiltInName::{unique_name_no_parameters}))
{{ {{
return &BuiltInFunction::kFunction_{unique_name}; return &BuiltInFunction::kFunction_{unique_name};
}}""" }}"""
......
...@@ -16,375 +16,42 @@ namespace sh ...@@ -16,375 +16,42 @@ namespace sh
TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
{ {
ASSERT_EQ(0xa30cdef4u, ImmutableString("frexp").hash32()); ASSERT_EQ(0x5ff73ab9u, ImmutableString("radians(0B").hash32());
ASSERT_EQ(0x8c63f160u, ImmutableString("ldexp").hash32()); ASSERT_EQ(0xb5f58384u, ImmutableString("radians(1B").hash32());
ASSERT_EQ(0xae0f4e53u, ImmutableString("packUnorm4x8").hash32()); ASSERT_EQ(0x8ff3091bu, ImmutableString("radians(2B").hash32());
ASSERT_EQ(0x4d4a19b5u, ImmutableString("packSnorm4x8").hash32()); ASSERT_EQ(0x6df094feu, ImmutableString("radians(3B").hash32());
ASSERT_EQ(0x33b8cbf8u, ImmutableString("unpackUnorm4x8").hash32()); ASSERT_EQ(0x57cd6fecu, ImmutableString("degrees(0B").hash32());
ASSERT_EQ(0x7c07f1eeu, ImmutableString("unpackSnorm4x8").hash32()); ASSERT_EQ(0x81cff0a1u, ImmutableString("degrees(1B").hash32());
ASSERT_EQ(0xf50788fdu, ImmutableString("bitfieldExtract").hash32()); ASSERT_EQ(0x0fc88166u, ImmutableString("degrees(2B").hash32());
ASSERT_EQ(0xf81301b9u, ImmutableString("bitfieldInsert").hash32()); ASSERT_EQ(0x31caf583u, ImmutableString("degrees(3B").hash32());
ASSERT_EQ(0xe5c5029au, ImmutableString("bitfieldReverse").hash32()); ASSERT_EQ(0x8a07b54du, ImmutableString("sin(0B").hash32());
ASSERT_EQ(0x2568837fu, ImmutableString("bitCount").hash32()); ASSERT_EQ(0x60053498u, ImmutableString("sin(1B").hash32());
ASSERT_EQ(0x310cbdf3u, ImmutableString("findLSB").hash32()); ASSERT_EQ(0xba0383afu, ImmutableString("sin(2B").hash32());
ASSERT_EQ(0x7ba9e270u, ImmutableString("findMSB").hash32()); ASSERT_EQ(0x98010f92u, ImmutableString("sin(3B").hash32());
ASSERT_EQ(0xca0f40eeu, ImmutableString("uaddCarry").hash32()); ASSERT_EQ(0xcff55532u, ImmutableString("cos(0B").hash32());
ASSERT_EQ(0xb82cbfe3u, ImmutableString("usubBorrow").hash32()); ASSERT_EQ(0xf1f7c94fu, ImmutableString("cos(1B").hash32());
ASSERT_EQ(0xebfef903u, ImmutableString("umulExtended").hash32()); ASSERT_EQ(0x17fa43b8u, ImmutableString("cos(2B").hash32());
ASSERT_EQ(0x55fde64fu, ImmutableString("imulExtended").hash32()); ASSERT_EQ(0x41fcc46du, ImmutableString("cos(3B").hash32());
ASSERT_EQ(0x44a612d1u, ImmutableString("texelFetch").hash32()); ASSERT_EQ(0xee8ac486u, ImmutableString("tan(0B").hash32());
ASSERT_EQ(0xa3a03233u, ImmutableString("textureGather").hash32()); ASSERT_EQ(0x108d38a3u, ImmutableString("tan(1B").hash32());
ASSERT_EQ(0xb24338c0u, ImmutableString("textureGatherOffset").hash32()); ASSERT_EQ(0xb6907c8cu, ImmutableString("tan(2B").hash32());
ASSERT_EQ(0xc1e02fa4u, ImmutableString("atomicCounter").hash32()); ASSERT_EQ(0xe092fd41u, ImmutableString("tan(3B").hash32());
ASSERT_EQ(0x666490f9u, ImmutableString("atomicCounterIncrement").hash32()); ASSERT_EQ(0x95a6e964u, ImmutableString("asin(0B").hash32());
ASSERT_EQ(0xd651bc5du, ImmutableString("atomicCounterDecrement").hash32()); ASSERT_EQ(0xbfa96a19u, ImmutableString("asin(1B").hash32());
ASSERT_EQ(0x026813a3u, ImmutableString("atomicAdd").hash32()); ASSERT_EQ(0xcda2c45eu, ImmutableString("asin(2B").hash32());
ASSERT_EQ(0x23647d3cu, ImmutableString("atomicMin").hash32()); ASSERT_EQ(0xefa5387bu, ImmutableString("asin(3B").hash32());
ASSERT_EQ(0x1150d92eu, ImmutableString("atomicMax").hash32()); ASSERT_EQ(0x5f31e247u, ImmutableString("acos(0B").hash32());
ASSERT_EQ(0xe676f219u, ImmutableString("atomicAnd").hash32()); ASSERT_EQ(0x3d2f6e2au, ImmutableString("acos(1B").hash32());
ASSERT_EQ(0xd2b1c53du, ImmutableString("atomicOr").hash32()); ASSERT_EQ(0x2f3613e5u, ImmutableString("acos(2B").hash32());
ASSERT_EQ(0xbfd854b5u, ImmutableString("atomicXor").hash32()); ASSERT_EQ(0x05339330u, ImmutableString("acos(3B").hash32());
ASSERT_EQ(0xb94d85ddu, ImmutableString("atomicExchange").hash32()); ASSERT_EQ(0x82c5e6d5u, ImmutableString("atan(0B0B").hash32());
ASSERT_EQ(0xf3bd9210u, ImmutableString("atomicCompSwap").hash32()); ASSERT_EQ(0x54d4c019u, ImmutableString("atan(1B1B").hash32());
ASSERT_EQ(0x6ef2b1c3u, ImmutableString("imageSize").hash32()); ASSERT_EQ(0xdeb59d35u, ImmutableString("atan(2B2B").hash32());
ASSERT_EQ(0x493c8c52u, ImmutableString("imageLoad").hash32()); ASSERT_EQ(0x0548e241u, ImmutableString("atan(3B3B").hash32());
ASSERT_EQ(0x4f0e8e9bu, ImmutableString("imageStore").hash32()); ASSERT_EQ(0x8e3d93a7u, ImmutableString("atan(0B").hash32());
ASSERT_EQ(0x3815d075u, ImmutableString("memoryBarrier").hash32()); ASSERT_EQ(0x6c3b1f8au, ImmutableString("atan(1B").hash32());
ASSERT_EQ(0xb5e7ff54u, ImmutableString("memoryBarrierAtomicCounter").hash32()); ASSERT_EQ(0x5e435845u, ImmutableString("atan(2B").hash32());
ASSERT_EQ(0x6fdf21cbu, ImmutableString("memoryBarrierBuffer").hash32()); ASSERT_EQ(0xb4400e10u, ImmutableString("atan(3B").hash32());
ASSERT_EQ(0x4dafa4aau, ImmutableString("memoryBarrierImage").hash32());
ASSERT_EQ(0x3d693fa0u, ImmutableString("barrier").hash32());
ASSERT_EQ(0xe85fa9e4u, ImmutableString("memoryBarrierShared").hash32());
ASSERT_EQ(0x7afaf16eu, ImmutableString("groupMemoryBarrier").hash32());
ASSERT_EQ(0xb5d34358u, ImmutableString("EmitVertex").hash32());
ASSERT_EQ(0xb413b257u, ImmutableString("EndPrimitive").hash32());
ASSERT_EQ(0x10d2583fu, ImmutableString("sinh").hash32());
ASSERT_EQ(0xf45c461cu, ImmutableString("cosh").hash32());
ASSERT_EQ(0x092855d0u, ImmutableString("tanh").hash32());
ASSERT_EQ(0xbab19e4au, ImmutableString("asinh").hash32());
ASSERT_EQ(0xedf2c855u, ImmutableString("acosh").hash32());
ASSERT_EQ(0x07275075u, ImmutableString("atanh").hash32());
ASSERT_EQ(0x2a48023bu, ImmutableString("abs").hash32());
ASSERT_EQ(0x0cbc8ba4u, ImmutableString("sign").hash32());
ASSERT_EQ(0xd55e61e5u, ImmutableString("trunc").hash32());
ASSERT_EQ(0x4f0be23bu, ImmutableString("round").hash32());
ASSERT_EQ(0xa4639127u, ImmutableString("roundEven").hash32());
ASSERT_EQ(0xc98f4557u, ImmutableString("min").hash32());
ASSERT_EQ(0xd7a2e319u, ImmutableString("max").hash32());
ASSERT_EQ(0xa82efcbcu, ImmutableString("clamp").hash32());
ASSERT_EQ(0xd78f5b61u, ImmutableString("mix").hash32());
ASSERT_EQ(0xeb6ede7fu, ImmutableString("modf").hash32());
ASSERT_EQ(0xb1b3c06au, ImmutableString("isnan").hash32());
ASSERT_EQ(0x26ac11d8u, ImmutableString("isinf").hash32());
ASSERT_EQ(0xb15a3cc9u, ImmutableString("floatBitsToInt").hash32());
ASSERT_EQ(0xc8575388u, ImmutableString("floatBitsToUint").hash32());
ASSERT_EQ(0xfc501e17u, ImmutableString("intBitsToFloat").hash32());
ASSERT_EQ(0xc29ffa7eu, ImmutableString("uintBitsToFloat").hash32());
ASSERT_EQ(0x4326f80au, ImmutableString("packSnorm2x16").hash32());
ASSERT_EQ(0x6ff78d04u, ImmutableString("packUnorm2x16").hash32());
ASSERT_EQ(0x5bd36438u, ImmutableString("packHalf2x16").hash32());
ASSERT_EQ(0x6e02ba1bu, ImmutableString("unpackSnorm2x16").hash32());
ASSERT_EQ(0x25680679u, ImmutableString("unpackUnorm2x16").hash32());
ASSERT_EQ(0x28cedbc3u, ImmutableString("unpackHalf2x16").hash32());
ASSERT_EQ(0xd5f05125u, ImmutableString("matrixCompMult").hash32());
ASSERT_EQ(0x8f8617abu, ImmutableString("outerProduct").hash32());
ASSERT_EQ(0xc03183c0u, ImmutableString("transpose").hash32());
ASSERT_EQ(0x767e36c0u, ImmutableString("determinant").hash32());
ASSERT_EQ(0xb201f283u, ImmutableString("inverse").hash32());
ASSERT_EQ(0x05fc75c3u, ImmutableString("lessThan").hash32());
ASSERT_EQ(0x0491f109u, ImmutableString("lessThanEqual").hash32());
ASSERT_EQ(0x04644cdeu, ImmutableString("greaterThan").hash32());
ASSERT_EQ(0xed7dc722u, ImmutableString("greaterThanEqual").hash32());
ASSERT_EQ(0x2f7508efu, ImmutableString("equal").hash32());
ASSERT_EQ(0x2485bbbeu, ImmutableString("notEqual").hash32());
ASSERT_EQ(0x3c6468f4u, ImmutableString("texture").hash32());
ASSERT_EQ(0x94b08f7fu, ImmutableString("textureProj").hash32());
ASSERT_EQ(0x023feff3u, ImmutableString("textureLod").hash32());
ASSERT_EQ(0xc73e788du, ImmutableString("textureSize").hash32());
ASSERT_EQ(0xb755b482u, ImmutableString("textureProjLod").hash32());
ASSERT_EQ(0x33a56e6cu, ImmutableString("textureGrad").hash32());
ASSERT_EQ(0x7bf8de3bu, ImmutableString("textureProjGrad").hash32());
ASSERT_EQ(0x88c917cfu, ImmutableString("textureOffset").hash32());
ASSERT_EQ(0xa5212424u, ImmutableString("textureProjOffset").hash32());
ASSERT_EQ(0x39d34980u, ImmutableString("textureLodOffset").hash32());
ASSERT_EQ(0x1535b7a5u, ImmutableString("textureProjLodOffset").hash32());
ASSERT_EQ(0x12b2640eu, ImmutableString("texelFetchOffset").hash32());
ASSERT_EQ(0x6b0ca057u, ImmutableString("textureGradOffset").hash32());
ASSERT_EQ(0x8b45ed38u, ImmutableString("textureProjGradOffset").hash32());
ASSERT_EQ(0xa6789406u, ImmutableString("rgb_2_yuv").hash32());
ASSERT_EQ(0xc7818fa2u, ImmutableString("yuv_2_rgb").hash32());
ASSERT_EQ(0xc8859a8bu, ImmutableString("dFdx").hash32());
ASSERT_EQ(0xc78598f8u, ImmutableString("dFdy").hash32());
ASSERT_EQ(0x4b6e55d3u, ImmutableString("fwidth").hash32());
ASSERT_EQ(0x18a9c042u, ImmutableString("texture2D").hash32());
ASSERT_EQ(0xc7cb8969u, ImmutableString("texture2DProj").hash32());
ASSERT_EQ(0xfece2a39u, ImmutableString("textureCube").hash32());
ASSERT_EQ(0x3d4abf10u, ImmutableString("texture2DRect").hash32());
ASSERT_EQ(0x6dc0e8e3u, ImmutableString("texture2DRectProj").hash32());
ASSERT_EQ(0xd1836639u, ImmutableString("texture2DGradEXT").hash32());
ASSERT_EQ(0x4040698cu, ImmutableString("texture2DProjGradEXT").hash32());
ASSERT_EQ(0x1d18f29cu, ImmutableString("textureCubeGradEXT").hash32());
ASSERT_EQ(0x7150ceb8u, ImmutableString("texture2DLodEXT").hash32());
ASSERT_EQ(0xbacaedf7u, ImmutableString("texture2DProjLodEXT").hash32());
ASSERT_EQ(0x7309b987u, ImmutableString("textureCubeLodEXT").hash32());
ASSERT_EQ(0xfa79f401u, ImmutableString("texture2DLod").hash32());
ASSERT_EQ(0x30ed9cfcu, ImmutableString("texture2DProjLod").hash32());
ASSERT_EQ(0xb35e342cu, ImmutableString("textureCubeLod").hash32());
ASSERT_EQ(0x856a57e1u, ImmutableString("radians").hash32());
ASSERT_EQ(0xaf5442eeu, ImmutableString("degrees").hash32());
ASSERT_EQ(0xe0302a4du, ImmutableString("sin").hash32());
ASSERT_EQ(0xfb8de29cu, ImmutableString("cos").hash32());
ASSERT_EQ(0x9cf73498u, ImmutableString("tan").hash32());
ASSERT_EQ(0xfeae7ea6u, ImmutableString("asin").hash32());
ASSERT_EQ(0x3c01df1fu, ImmutableString("acos").hash32());
ASSERT_EQ(0x0678cabfu, ImmutableString("atan").hash32());
ASSERT_EQ(0x58336ad5u, ImmutableString("pow").hash32());
ASSERT_EQ(0x72a68728u, ImmutableString("exp").hash32());
ASSERT_EQ(0x3f515151u, ImmutableString("log").hash32());
ASSERT_EQ(0x9626adeeu, ImmutableString("exp2").hash32());
ASSERT_EQ(0x10031ed9u, ImmutableString("log2").hash32());
ASSERT_EQ(0x7dee3bcfu, ImmutableString("sqrt").hash32());
ASSERT_EQ(0xe8b548a5u, ImmutableString("inversesqrt").hash32());
ASSERT_EQ(0xb8e70c1du, ImmutableString("floor").hash32());
ASSERT_EQ(0x62e4e208u, ImmutableString("ceil").hash32());
ASSERT_EQ(0xeef29a67u, ImmutableString("fract").hash32());
ASSERT_EQ(0xdf9e7283u, ImmutableString("mod").hash32());
ASSERT_EQ(0xc7441a0fu, ImmutableString("step").hash32());
ASSERT_EQ(0x95964e7du, ImmutableString("smoothstep").hash32());
ASSERT_EQ(0x83d03615u, ImmutableString("length").hash32());
ASSERT_EQ(0x2eb31462u, ImmutableString("distance").hash32());
ASSERT_EQ(0xd3689f20u, ImmutableString("dot").hash32());
ASSERT_EQ(0x29f5189bu, ImmutableString("cross").hash32());
ASSERT_EQ(0xce79296cu, ImmutableString("normalize").hash32());
ASSERT_EQ(0x5fd55fe1u, ImmutableString("faceforward").hash32());
ASSERT_EQ(0x92c778aau, ImmutableString("reflect").hash32());
ASSERT_EQ(0x066c705cu, ImmutableString("refract").hash32());
ASSERT_EQ(0x2c29f04du, ImmutableString("any").hash32());
ASSERT_EQ(0x13254bc4u, ImmutableString("all").hash32());
ASSERT_EQ(0x29b19c8au, ImmutableString("not").hash32());
ASSERT_EQ(0xf3de0717u, ImmutableString("frexp(0B0C").hash32());
ASSERT_EQ(0xa30b98d3u, ImmutableString("frexp(1B1C").hash32());
ASSERT_EQ(0x17aa3bbfu, ImmutableString("frexp(2B2C").hash32());
ASSERT_EQ(0x7dbee433u, ImmutableString("frexp(3B3C").hash32());
ASSERT_EQ(0x57b9431bu, ImmutableString("ldexp(0B0C").hash32());
ASSERT_EQ(0x124f3157u, ImmutableString("ldexp(1B1C").hash32());
ASSERT_EQ(0x94d22cc3u, ImmutableString("ldexp(2B2C").hash32());
ASSERT_EQ(0xfae6d537u, ImmutableString("ldexp(3B3C").hash32());
ASSERT_EQ(0x82b86afcu, ImmutableString("packUnorm4x8(3B").hash32());
ASSERT_EQ(0x6d7cd09au, ImmutableString("packSnorm4x8(3B").hash32());
ASSERT_EQ(0x7e0ed3ccu, ImmutableString("unpackUnorm4x8(0D").hash32());
ASSERT_EQ(0x2bceb1c6u, ImmutableString("unpackSnorm4x8(0D").hash32());
ASSERT_EQ(0x2c65fc52u, ImmutableString("bitfieldExtract(0C0C0C").hash32());
ASSERT_EQ(0x301e7aa3u, ImmutableString("bitfieldExtract(1C0C0C").hash32());
ASSERT_EQ(0x1bc77874u, ImmutableString("bitfieldExtract(2C0C0C").hash32());
ASSERT_EQ(0x2e198dddu, ImmutableString("bitfieldExtract(3C0C0C").hash32());
ASSERT_EQ(0x1ef52e53u, ImmutableString("bitfieldExtract(0D0C0C").hash32());
ASSERT_EQ(0xbecd46a2u, ImmutableString("bitfieldExtract(1D0C0C").hash32());
ASSERT_EQ(0x50828f41u, ImmutableString("bitfieldExtract(2D0C0C").hash32());
ASSERT_EQ(0x26e63818u, ImmutableString("bitfieldExtract(3D0C0C").hash32());
ASSERT_EQ(0xbcfd7f73u, ImmutableString("bitfieldInsert(0C0C0C0C").hash32());
ASSERT_EQ(0x221a7f03u, ImmutableString("bitfieldInsert(1C1C0C0C").hash32());
ASSERT_EQ(0xf4fc8897u, ImmutableString("bitfieldInsert(2C2C0C0C").hash32());
ASSERT_EQ(0x100c00dfu, ImmutableString("bitfieldInsert(3C3C0C0C").hash32());
ASSERT_EQ(0x6bd9dd3bu, ImmutableString("bitfieldInsert(0D0D0C0C").hash32());
ASSERT_EQ(0x3d7510bbu, ImmutableString("bitfieldInsert(1D1D0C0C").hash32());
ASSERT_EQ(0x70f71a0bu, ImmutableString("bitfieldInsert(2D2D0C0C").hash32());
ASSERT_EQ(0x0a15fba3u, ImmutableString("bitfieldInsert(3D3D0C0C").hash32());
ASSERT_EQ(0x380ee623u, ImmutableString("bitfieldReverse(0C").hash32());
ASSERT_EQ(0xe0122d32u, ImmutableString("bitfieldReverse(1C").hash32());
ASSERT_EQ(0xf009f79du, ImmutableString("bitfieldReverse(2C").hash32());
ASSERT_EQ(0x100c6894u, ImmutableString("bitfieldReverse(3C").hash32());
ASSERT_EQ(0x3d0eee02u, ImmutableString("bitfieldReverse(0D").hash32());
ASSERT_EQ(0xdb122553u, ImmutableString("bitfieldReverse(1D").hash32());
ASSERT_EQ(0xe909ec98u, ImmutableString("bitfieldReverse(2D").hash32());
ASSERT_EQ(0x0f0c6701u, ImmutableString("bitfieldReverse(3D").hash32());
ASSERT_EQ(0x3827bbd4u, ImmutableString("bitCount(0C").hash32());
ASSERT_EQ(0x18254addu, ImmutableString("bitCount(1C").hash32());
ASSERT_EQ(0x082bed72u, ImmutableString("bitCount(2C").hash32());
ASSERT_EQ(0x602a3963u, ImmutableString("bitCount(3C").hash32());
ASSERT_EQ(0x3727ba41u, ImmutableString("bitCount(0D").hash32());
ASSERT_EQ(0x11253fd8u, ImmutableString("bitCount(1D").hash32());
ASSERT_EQ(0x032be593u, ImmutableString("bitCount(2D").hash32());
ASSERT_EQ(0x652a4142u, ImmutableString("bitCount(3D").hash32());
ASSERT_EQ(0xc1b44a60u, ImmutableString("findLSB(0C").hash32());
ASSERT_EQ(0xa1b1d969u, ImmutableString("findLSB(1C").hash32());
ASSERT_EQ(0x91ba0efeu, ImmutableString("findLSB(2C").hash32());
ASSERT_EQ(0xe9b6c7efu, ImmutableString("findLSB(3C").hash32());
ASSERT_EQ(0xc8b45565u, ImmutableString("findLSB(0D").hash32());
ASSERT_EQ(0xa2b1dafcu, ImmutableString("findLSB(1D").hash32());
ASSERT_EQ(0x94ba13b7u, ImmutableString("findLSB(2D").hash32());
ASSERT_EQ(0xe6b6c336u, ImmutableString("findLSB(3D").hash32());
ASSERT_EQ(0x129034f1u, ImmutableString("findMSB(0C").hash32());
ASSERT_EQ(0x3292a5e8u, ImmutableString("findMSB(1C").hash32());
ASSERT_EQ(0xda9459f7u, ImmutableString("findMSB(2C").hash32());
ASSERT_EQ(0x0296d786u, ImmutableString("findMSB(3C").hash32());
ASSERT_EQ(0x13903684u, ImmutableString("findMSB(0D").hash32());
ASSERT_EQ(0x3992b0edu, ImmutableString("findMSB(1D").hash32());
ASSERT_EQ(0xd794553eu, ImmutableString("findMSB(2D").hash32());
ASSERT_EQ(0x0596dc3fu, ImmutableString("findMSB(3D").hash32());
ASSERT_EQ(0x76d26c06u, ImmutableString("uaddCarry(0D0D0D").hash32());
ASSERT_EQ(0x8638ea07u, ImmutableString("uaddCarry(1D1D1D").hash32());
ASSERT_EQ(0x830df594u, ImmutableString("uaddCarry(2D2D2D").hash32());
ASSERT_EQ(0x859069e5u, ImmutableString("uaddCarry(3D3D3D").hash32());
ASSERT_EQ(0xee0c9f85u, ImmutableString("usubBorrow(0D0D0D").hash32());
ASSERT_EQ(0x56a8a0b4u, ImmutableString("usubBorrow(1D1D1D").hash32());
ASSERT_EQ(0x2d76ad27u, ImmutableString("usubBorrow(2D2D2D").hash32());
ASSERT_EQ(0x1e102f26u, ImmutableString("usubBorrow(3D3D3D").hash32());
ASSERT_EQ(0x2691af51u, ImmutableString("umulExtended(0D0D0D0D").hash32());
ASSERT_EQ(0x6b51f121u, ImmutableString("umulExtended(1D1D1D1D").hash32());
ASSERT_EQ(0x4d3ff831u, ImmutableString("umulExtended(2D2D2D2D").hash32());
ASSERT_EQ(0x282a4a31u, ImmutableString("umulExtended(3D3D3D3D").hash32());
ASSERT_EQ(0x84d951b5u, ImmutableString("imulExtended(0C0C0C0C").hash32());
ASSERT_EQ(0xcc193b45u, ImmutableString("imulExtended(1C1C1C1C").hash32());
ASSERT_EQ(0x0a58432du, ImmutableString("imulExtended(2C2C2C2C").hash32());
ASSERT_EQ(0x8277ae4du, ImmutableString("imulExtended(3C3C3C3C").hash32());
ASSERT_EQ(0x2e205f43u, ImmutableString("texelFetch(0O1C0C").hash32());
ASSERT_EQ(0x83a9e786u, ImmutableString("texelFetch(0T1C0C").hash32());
ASSERT_EQ(0xbbdb8c61u, ImmutableString("texelFetch(0Y1C0C").hash32());
ASSERT_EQ(0x573d1826u, ImmutableString("textureGather(0H1B").hash32());
ASSERT_EQ(0x0f61635eu, ImmutableString("textureGather(0P1B").hash32());
ASSERT_EQ(0x181a7211u, ImmutableString("textureGather(0U1B").hash32());
ASSERT_EQ(0x98b5c033u, ImmutableString("textureGather(0H1B0C").hash32());
ASSERT_EQ(0x1230974bu, ImmutableString("textureGather(0P1B0C").hash32());
ASSERT_EQ(0x047e2010u, ImmutableString("textureGather(0U1B0C").hash32());
ASSERT_EQ(0x889130b4u, ImmutableString("textureGather(0K2B").hash32());
ASSERT_EQ(0x80649bccu, ImmutableString("textureGather(0S2B").hash32());
ASSERT_EQ(0x77ff0931u, ImmutableString("textureGather(0X2B").hash32());
ASSERT_EQ(0xf0b36e1du, ImmutableString("textureGather(0K2B0C").hash32());
ASSERT_EQ(0x7e927bd5u, ImmutableString("textureGather(0S2B0C").hash32());
ASSERT_EQ(0x36e78b70u, ImmutableString("textureGather(0X2B0C").hash32());
ASSERT_EQ(0xf05b183bu, ImmutableString("textureGather(0J2B").hash32());
ASSERT_EQ(0xe6f2e1d3u, ImmutableString("textureGather(0R2B").hash32());
ASSERT_EQ(0x7bff68f8u, ImmutableString("textureGather(0W2B").hash32());
ASSERT_EQ(0x91e7b756u, ImmutableString("textureGather(0J2B0C").hash32());
ASSERT_EQ(0xb00a70eeu, ImmutableString("textureGather(0R2B0C").hash32());
ASSERT_EQ(0xd840ea01u, ImmutableString("textureGather(0W2B0C").hash32());
ASSERT_EQ(0xc3dadff4u, ImmutableString("textureGather(0Z1B").hash32());
ASSERT_EQ(0xbcf1974au, ImmutableString("textureGather(0Z1B0B").hash32());
ASSERT_EQ(0xdc0090e3u, ImmutableString("textureGather(0b2B").hash32());
ASSERT_EQ(0x36e65c71u, ImmutableString("textureGather(0b2B0B").hash32());
ASSERT_EQ(0x5e97fd5au, ImmutableString("textureGather(0a2B").hash32());
ASSERT_EQ(0xafef0c94u, ImmutableString("textureGather(0a2B0B").hash32());
ASSERT_EQ(0xe3b7a4efu, ImmutableString("textureGatherOffset(0H1B1C").hash32());
ASSERT_EQ(0x38ee90d7u, ImmutableString("textureGatherOffset(0P1B1C").hash32());
ASSERT_EQ(0xf91ef410u, ImmutableString("textureGatherOffset(0U1B1C").hash32());
ASSERT_EQ(0x8fa34bcau, ImmutableString("textureGatherOffset(0H1B1C0C").hash32());
ASSERT_EQ(0xb7b5eb12u, ImmutableString("textureGatherOffset(0P1B1C0C").hash32());
ASSERT_EQ(0x59490119u, ImmutableString("textureGatherOffset(0U1B1C0C").hash32());
ASSERT_EQ(0x3f682f01u, ImmutableString("textureGatherOffset(0K2B1C").hash32());
ASSERT_EQ(0x50a3ba69u, ImmutableString("textureGatherOffset(0S2B1C").hash32());
ASSERT_EQ(0xe3bd7c3cu, ImmutableString("textureGatherOffset(0X2B1C").hash32());
ASSERT_EQ(0x899b1520u, ImmutableString("textureGatherOffset(0K2B1C0C").hash32());
ASSERT_EQ(0x01a83888u, ImmutableString("textureGatherOffset(0S2B1C0C").hash32());
ASSERT_EQ(0x38ed38e5u, ImmutableString("textureGatherOffset(0X2B1C0C").hash32());
ASSERT_EQ(0xb006f693u, ImmutableString("textureGatherOffset(0Z1B0B1C").hash32());
ASSERT_EQ(0xd26cea7cu, ImmutableString("textureGatherOffset(0b2B0B1C").hash32());
ASSERT_EQ(0x0b8d8d0eu, ImmutableString("atomicCounter(0F").hash32());
ASSERT_EQ(0xf0f5289du, ImmutableString("atomicCounterIncrement(0F").hash32());
ASSERT_EQ(0xf5adf6d1u, ImmutableString("atomicCounterDecrement(0F").hash32());
ASSERT_EQ(0x48923c61u, ImmutableString("atomicAdd(0D0D").hash32());
ASSERT_EQ(0x174429d9u, ImmutableString("atomicAdd(0C0C").hash32());
ASSERT_EQ(0x7de6c91cu, ImmutableString("atomicMin(0D0D").hash32());
ASSERT_EQ(0x2f35a524u, ImmutableString("atomicMin(0C0C").hash32());
ASSERT_EQ(0x7a93e532u, ImmutableString("atomicMax(0D0D").hash32());
ASSERT_EQ(0xf35a12fau, ImmutableString("atomicMax(0C0C").hash32());
ASSERT_EQ(0xc90f20b3u, ImmutableString("atomicAnd(0D0D").hash32());
ASSERT_EQ(0x8f5a420bu, ImmutableString("atomicAnd(0C0C").hash32());
ASSERT_EQ(0x449a297fu, ImmutableString("atomicOr(0D0D").hash32());
ASSERT_EQ(0x797c3e57u, ImmutableString("atomicOr(0C0C").hash32());
ASSERT_EQ(0xe0d1d797u, ImmutableString("atomicXor(0D0D").hash32());
ASSERT_EQ(0x16f120efu, ImmutableString("atomicXor(0C0C").hash32());
ASSERT_EQ(0x32d4301fu, ImmutableString("atomicExchange(0D0D").hash32());
ASSERT_EQ(0x68f37977u, ImmutableString("atomicExchange(0C0C").hash32());
ASSERT_EQ(0x529504a4u, ImmutableString("atomicCompSwap(0D0D0D").hash32());
ASSERT_EQ(0x0fab9dd9u, ImmutableString("atomicCompSwap(0C0C0C").hash32());
ASSERT_EQ(0xb32c4610u, ImmutableString("imageSize(0c").hash32());
ASSERT_EQ(0xba2c5115u, ImmutableString("imageSize(0d").hash32());
ASSERT_EQ(0xb92c4f82u, ImmutableString("imageSize(0e").hash32());
ASSERT_EQ(0xb82c4defu, ImmutableString("imageSize(0f").hash32());
ASSERT_EQ(0xb72c4c5cu, ImmutableString("imageSize(0g").hash32());
ASSERT_EQ(0xbe2c5761u, ImmutableString("imageSize(0h").hash32());
ASSERT_EQ(0xbd2c55ceu, ImmutableString("imageSize(0i").hash32());
ASSERT_EQ(0xbc2c543bu, ImmutableString("imageSize(0j").hash32());
ASSERT_EQ(0xbb2c52a8u, ImmutableString("imageSize(0k").hash32());
ASSERT_EQ(0xc22c5dadu, ImmutableString("imageSize(0l").hash32());
ASSERT_EQ(0xc12c5c1au, ImmutableString("imageSize(0m").hash32());
ASSERT_EQ(0xc02c5a87u, ImmutableString("imageSize(0n").hash32());
ASSERT_EQ(0x6c195e87u, ImmutableString("imageLoad(0c1C").hash32());
ASSERT_EQ(0x753e7136u, ImmutableString("imageLoad(0d1C").hash32());
ASSERT_EQ(0xa9d0e5b5u, ImmutableString("imageLoad(0e1C").hash32());
ASSERT_EQ(0x9ad4e7a3u, ImmutableString("imageLoad(0f2C").hash32());
ASSERT_EQ(0x00a05f04u, ImmutableString("imageLoad(0g2C").hash32());
ASSERT_EQ(0x11c8ccddu, ImmutableString("imageLoad(0h2C").hash32());
ASSERT_EQ(0xa7a68486u, ImmutableString("imageLoad(0i2C").hash32());
ASSERT_EQ(0x28a31a5fu, ImmutableString("imageLoad(0j2C").hash32());
ASSERT_EQ(0x8d315d40u, ImmutableString("imageLoad(0k2C").hash32());
ASSERT_EQ(0xce50b7e9u, ImmutableString("imageLoad(0l2C").hash32());
ASSERT_EQ(0x62f2ce12u, ImmutableString("imageLoad(0m2C").hash32());
ASSERT_EQ(0x243de78bu, ImmutableString("imageLoad(0n2C").hash32());
ASSERT_EQ(0xaf6251f9u, ImmutableString("imageStore(0c1C3B").hash32());
ASSERT_EQ(0x5ba8f703u, ImmutableString("imageStore(0d1C3C").hash32());
ASSERT_EQ(0xe495b7e1u, ImmutableString("imageStore(0e1C3D").hash32());
ASSERT_EQ(0x886bdcd5u, ImmutableString("imageStore(0f2C3B").hash32());
ASSERT_EQ(0xb0002869u, ImmutableString("imageStore(0g2C3C").hash32());
ASSERT_EQ(0xf0cb4011u, ImmutableString("imageStore(0h2C3D").hash32());
ASSERT_EQ(0xfa7d2618u, ImmutableString("imageStore(0i2C3B").hash32());
ASSERT_EQ(0xcf4a9cdeu, ImmutableString("imageStore(0j2C3C").hash32());
ASSERT_EQ(0x008583a0u, ImmutableString("imageStore(0k2C3D").hash32());
ASSERT_EQ(0xbaead883u, ImmutableString("imageStore(0l2C3B").hash32());
ASSERT_EQ(0xc4d9f177u, ImmutableString("imageStore(0m2C3C").hash32());
ASSERT_EQ(0xd8dff3cbu, ImmutableString("imageStore(0n2C3D").hash32());
ASSERT_EQ(0xa7570267u, ImmutableString("memoryBarrier(").hash32());
ASSERT_EQ(0xd8373034u, ImmutableString("memoryBarrierAtomicCounter(").hash32());
ASSERT_EQ(0xff425859u, ImmutableString("memoryBarrierBuffer(").hash32());
ASSERT_EQ(0xcd7ff8a6u, ImmutableString("memoryBarrierImage(").hash32());
ASSERT_EQ(0x2c4d0487u, ImmutableString("gl_MaxImageUnits").hash32());
ASSERT_EQ(0xeacd9c77u, ImmutableString("gl_MaxVertexImageUniforms").hash32());
ASSERT_EQ(0xe9637851u, ImmutableString("gl_MaxFragmentImageUniforms").hash32());
ASSERT_EQ(0x551515f4u, ImmutableString("gl_MaxComputeImageUniforms").hash32());
ASSERT_EQ(0x37f0f1d0u, ImmutableString("gl_MaxCombinedImageUniforms").hash32());
ASSERT_EQ(0x8dd1ae75u, ImmutableString("gl_MaxCombinedShaderOutputResources").hash32());
ASSERT_EQ(0xd54f2797u, ImmutableString("gl_MaxComputeWorkGroupCount").hash32());
ASSERT_EQ(0xec875d49u, ImmutableString("gl_MaxComputeWorkGroupSize").hash32());
ASSERT_EQ(0x6c3a75d8u, ImmutableString("gl_MaxComputeUniformComponents").hash32());
ASSERT_EQ(0x029d3b2bu, ImmutableString("gl_MaxComputeTextureImageUnits").hash32());
ASSERT_EQ(0xc3a870f0u, ImmutableString("gl_MaxComputeAtomicCounters").hash32());
ASSERT_EQ(0xacde249eu, ImmutableString("gl_MaxComputeAtomicCounterBuffers").hash32());
ASSERT_EQ(0x4cbd309du, ImmutableString("gl_MaxVertexAtomicCounters").hash32());
ASSERT_EQ(0x4591b147u, ImmutableString("gl_MaxFragmentAtomicCounters").hash32());
ASSERT_EQ(0x82903444u, ImmutableString("gl_MaxCombinedAtomicCounters").hash32());
ASSERT_EQ(0x5aeafb40u, ImmutableString("gl_MaxAtomicCounterBindings").hash32());
ASSERT_EQ(0x107540dfu, ImmutableString("gl_MaxVertexAtomicCounterBuffers").hash32());
ASSERT_EQ(0xf6212c11u, ImmutableString("gl_MaxFragmentAtomicCounterBuffers").hash32());
ASSERT_EQ(0x3d856f72u, ImmutableString("gl_MaxCombinedAtomicCounterBuffers").hash32());
ASSERT_EQ(0x98a09aa9u, ImmutableString("gl_MaxAtomicCounterBufferSize").hash32());
ASSERT_EQ(0x8539932du, ImmutableString("gl_MaxGeometryInputComponents").hash32());
ASSERT_EQ(0xd26bc9eau, ImmutableString("gl_MaxGeometryOutputComponents").hash32());
ASSERT_EQ(0x3dc1da39u, ImmutableString("gl_MaxGeometryImageUniforms").hash32());
ASSERT_EQ(0x361fe182u, ImmutableString("gl_MaxGeometryTextureImageUnits").hash32());
ASSERT_EQ(0x3620853du, ImmutableString("gl_MaxGeometryOutputVertices").hash32());
ASSERT_EQ(0x9923396au, ImmutableString("gl_MaxGeometryTotalOutputComponents").hash32());
ASSERT_EQ(0xc0ec9f01u, ImmutableString("gl_MaxGeometryUniformComponents").hash32());
ASSERT_EQ(0xd96c18afu, ImmutableString("gl_MaxGeometryAtomicCounters").hash32());
ASSERT_EQ(0xe353b519u, ImmutableString("gl_MaxGeometryAtomicCounterBuffers").hash32());
ASSERT_EQ(0x7dab4220u, ImmutableString("gl_in").hash32());
ASSERT_EQ(0x34af0318u, ImmutableString("barrier(").hash32());
ASSERT_EQ(0x9a984c24u, ImmutableString("memoryBarrierShared(").hash32());
ASSERT_EQ(0xdf09d132u, ImmutableString("groupMemoryBarrier(").hash32());
ASSERT_EQ(0x56624254u, ImmutableString("gl_NumWorkGroups").hash32());
ASSERT_EQ(0x121ffe70u, ImmutableString("gl_WorkGroupSize").hash32());
ASSERT_EQ(0x6fced514u, ImmutableString("gl_WorkGroupID").hash32());
ASSERT_EQ(0x4bbe0c1du, ImmutableString("gl_LocalInvocationID").hash32());
ASSERT_EQ(0xa34369b3u, ImmutableString("gl_GlobalInvocationID").hash32());
ASSERT_EQ(0x99f53c3cu, ImmutableString("gl_LocalInvocationIndex").hash32());
ASSERT_EQ(0xab932950u, ImmutableString("EmitVertex(").hash32());
ASSERT_EQ(0xfa01fdedu, ImmutableString("EndPrimitive(").hash32());
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()); ASSERT_EQ(0x556a8827u, ImmutableString("sinh(0B").hash32());
ASSERT_EQ(0x3368140au, ImmutableString("sinh(1B").hash32()); ASSERT_EQ(0x3368140au, ImmutableString("sinh(1B").hash32());
ASSERT_EQ(0x25704cc5u, ImmutableString("sinh(2B").hash32()); ASSERT_EQ(0x25704cc5u, ImmutableString("sinh(2B").hash32());
...@@ -409,14 +76,54 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -409,14 +76,54 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x87190960u, ImmutableString("atanh(1B").hash32()); ASSERT_EQ(0x87190960u, ImmutableString("atanh(1B").hash32());
ASSERT_EQ(0x61168ef7u, ImmutableString("atanh(2B").hash32()); ASSERT_EQ(0x61168ef7u, ImmutableString("atanh(2B").hash32());
ASSERT_EQ(0xbf14e45au, ImmutableString("atanh(3B").hash32()); ASSERT_EQ(0xbf14e45au, ImmutableString("atanh(3B").hash32());
ASSERT_EQ(0xd4d6b527u, ImmutableString("pow(0B0B").hash32());
ASSERT_EQ(0x7000d433u, ImmutableString("pow(1B1B").hash32());
ASSERT_EQ(0x60d77e47u, ImmutableString("pow(2B2B").hash32());
ASSERT_EQ(0x31a9230bu, ImmutableString("pow(3B3B").hash32());
ASSERT_EQ(0xb3a5e896u, ImmutableString("exp(0B").hash32());
ASSERT_EQ(0xd5a85cb3u, ImmutableString("exp(1B").hash32());
ASSERT_EQ(0xfbaad71cu, ImmutableString("exp(2B").hash32());
ASSERT_EQ(0xa5ac8e51u, ImmutableString("exp(3B").hash32());
ASSERT_EQ(0x0b09eda9u, ImmutableString("log(0B").hash32());
ASSERT_EQ(0x6106a374u, ImmutableString("log(1B").hash32());
ASSERT_EQ(0x3b04290bu, ImmutableString("log(2B").hash32());
ASSERT_EQ(0x1901b4eeu, ImmutableString("log(3B").hash32());
ASSERT_EQ(0x3a43c8ecu, ImmutableString("exp2(0B").hash32());
ASSERT_EQ(0x644649a1u, ImmutableString("exp2(1B").hash32());
ASSERT_EQ(0xf23eda66u, ImmutableString("exp2(2B").hash32());
ASSERT_EQ(0x14414e83u, ImmutableString("exp2(3B").hash32());
ASSERT_EQ(0xebeb54f1u, ImmutableString("log2(0B").hash32());
ASSERT_EQ(0xc1e8d43cu, ImmutableString("log2(1B").hash32());
ASSERT_EQ(0x9be659d3u, ImmutableString("log2(2B").hash32());
ASSERT_EQ(0xf9e31c36u, ImmutableString("log2(3B").hash32());
ASSERT_EQ(0x1a10ccb7u, ImmutableString("sqrt(0B").hash32());
ASSERT_EQ(0x780d8f1au, ImmutableString("sqrt(1B").hash32());
ASSERT_EQ(0x6a15c7d5u, ImmutableString("sqrt(2B").hash32());
ASSERT_EQ(0x40134720u, ImmutableString("sqrt(3B").hash32());
ASSERT_EQ(0xe50d8305u, ImmutableString("inversesqrt(0B").hash32());
ASSERT_EQ(0x3b0bcbd0u, ImmutableString("inversesqrt(1B").hash32());
ASSERT_EQ(0x15095167u, ImmutableString("inversesqrt(2B").hash32());
ASSERT_EQ(0xf306dd4au, ImmutableString("inversesqrt(3B").hash32());
ASSERT_EQ(0x11769f9bu, ImmutableString("abs(0B").hash32());
ASSERT_EQ(0xef742b7eu, ImmutableString("abs(1B").hash32());
ASSERT_EQ(0xe17ad139u, ImmutableString("abs(2B").hash32());
ASSERT_EQ(0x37791a04u, ImmutableString("abs(3B").hash32());
ASSERT_EQ(0x10769e08u, ImmutableString("abs(0C").hash32()); ASSERT_EQ(0x10769e08u, ImmutableString("abs(0C").hash32());
ASSERT_EQ(0xf0742d11u, ImmutableString("abs(1C").hash32()); ASSERT_EQ(0xf0742d11u, ImmutableString("abs(1C").hash32());
ASSERT_EQ(0xe07acfa6u, ImmutableString("abs(2C").hash32()); ASSERT_EQ(0xe07acfa6u, ImmutableString("abs(2C").hash32());
ASSERT_EQ(0x38791b97u, ImmutableString("abs(3C").hash32()); ASSERT_EQ(0x38791b97u, ImmutableString("abs(3C").hash32());
ASSERT_EQ(0xba70875au, ImmutableString("sign(0B").hash32());
ASSERT_EQ(0x5c7231f7u, ImmutableString("sign(1B").hash32());
ASSERT_EQ(0x8274ac60u, ImmutableString("sign(2B").hash32());
ASSERT_EQ(0xac772d15u, ImmutableString("sign(3B").hash32());
ASSERT_EQ(0xbb7088edu, ImmutableString("sign(0C").hash32()); ASSERT_EQ(0xbb7088edu, ImmutableString("sign(0C").hash32());
ASSERT_EQ(0x5b723064u, ImmutableString("sign(1C").hash32()); ASSERT_EQ(0x5b723064u, ImmutableString("sign(1C").hash32());
ASSERT_EQ(0x8374adf3u, ImmutableString("sign(2C").hash32()); ASSERT_EQ(0x8374adf3u, ImmutableString("sign(2C").hash32());
ASSERT_EQ(0xab772b82u, ImmutableString("sign(3C").hash32()); ASSERT_EQ(0xab772b82u, ImmutableString("sign(3C").hash32());
ASSERT_EQ(0x68b063ddu, ImmutableString("floor(0B").hash32());
ASSERT_EQ(0xbead19a8u, ImmutableString("floor(1B").hash32());
ASSERT_EQ(0x98aa9f3fu, ImmutableString("floor(2B").hash32());
ASSERT_EQ(0x76a82b22u, ImmutableString("floor(3B").hash32());
ASSERT_EQ(0x26c07245u, ImmutableString("trunc(0B").hash32()); ASSERT_EQ(0x26c07245u, ImmutableString("trunc(0B").hash32());
ASSERT_EQ(0x7cbd2810u, ImmutableString("trunc(1B").hash32()); ASSERT_EQ(0x7cbd2810u, ImmutableString("trunc(1B").hash32());
ASSERT_EQ(0x56baada7u, ImmutableString("trunc(2B").hash32()); ASSERT_EQ(0x56baada7u, ImmutableString("trunc(2B").hash32());
...@@ -429,6 +136,28 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -429,6 +136,28 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0xb937c6f2u, ImmutableString("roundEven(1B").hash32()); ASSERT_EQ(0xb937c6f2u, ImmutableString("roundEven(1B").hash32());
ASSERT_EQ(0x2b3f362du, ImmutableString("roundEven(2B").hash32()); ASSERT_EQ(0x2b3f362du, ImmutableString("roundEven(2B").hash32());
ASSERT_EQ(0x013cb578u, ImmutableString("roundEven(3B").hash32()); ASSERT_EQ(0x013cb578u, ImmutableString("roundEven(3B").hash32());
ASSERT_EQ(0x4dc29736u, ImmutableString("ceil(0B").hash32());
ASSERT_EQ(0xefc5d4d3u, ImmutableString("ceil(1B").hash32());
ASSERT_EQ(0x15c84f3cu, ImmutableString("ceil(2B").hash32());
ASSERT_EQ(0x3fcacff1u, ImmutableString("ceil(3B").hash32());
ASSERT_EQ(0x061a7a4fu, ImmutableString("fract(0B").hash32());
ASSERT_EQ(0xe4180632u, ImmutableString("fract(1B").hash32());
ASSERT_EQ(0x561f756du, ImmutableString("fract(2B").hash32());
ASSERT_EQ(0x2c1cf4b8u, ImmutableString("fract(3B").hash32());
ASSERT_EQ(0xed15f051u, ImmutableString("mod(0B0B").hash32());
ASSERT_EQ(0x13e5dde0u, ImmutableString("mod(1B0B").hash32());
ASSERT_EQ(0x046a9b13u, ImmutableString("mod(2B0B").hash32());
ASSERT_EQ(0xbca39522u, ImmutableString("mod(3B0B").hash32());
ASSERT_EQ(0x3de85e95u, ImmutableString("mod(1B1B").hash32());
ASSERT_EQ(0x546f9631u, ImmutableString("mod(2B2B").hash32());
ASSERT_EQ(0xaeabcdddu, ImmutableString("mod(3B3B").hash32());
ASSERT_EQ(0x3b8c728du, ImmutableString("min(0B0B").hash32());
ASSERT_EQ(0x23497dfcu, ImmutableString("min(1B0B").hash32());
ASSERT_EQ(0xc777f74fu, ImmutableString("min(2B0B").hash32());
ASSERT_EQ(0xcc07353eu, ImmutableString("min(3B0B").hash32());
ASSERT_EQ(0x4d4bfeb1u, ImmutableString("min(1B1B").hash32());
ASSERT_EQ(0x177cf26du, ImmutableString("min(2B2B").hash32());
ASSERT_EQ(0xbe0f6df9u, ImmutableString("min(3B3B").hash32());
ASSERT_EQ(0xbdf50df5u, ImmutableString("min(0C0C").hash32()); ASSERT_EQ(0xbdf50df5u, ImmutableString("min(0C0C").hash32());
ASSERT_EQ(0x80de719du, ImmutableString("min(1C1C").hash32()); ASSERT_EQ(0x80de719du, ImmutableString("min(1C1C").hash32());
ASSERT_EQ(0x81dadab1u, ImmutableString("min(2C2C").hash32()); ASSERT_EQ(0x81dadab1u, ImmutableString("min(2C2C").hash32());
...@@ -443,6 +172,13 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -443,6 +172,13 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x6f92d00cu, ImmutableString("min(1D0D").hash32()); ASSERT_EQ(0x6f92d00cu, ImmutableString("min(1D0D").hash32());
ASSERT_EQ(0x13bfb65fu, ImmutableString("min(2D0D").hash32()); ASSERT_EQ(0x13bfb65fu, ImmutableString("min(2D0D").hash32());
ASSERT_EQ(0x7fbf762eu, ImmutableString("min(3D0D").hash32()); ASSERT_EQ(0x7fbf762eu, ImmutableString("min(3D0D").hash32());
ASSERT_EQ(0xe7f2b603u, ImmutableString("max(0B0B").hash32());
ASSERT_EQ(0xa02bb012u, ImmutableString("max(1B0B").hash32());
ASSERT_EQ(0xd09e0b41u, ImmutableString("max(2B0B").hash32());
ASSERT_EQ(0x6ac79e50u, ImmutableString("max(3B0B").hash32());
ASSERT_EQ(0xc22e242fu, ImmutableString("max(1B1B").hash32());
ASSERT_EQ(0x009846a3u, ImmutableString("max(2B2B").hash32());
ASSERT_EQ(0x44c523e7u, ImmutableString("max(3B3B").hash32());
ASSERT_EQ(0xaaa9d50bu, ImmutableString("max(0C0C").hash32()); ASSERT_EQ(0xaaa9d50bu, ImmutableString("max(0C0C").hash32());
ASSERT_EQ(0xf6fdcb9bu, ImmutableString("max(1C1C").hash32()); ASSERT_EQ(0xf6fdcb9bu, ImmutableString("max(1C1C").hash32());
ASSERT_EQ(0x9b0b952fu, ImmutableString("max(2C2C").hash32()); ASSERT_EQ(0x9b0b952fu, ImmutableString("max(2C2C").hash32());
...@@ -457,6 +193,13 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -457,6 +193,13 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0xa4fce6e2u, ImmutableString("max(1D0D").hash32()); ASSERT_EQ(0xa4fce6e2u, ImmutableString("max(1D0D").hash32());
ASSERT_EQ(0x8454b931u, ImmutableString("max(2D0D").hash32()); ASSERT_EQ(0x8454b931u, ImmutableString("max(2D0D").hash32());
ASSERT_EQ(0xe732d280u, ImmutableString("max(3D0D").hash32()); ASSERT_EQ(0xe732d280u, ImmutableString("max(3D0D").hash32());
ASSERT_EQ(0xbe16c602u, ImmutableString("clamp(0B0B0B").hash32());
ASSERT_EQ(0x5e39910fu, ImmutableString("clamp(1B0B0B").hash32());
ASSERT_EQ(0xccc2d6c8u, ImmutableString("clamp(2B0B0B").hash32());
ASSERT_EQ(0xb154856du, ImmutableString("clamp(3B0B0B").hash32());
ASSERT_EQ(0x6b80211bu, ImmutableString("clamp(1B1B1B").hash32());
ASSERT_EQ(0xf0909e70u, ImmutableString("clamp(2B2B2B").hash32());
ASSERT_EQ(0x33d780d9u, ImmutableString("clamp(3B3B3B").hash32());
ASSERT_EQ(0x40b0dfadu, ImmutableString("clamp(0C0C0C").hash32()); ASSERT_EQ(0x40b0dfadu, ImmutableString("clamp(0C0C0C").hash32());
ASSERT_EQ(0x1b502a44u, ImmutableString("clamp(1C0C0C").hash32()); ASSERT_EQ(0x1b502a44u, ImmutableString("clamp(1C0C0C").hash32());
ASSERT_EQ(0xc2b695f3u, ImmutableString("clamp(2C0C0C").hash32()); ASSERT_EQ(0xc2b695f3u, ImmutableString("clamp(2C0C0C").hash32());
...@@ -471,10 +214,31 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -471,10 +214,31 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x61475731u, ImmutableString("clamp(1D1D1D").hash32()); ASSERT_EQ(0x61475731u, ImmutableString("clamp(1D1D1D").hash32());
ASSERT_EQ(0x9d0abd32u, ImmutableString("clamp(2D2D2D").hash32()); ASSERT_EQ(0x9d0abd32u, ImmutableString("clamp(2D2D2D").hash32());
ASSERT_EQ(0xeb86dc53u, ImmutableString("clamp(3D3D3D").hash32()); ASSERT_EQ(0xeb86dc53u, ImmutableString("clamp(3D3D3D").hash32());
ASSERT_EQ(0xb5c1d059u, ImmutableString("mix(0B0B0B").hash32());
ASSERT_EQ(0x1f8d8da5u, ImmutableString("mix(1B1B0B").hash32());
ASSERT_EQ(0x60348539u, ImmutableString("mix(2B2B0B").hash32());
ASSERT_EQ(0xc398271du, ImmutableString("mix(3B3B0B").hash32());
ASSERT_EQ(0xf58b0cf0u, ImmutableString("mix(1B1B1B").hash32());
ASSERT_EQ(0x9030539bu, ImmutableString("mix(2B2B2B").hash32());
ASSERT_EQ(0xd1918162u, ImmutableString("mix(3B3B3B").hash32());
ASSERT_EQ(0xb6c1d1ecu, ImmutableString("mix(0B0B0E").hash32()); ASSERT_EQ(0xb6c1d1ecu, ImmutableString("mix(0B0B0E").hash32());
ASSERT_EQ(0xfc8b17f5u, ImmutableString("mix(1B1B1E").hash32()); ASSERT_EQ(0xfc8b17f5u, ImmutableString("mix(1B1B1E").hash32());
ASSERT_EQ(0x95305b7au, ImmutableString("mix(2B2B2E").hash32()); ASSERT_EQ(0x95305b7au, ImmutableString("mix(2B2B2E").hash32());
ASSERT_EQ(0xcc917983u, ImmutableString("mix(3B3B3E").hash32()); ASSERT_EQ(0xcc917983u, ImmutableString("mix(3B3B3E").hash32());
ASSERT_EQ(0xccdc3d05u, ImmutableString("step(0B0B").hash32());
ASSERT_EQ(0x92458549u, ImmutableString("step(1B1B").hash32());
ASSERT_EQ(0x35731765u, ImmutableString("step(2B2B").hash32());
ASSERT_EQ(0xcf6001f1u, ImmutableString("step(3B3B").hash32());
ASSERT_EQ(0x22da85d0u, ImmutableString("step(0B1B").hash32());
ASSERT_EQ(0xfcd80b67u, ImmutableString("step(0B2B").hash32());
ASSERT_EQ(0xdad5974au, ImmutableString("step(0B3B").hash32());
ASSERT_EQ(0xbdc5079du, ImmutableString("smoothstep(0B0B0B").hash32());
ASSERT_EQ(0x29eb2c34u, ImmutableString("smoothstep(1B1B1B").hash32());
ASSERT_EQ(0x45ccdddfu, ImmutableString("smoothstep(2B2B2B").hash32());
ASSERT_EQ(0x372206a6u, ImmutableString("smoothstep(3B3B3B").hash32());
ASSERT_EQ(0x13c35068u, ImmutableString("smoothstep(0B0B1B").hash32());
ASSERT_EQ(0xedc0d5ffu, ImmutableString("smoothstep(0B0B2B").hash32());
ASSERT_EQ(0xcbbe61e2u, ImmutableString("smoothstep(0B0B3B").hash32());
ASSERT_EQ(0x7f4a0e15u, ImmutableString("modf(0B0B").hash32()); ASSERT_EQ(0x7f4a0e15u, ImmutableString("modf(0B0B").hash32());
ASSERT_EQ(0x515a7a59u, ImmutableString("modf(1B1B").hash32()); ASSERT_EQ(0x515a7a59u, ImmutableString("modf(1B1B").hash32());
ASSERT_EQ(0xf4880c75u, ImmutableString("modf(2B2B").hash32()); ASSERT_EQ(0xf4880c75u, ImmutableString("modf(2B2B").hash32());
...@@ -503,12 +267,56 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -503,12 +267,56 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0xa807b817u, ImmutableString("uintBitsToFloat(1D").hash32()); ASSERT_EQ(0xa807b817u, ImmutableString("uintBitsToFloat(1D").hash32());
ASSERT_EQ(0xb5ff7f5cu, ImmutableString("uintBitsToFloat(2D").hash32()); ASSERT_EQ(0xb5ff7f5cu, ImmutableString("uintBitsToFloat(2D").hash32());
ASSERT_EQ(0x5c02c345u, ImmutableString("uintBitsToFloat(3D").hash32()); ASSERT_EQ(0x5c02c345u, ImmutableString("uintBitsToFloat(3D").hash32());
ASSERT_EQ(0xf3de0717u, ImmutableString("frexp(0B0C").hash32());
ASSERT_EQ(0xa30b98d3u, ImmutableString("frexp(1B1C").hash32());
ASSERT_EQ(0x17aa3bbfu, ImmutableString("frexp(2B2C").hash32());
ASSERT_EQ(0x7dbee433u, ImmutableString("frexp(3B3C").hash32());
ASSERT_EQ(0x57b9431bu, ImmutableString("ldexp(0B0C").hash32());
ASSERT_EQ(0x124f3157u, ImmutableString("ldexp(1B1C").hash32());
ASSERT_EQ(0x94d22cc3u, ImmutableString("ldexp(2B2C").hash32());
ASSERT_EQ(0xfae6d537u, ImmutableString("ldexp(3B3C").hash32());
ASSERT_EQ(0x9ef04df5u, ImmutableString("packSnorm2x16(1B").hash32()); ASSERT_EQ(0x9ef04df5u, ImmutableString("packSnorm2x16(1B").hash32());
ASSERT_EQ(0xe73def97u, ImmutableString("packUnorm2x16(1B").hash32()); ASSERT_EQ(0xe73def97u, ImmutableString("packUnorm2x16(1B").hash32());
ASSERT_EQ(0xbfd16903u, ImmutableString("packHalf2x16(1B").hash32()); ASSERT_EQ(0xbfd16903u, ImmutableString("packHalf2x16(1B").hash32());
ASSERT_EQ(0xab46cb2du, ImmutableString("unpackSnorm2x16(0D").hash32()); ASSERT_EQ(0xab46cb2du, ImmutableString("unpackSnorm2x16(0D").hash32());
ASSERT_EQ(0xe12111f7u, ImmutableString("unpackUnorm2x16(0D").hash32()); ASSERT_EQ(0xe12111f7u, ImmutableString("unpackUnorm2x16(0D").hash32());
ASSERT_EQ(0xbb0a6cb5u, ImmutableString("unpackHalf2x16(0D").hash32()); ASSERT_EQ(0xbb0a6cb5u, ImmutableString("unpackHalf2x16(0D").hash32());
ASSERT_EQ(0x82b86afcu, ImmutableString("packUnorm4x8(3B").hash32());
ASSERT_EQ(0x6d7cd09au, ImmutableString("packSnorm4x8(3B").hash32());
ASSERT_EQ(0x7e0ed3ccu, ImmutableString("unpackUnorm4x8(0D").hash32());
ASSERT_EQ(0x2bceb1c6u, ImmutableString("unpackSnorm4x8(0D").hash32());
ASSERT_EQ(0x1731e675u, ImmutableString("length(0B").hash32());
ASSERT_EQ(0xed2f65c0u, ImmutableString("length(1B").hash32());
ASSERT_EQ(0x472c21d7u, ImmutableString("length(2B").hash32());
ASSERT_EQ(0x2529adbau, ImmutableString("length(3B").hash32());
ASSERT_EQ(0x97b032ceu, ImmutableString("distance(0B0B").hash32());
ASSERT_EQ(0xfdc4db42u, ImmutableString("distance(1B1B").hash32());
ASSERT_EQ(0x1a473286u, ImmutableString("distance(2B2B").hash32());
ASSERT_EQ(0x0887a662u, ImmutableString("distance(3B3B").hash32());
ASSERT_EQ(0xa05f6bc8u, ImmutableString("dot(0B0B").hash32());
ASSERT_EQ(0x41aa3804u, ImmutableString("dot(1B1B").hash32());
ASSERT_EQ(0xc42d3370u, ImmutableString("dot(2B2B").hash32());
ASSERT_EQ(0x2a4048e4u, ImmutableString("dot(3B3B").hash32());
ASSERT_EQ(0x4c9b39c9u, ImmutableString("cross(2B2B").hash32());
ASSERT_EQ(0xa2e83502u, ImmutableString("normalize(0B").hash32());
ASSERT_EQ(0x44eb729fu, ImmutableString("normalize(1B").hash32());
ASSERT_EQ(0x6aeded08u, ImmutableString("normalize(2B").hash32());
ASSERT_EQ(0x94f06dbdu, ImmutableString("normalize(3B").hash32());
ASSERT_EQ(0xfa8639d9u, ImmutableString("faceforward(0B0B0B").hash32());
ASSERT_EQ(0x3a4f7670u, ImmutableString("faceforward(1B1B1B").hash32());
ASSERT_EQ(0xd4f4bd1bu, ImmutableString("faceforward(2B2B2B").hash32());
ASSERT_EQ(0x1655eae2u, ImmutableString("faceforward(3B3B3B").hash32());
ASSERT_EQ(0x641f1576u, ImmutableString("reflect(0B0B").hash32());
ASSERT_EQ(0xca322aeau, ImmutableString("reflect(1B1B").hash32());
ASSERT_EQ(0x40514dceu, ImmutableString("reflect(2B2B").hash32());
ASSERT_EQ(0x619b508au, ImmutableString("reflect(3B3B").hash32());
ASSERT_EQ(0x762ec4e2u, ImmutableString("refract(0B0B0B").hash32());
ASSERT_EQ(0x0c4b44deu, ImmutableString("refract(1B1B0B").hash32());
ASSERT_EQ(0x3446c6cau, ImmutableString("refract(2B2B0B").hash32());
ASSERT_EQ(0x343e737eu, ImmutableString("refract(3B3B0B").hash32());
ASSERT_EQ(0x2530925bu, ImmutableString("matrixCompMult(5B5B").hash32());
ASSERT_EQ(0xce0b0283u, ImmutableString("matrixCompMult(ABAB").hash32());
ASSERT_EQ(0x646d7617u, ImmutableString("matrixCompMult(FBFB").hash32());
ASSERT_EQ(0x0f88eaa3u, ImmutableString("matrixCompMult(9B9B").hash32()); ASSERT_EQ(0x0f88eaa3u, ImmutableString("matrixCompMult(9B9B").hash32());
ASSERT_EQ(0x93b01b17u, ImmutableString("matrixCompMult(6B6B").hash32()); ASSERT_EQ(0x93b01b17u, ImmutableString("matrixCompMult(6B6B").hash32());
ASSERT_EQ(0xd7cedc37u, ImmutableString("matrixCompMult(DBDB").hash32()); ASSERT_EQ(0xd7cedc37u, ImmutableString("matrixCompMult(DBDB").hash32());
...@@ -539,27 +347,180 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -539,27 +347,180 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x0671c30au, ImmutableString("inverse(5B").hash32()); ASSERT_EQ(0x0671c30au, ImmutableString("inverse(5B").hash32());
ASSERT_EQ(0x0f7d6756u, ImmutableString("inverse(AB").hash32()); ASSERT_EQ(0x0f7d6756u, ImmutableString("inverse(AB").hash32());
ASSERT_EQ(0x198ec035u, ImmutableString("inverse(FB").hash32()); ASSERT_EQ(0x198ec035u, ImmutableString("inverse(FB").hash32());
ASSERT_EQ(0x35d2bc55u, ImmutableString("lessThan(1B1B").hash32());
ASSERT_EQ(0x4c59f3f1u, ImmutableString("lessThan(2B2B").hash32());
ASSERT_EQ(0xa694989du, ImmutableString("lessThan(3B3B").hash32());
ASSERT_EQ(0x69652f41u, ImmutableString("lessThan(1C1C").hash32());
ASSERT_EQ(0xf707f2d5u, ImmutableString("lessThan(2C2C").hash32());
ASSERT_EQ(0x421d21e5u, ImmutableString("lessThan(3C3C").hash32());
ASSERT_EQ(0xae3dea39u, ImmutableString("lessThan(1D1D").hash32()); ASSERT_EQ(0xae3dea39u, ImmutableString("lessThan(1D1D").hash32());
ASSERT_EQ(0x2cbb3831u, ImmutableString("lessThan(2D2D").hash32()); ASSERT_EQ(0x2cbb3831u, ImmutableString("lessThan(2D2D").hash32());
ASSERT_EQ(0x0b5bd931u, ImmutableString("lessThan(3D3D").hash32()); ASSERT_EQ(0x0b5bd931u, ImmutableString("lessThan(3D3D").hash32());
ASSERT_EQ(0xbb7abcffu, ImmutableString("lessThanEqual(1B1B").hash32());
ASSERT_EQ(0xf9e4df73u, ImmutableString("lessThanEqual(2B2B").hash32());
ASSERT_EQ(0xcab81737u, ImmutableString("lessThanEqual(3B3B").hash32());
ASSERT_EQ(0xef0d2febu, ImmutableString("lessThanEqual(1C1C").hash32());
ASSERT_EQ(0x931af97fu, ImmutableString("lessThanEqual(2C2C").hash32());
ASSERT_EQ(0x965473c7u, ImmutableString("lessThanEqual(3C3C").hash32());
ASSERT_EQ(0xbc4bed83u, ImmutableString("lessThanEqual(1D1D").hash32()); ASSERT_EQ(0xbc4bed83u, ImmutableString("lessThanEqual(1D1D").hash32());
ASSERT_EQ(0x4869dbd3u, ImmutableString("lessThanEqual(2D2D").hash32()); ASSERT_EQ(0x4869dbd3u, ImmutableString("lessThanEqual(2D2D").hash32());
ASSERT_EQ(0xdf2d350bu, ImmutableString("lessThanEqual(3D3D").hash32()); ASSERT_EQ(0xdf2d350bu, ImmutableString("lessThanEqual(3D3D").hash32());
ASSERT_EQ(0x2e4fef86u, ImmutableString("greaterThan(1B1B").hash32());
ASSERT_EQ(0xa46f126au, ImmutableString("greaterThan(2B2B").hash32());
ASSERT_EQ(0x525f6fa6u, ImmutableString("greaterThan(3B3B").hash32());
ASSERT_EQ(0xb9cf953au, ImmutableString("greaterThan(1C1C").hash32());
ASSERT_EQ(0xba1060a6u, ImmutableString("greaterThan(2C2C").hash32());
ASSERT_EQ(0x36d7afdeu, ImmutableString("greaterThan(3C3C").hash32());
ASSERT_EQ(0x2d7ebf02u, ImmutableString("greaterThan(1D1D").hash32()); ASSERT_EQ(0x2d7ebf02u, ImmutableString("greaterThan(1D1D").hash32());
ASSERT_EQ(0x3ba7cb8au, ImmutableString("greaterThan(2D2D").hash32()); ASSERT_EQ(0x3ba7cb8au, ImmutableString("greaterThan(2D2D").hash32());
ASSERT_EQ(0x2620dd52u, ImmutableString("greaterThan(3D3D").hash32()); ASSERT_EQ(0x2620dd52u, ImmutableString("greaterThan(3D3D").hash32());
ASSERT_EQ(0x98571f82u, ImmutableString("greaterThanEqual(1B1B").hash32());
ASSERT_EQ(0xce27bec6u, ImmutableString("greaterThanEqual(2B2B").hash32());
ASSERT_EQ(0xbc669fa2u, ImmutableString("greaterThanEqual(3B3B").hash32());
ASSERT_EQ(0xe3884196u, ImmutableString("greaterThanEqual(1C1C").hash32());
ASSERT_EQ(0x63c84382u, ImmutableString("greaterThanEqual(2C2C").hash32());
ASSERT_EQ(0xa0dedfdau, ImmutableString("greaterThanEqual(3C3C").hash32());
ASSERT_EQ(0xd8a05eaeu, ImmutableString("greaterThanEqual(1D1D").hash32()); ASSERT_EQ(0xd8a05eaeu, ImmutableString("greaterThanEqual(1D1D").hash32());
ASSERT_EQ(0x267a1e16u, ImmutableString("greaterThanEqual(2D2D").hash32()); ASSERT_EQ(0x267a1e16u, ImmutableString("greaterThanEqual(2D2D").hash32());
ASSERT_EQ(0xd1427cfeu, ImmutableString("greaterThanEqual(3D3D").hash32()); ASSERT_EQ(0xd1427cfeu, ImmutableString("greaterThanEqual(3D3D").hash32());
ASSERT_EQ(0xf68b9ca9u, ImmutableString("equal(1B1B").hash32());
ASSERT_EQ(0x99b92ec5u, ImmutableString("equal(2B2B").hash32());
ASSERT_EQ(0x34e1bad1u, ImmutableString("equal(3B3B").hash32());
ASSERT_EQ(0xab5a7a95u, ImmutableString("equal(1C1C").hash32());
ASSERT_EQ(0x8417e089u, ImmutableString("equal(2C2C").hash32());
ASSERT_EQ(0xd06a4419u, ImmutableString("equal(3C3C").hash32());
ASSERT_EQ(0xc011536du, ImmutableString("equal(1D1D").hash32()); ASSERT_EQ(0xc011536du, ImmutableString("equal(1D1D").hash32());
ASSERT_EQ(0x4b343265u, ImmutableString("equal(2D2D").hash32()); ASSERT_EQ(0x4b343265u, ImmutableString("equal(2D2D").hash32());
ASSERT_EQ(0xd75220b5u, ImmutableString("equal(3D3D").hash32()); ASSERT_EQ(0xd75220b5u, ImmutableString("equal(3D3D").hash32());
ASSERT_EQ(0xeba3b9c1u, ImmutableString("equal(1E1E").hash32());
ASSERT_EQ(0xdc6a3fd9u, ImmutableString("equal(2E2E").hash32());
ASSERT_EQ(0x242c7b45u, ImmutableString("equal(3E3E").hash32());
ASSERT_EQ(0x58ce58e6u, ImmutableString("notEqual(1B1B").hash32());
ASSERT_EQ(0xb5a0c6cau, ImmutableString("notEqual(2B2B").hash32());
ASSERT_EQ(0x7173e986u, ImmutableString("notEqual(3B3B").hash32());
ASSERT_EQ(0x658a699au, ImmutableString("notEqual(1C1C").hash32());
ASSERT_EQ(0x4c7e8006u, ImmutableString("notEqual(2C2C").hash32());
ASSERT_EQ(0xd5eb603eu, ImmutableString("notEqual(3C3C").hash32());
ASSERT_EQ(0x593a5ce2u, ImmutableString("notEqual(1D1D").hash32()); ASSERT_EQ(0x593a5ce2u, ImmutableString("notEqual(1D1D").hash32());
ASSERT_EQ(0xce15eaeau, ImmutableString("notEqual(2D2D").hash32()); ASSERT_EQ(0xce15eaeau, ImmutableString("notEqual(2D2D").hash32());
ASSERT_EQ(0xc53620b2u, ImmutableString("notEqual(3D3D").hash32()); ASSERT_EQ(0xc53620b2u, ImmutableString("notEqual(3D3D").hash32());
ASSERT_EQ(0x1da7dd5eu, ImmutableString("notEqual(1E1E").hash32());
ASSERT_EQ(0x2ba422c6u, ImmutableString("notEqual(2E2E").hash32());
ASSERT_EQ(0x785bc622u, ImmutableString("notEqual(3E3E").hash32());
ASSERT_EQ(0x32a4419du, ImmutableString("any(1E").hash32());
ASSERT_EQ(0x82a280f6u, ImmutableString("any(2E").hash32());
ASSERT_EQ(0x5ea009b3u, ImmutableString("any(3E").hash32());
ASSERT_EQ(0x0f84439eu, ImmutableString("all(1E").hash32());
ASSERT_EQ(0xbf879745u, ImmutableString("all(2E").hash32());
ASSERT_EQ(0xdb8a01f0u, ImmutableString("all(3E").hash32());
ASSERT_EQ(0xde93f470u, ImmutableString("not(1E").hash32());
ASSERT_EQ(0xee8bbedbu, ImmutableString("not(2E").hash32());
ASSERT_EQ(0x128e361eu, ImmutableString("not(3E").hash32());
ASSERT_EQ(0x2c65fc52u, ImmutableString("bitfieldExtract(0C0C0C").hash32());
ASSERT_EQ(0x301e7aa3u, ImmutableString("bitfieldExtract(1C0C0C").hash32());
ASSERT_EQ(0x1bc77874u, ImmutableString("bitfieldExtract(2C0C0C").hash32());
ASSERT_EQ(0x2e198dddu, ImmutableString("bitfieldExtract(3C0C0C").hash32());
ASSERT_EQ(0x1ef52e53u, ImmutableString("bitfieldExtract(0D0C0C").hash32());
ASSERT_EQ(0xbecd46a2u, ImmutableString("bitfieldExtract(1D0C0C").hash32());
ASSERT_EQ(0x50828f41u, ImmutableString("bitfieldExtract(2D0C0C").hash32());
ASSERT_EQ(0x26e63818u, ImmutableString("bitfieldExtract(3D0C0C").hash32());
ASSERT_EQ(0xbcfd7f73u, ImmutableString("bitfieldInsert(0C0C0C0C").hash32());
ASSERT_EQ(0x221a7f03u, ImmutableString("bitfieldInsert(1C1C0C0C").hash32());
ASSERT_EQ(0xf4fc8897u, ImmutableString("bitfieldInsert(2C2C0C0C").hash32());
ASSERT_EQ(0x100c00dfu, ImmutableString("bitfieldInsert(3C3C0C0C").hash32());
ASSERT_EQ(0x6bd9dd3bu, ImmutableString("bitfieldInsert(0D0D0C0C").hash32());
ASSERT_EQ(0x3d7510bbu, ImmutableString("bitfieldInsert(1D1D0C0C").hash32());
ASSERT_EQ(0x70f71a0bu, ImmutableString("bitfieldInsert(2D2D0C0C").hash32());
ASSERT_EQ(0x0a15fba3u, ImmutableString("bitfieldInsert(3D3D0C0C").hash32());
ASSERT_EQ(0x380ee623u, ImmutableString("bitfieldReverse(0C").hash32());
ASSERT_EQ(0xe0122d32u, ImmutableString("bitfieldReverse(1C").hash32());
ASSERT_EQ(0xf009f79du, ImmutableString("bitfieldReverse(2C").hash32());
ASSERT_EQ(0x100c6894u, ImmutableString("bitfieldReverse(3C").hash32());
ASSERT_EQ(0x3d0eee02u, ImmutableString("bitfieldReverse(0D").hash32());
ASSERT_EQ(0xdb122553u, ImmutableString("bitfieldReverse(1D").hash32());
ASSERT_EQ(0xe909ec98u, ImmutableString("bitfieldReverse(2D").hash32());
ASSERT_EQ(0x0f0c6701u, ImmutableString("bitfieldReverse(3D").hash32());
ASSERT_EQ(0x3827bbd4u, ImmutableString("bitCount(0C").hash32());
ASSERT_EQ(0x18254addu, ImmutableString("bitCount(1C").hash32());
ASSERT_EQ(0x082bed72u, ImmutableString("bitCount(2C").hash32());
ASSERT_EQ(0x602a3963u, ImmutableString("bitCount(3C").hash32());
ASSERT_EQ(0x3727ba41u, ImmutableString("bitCount(0D").hash32());
ASSERT_EQ(0x11253fd8u, ImmutableString("bitCount(1D").hash32());
ASSERT_EQ(0x032be593u, ImmutableString("bitCount(2D").hash32());
ASSERT_EQ(0x652a4142u, ImmutableString("bitCount(3D").hash32());
ASSERT_EQ(0xc1b44a60u, ImmutableString("findLSB(0C").hash32());
ASSERT_EQ(0xa1b1d969u, ImmutableString("findLSB(1C").hash32());
ASSERT_EQ(0x91ba0efeu, ImmutableString("findLSB(2C").hash32());
ASSERT_EQ(0xe9b6c7efu, ImmutableString("findLSB(3C").hash32());
ASSERT_EQ(0xc8b45565u, ImmutableString("findLSB(0D").hash32());
ASSERT_EQ(0xa2b1dafcu, ImmutableString("findLSB(1D").hash32());
ASSERT_EQ(0x94ba13b7u, ImmutableString("findLSB(2D").hash32());
ASSERT_EQ(0xe6b6c336u, ImmutableString("findLSB(3D").hash32());
ASSERT_EQ(0x129034f1u, ImmutableString("findMSB(0C").hash32());
ASSERT_EQ(0x3292a5e8u, ImmutableString("findMSB(1C").hash32());
ASSERT_EQ(0xda9459f7u, ImmutableString("findMSB(2C").hash32());
ASSERT_EQ(0x0296d786u, ImmutableString("findMSB(3C").hash32());
ASSERT_EQ(0x13903684u, ImmutableString("findMSB(0D").hash32());
ASSERT_EQ(0x3992b0edu, ImmutableString("findMSB(1D").hash32());
ASSERT_EQ(0xd794553eu, ImmutableString("findMSB(2D").hash32());
ASSERT_EQ(0x0596dc3fu, ImmutableString("findMSB(3D").hash32());
ASSERT_EQ(0x76d26c06u, ImmutableString("uaddCarry(0D0D0D").hash32());
ASSERT_EQ(0x8638ea07u, ImmutableString("uaddCarry(1D1D1D").hash32());
ASSERT_EQ(0x830df594u, ImmutableString("uaddCarry(2D2D2D").hash32());
ASSERT_EQ(0x859069e5u, ImmutableString("uaddCarry(3D3D3D").hash32());
ASSERT_EQ(0xee0c9f85u, ImmutableString("usubBorrow(0D0D0D").hash32());
ASSERT_EQ(0x56a8a0b4u, ImmutableString("usubBorrow(1D1D1D").hash32());
ASSERT_EQ(0x2d76ad27u, ImmutableString("usubBorrow(2D2D2D").hash32());
ASSERT_EQ(0x1e102f26u, ImmutableString("usubBorrow(3D3D3D").hash32());
ASSERT_EQ(0x2691af51u, ImmutableString("umulExtended(0D0D0D0D").hash32());
ASSERT_EQ(0x6b51f121u, ImmutableString("umulExtended(1D1D1D1D").hash32());
ASSERT_EQ(0x4d3ff831u, ImmutableString("umulExtended(2D2D2D2D").hash32());
ASSERT_EQ(0x282a4a31u, ImmutableString("umulExtended(3D3D3D3D").hash32());
ASSERT_EQ(0x84d951b5u, ImmutableString("imulExtended(0C0C0C0C").hash32());
ASSERT_EQ(0xcc193b45u, ImmutableString("imulExtended(1C1C1C1C").hash32());
ASSERT_EQ(0x0a58432du, ImmutableString("imulExtended(2C2C2C2C").hash32());
ASSERT_EQ(0x8277ae4du, ImmutableString("imulExtended(3C3C3C3C").hash32());
ASSERT_EQ(0x2c852cb5u, ImmutableString("texture2D(0H1B").hash32());
ASSERT_EQ(0xd6d4ae73u, ImmutableString("texture2DProj(0H2B").hash32());
ASSERT_EQ(0xb4d23a56u, ImmutableString("texture2DProj(0H3B").hash32());
ASSERT_EQ(0x11ea9d29u, ImmutableString("textureCube(0J2B").hash32());
ASSERT_EQ(0xe7d17641u, ImmutableString("texture2D(0L1B").hash32());
ASSERT_EQ(0x5270451fu, ImmutableString("texture2DProj(0L2B").hash32());
ASSERT_EQ(0xb06d0782u, ImmutableString("texture2DProj(0L3B").hash32());
ASSERT_EQ(0x05cd2a61u, ImmutableString("texture2DRect(0N1B").hash32());
ASSERT_EQ(0xc97a55d7u, ImmutableString("texture2DRectProj(0N2B").hash32());
ASSERT_EQ(0xa777e1bau, ImmutableString("texture2DRectProj(0N3B").hash32());
ASSERT_EQ(0xc5a2d6f5u, ImmutableString("texture(0N1B").hash32()); ASSERT_EQ(0xc5a2d6f5u, ImmutableString("texture(0N1B").hash32());
ASSERT_EQ(0xd934e233u, ImmutableString("textureProj(0N2B").hash32()); ASSERT_EQ(0xd934e233u, ImmutableString("textureProj(0N2B").hash32());
ASSERT_EQ(0xb7326e16u, ImmutableString("textureProj(0N3B").hash32()); ASSERT_EQ(0xb7326e16u, ImmutableString("textureProj(0N3B").hash32());
ASSERT_EQ(0x72093d38u, ImmutableString("texture2DGradEXT(0H1B1B1B").hash32());
ASSERT_EQ(0xabd48fdcu, ImmutableString("texture2DProjGradEXT(0H2B1B1B").hash32());
ASSERT_EQ(0x33484f89u, ImmutableString("texture2DProjGradEXT(0H3B1B1B").hash32());
ASSERT_EQ(0x79171da6u, ImmutableString("textureCubeGradEXT(0J2B2B2B").hash32());
ASSERT_EQ(0x8ee03ca7u, ImmutableString("texture2D(0H1B0B").hash32());
ASSERT_EQ(0x88cd05e1u, ImmutableString("texture2DProj(0H2B0B").hash32());
ASSERT_EQ(0x30daf170u, ImmutableString("texture2DProj(0H3B0B").hash32());
ASSERT_EQ(0xd649f15bu, ImmutableString("textureCube(0J2B0B").hash32());
ASSERT_EQ(0x30de4eebu, ImmutableString("dFdx(0B").hash32());
ASSERT_EQ(0x8edb114eu, ImmutableString("dFdx(1B").hash32());
ASSERT_EQ(0x80e34a09u, ImmutableString("dFdx(2B").hash32());
ASSERT_EQ(0x56e0c954u, ImmutableString("dFdx(3B").hash32());
ASSERT_EQ(0x2a65dfa6u, ImmutableString("dFdy(0B").hash32());
ASSERT_EQ(0x4c6853c3u, ImmutableString("dFdy(1B").hash32());
ASSERT_EQ(0x726ace2cu, ImmutableString("dFdy(2B").hash32());
ASSERT_EQ(0x9c6d4ee1u, ImmutableString("dFdy(3B").hash32());
ASSERT_EQ(0xa6cba313u, ImmutableString("fwidth(0B").hash32());
ASSERT_EQ(0x04c9f876u, ImmutableString("fwidth(1B").hash32());
ASSERT_EQ(0xf6d09e31u, ImmutableString("fwidth(2B").hash32());
ASSERT_EQ(0xccce1d7cu, ImmutableString("fwidth(3B").hash32());
ASSERT_EQ(0x8682af79u, ImmutableString("texture2DLodEXT(0H1B0B").hash32());
ASSERT_EQ(0xc117a53fu, ImmutableString("texture2DProjLodEXT(0H2B0B").hash32());
ASSERT_EQ(0x39021baeu, ImmutableString("texture2DProjLodEXT(0H3B0B").hash32());
ASSERT_EQ(0x43f81965u, ImmutableString("textureCubeLodEXT(0J2B0B").hash32());
ASSERT_EQ(0x0cf3085au, ImmutableString("texture2DLod(0H1B0B").hash32());
ASSERT_EQ(0x8ea43616u, ImmutableString("texture2DProjLod(0H2B0B").hash32());
ASSERT_EQ(0x157c8b27u, ImmutableString("texture2DProjLod(0H3B0B").hash32());
ASSERT_EQ(0x8238ae88u, ImmutableString("textureCubeLod(0J2B0B").hash32());
ASSERT_EQ(0xbed19cffu, ImmutableString("texture(0H1B").hash32()); ASSERT_EQ(0xbed19cffu, ImmutableString("texture(0H1B").hash32());
ASSERT_EQ(0xe4231ee7u, ImmutableString("texture(0P1B").hash32()); ASSERT_EQ(0xe4231ee7u, ImmutableString("texture(0P1B").hash32());
ASSERT_EQ(0xdb6a1034u, ImmutableString("texture(0U1B").hash32()); ASSERT_EQ(0xdb6a1034u, ImmutableString("texture(0U1B").hash32());
...@@ -730,22 +691,6 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -730,22 +691,6 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x88ee5a65u, ImmutableString("textureProjGradOffset(0Q3B2B2B2C").hash32()); ASSERT_EQ(0x88ee5a65u, ImmutableString("textureProjGradOffset(0Q3B2B2B2C").hash32());
ASSERT_EQ(0x1830b4d0u, ImmutableString("textureProjGradOffset(0V3B2B2B2C").hash32()); ASSERT_EQ(0x1830b4d0u, ImmutableString("textureProjGradOffset(0V3B2B2B2C").hash32());
ASSERT_EQ(0x8e47a097u, ImmutableString("textureProjGradOffset(0Z3B1B1B1C").hash32()); ASSERT_EQ(0x8e47a097u, ImmutableString("textureProjGradOffset(0Z3B1B1B1C").hash32());
ASSERT_EQ(0xc336cfd3u, ImmutableString("texture(0L1B").hash32());
ASSERT_EQ(0x726d9e79u, ImmutableString("textureProj(0L2B").hash32());
ASSERT_EQ(0xc86a5444u, ImmutableString("textureProj(0L3B").hash32());
ASSERT_EQ(0x89b5d13eu, ImmutableString("textureSize(0L0C").hash32());
ASSERT_EQ(0xdce2d84eu, ImmutableString("texelFetch(0L1C0C").hash32());
ASSERT_EQ(0x75c877acu, ImmutableString("texture(0M1B").hash32());
ASSERT_EQ(0x5bcc4eaau, ImmutableString("textureProj(0M2B").hash32());
ASSERT_EQ(0x7dcec2c7u, ImmutableString("textureProj(0M3B").hash32());
ASSERT_EQ(0xb3da1777u, ImmutableString("rgb_2_yuv(2B0G").hash32());
ASSERT_EQ(0x7c291893u, ImmutableString("yuv_2_rgb(2B0G").hash32());
ASSERT_EQ(0x0be139b9u, ImmutableString("textureSize(0M0C").hash32());
ASSERT_EQ(0x404f56ddu, ImmutableString("texelFetch(0M1C0C").hash32());
ASSERT_EQ(0x19b1fbf8u, ImmutableString("gl_MaxVertexOutputVectors").hash32());
ASSERT_EQ(0x348a8ebfu, ImmutableString("gl_MaxFragmentInputVectors").hash32());
ASSERT_EQ(0x7b08fc96u, ImmutableString("gl_MinProgramTexelOffset").hash32());
ASSERT_EQ(0x206d8524u, ImmutableString("gl_MaxProgramTexelOffset").hash32());
ASSERT_EQ(0xaee18cb0u, ImmutableString("textureOffset(0H1B1C0B").hash32()); ASSERT_EQ(0xaee18cb0u, ImmutableString("textureOffset(0H1B1C0B").hash32());
ASSERT_EQ(0xdfde92d8u, ImmutableString("textureOffset(0P1B1C0B").hash32()); ASSERT_EQ(0xdfde92d8u, ImmutableString("textureOffset(0P1B1C0B").hash32());
ASSERT_EQ(0x563bd7d7u, ImmutableString("textureOffset(0U1B1C0B").hash32()); ASSERT_EQ(0x563bd7d7u, ImmutableString("textureOffset(0U1B1C0B").hash32());
...@@ -766,6 +711,18 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -766,6 +711,18 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x7cb00963u, ImmutableString("textureProjOffset(0Q3B2C0B").hash32()); ASSERT_EQ(0x7cb00963u, ImmutableString("textureProjOffset(0Q3B2C0B").hash32());
ASSERT_EQ(0x13b5a742u, ImmutableString("textureProjOffset(0V3B2C0B").hash32()); ASSERT_EQ(0x13b5a742u, ImmutableString("textureProjOffset(0V3B2C0B").hash32());
ASSERT_EQ(0xb1a6333du, ImmutableString("textureProjOffset(0Z3B1C0B").hash32()); ASSERT_EQ(0xb1a6333du, ImmutableString("textureProjOffset(0Z3B1C0B").hash32());
ASSERT_EQ(0xc336cfd3u, ImmutableString("texture(0L1B").hash32());
ASSERT_EQ(0x726d9e79u, ImmutableString("textureProj(0L2B").hash32());
ASSERT_EQ(0xc86a5444u, ImmutableString("textureProj(0L3B").hash32());
ASSERT_EQ(0x89b5d13eu, ImmutableString("textureSize(0L0C").hash32());
ASSERT_EQ(0xdce2d84eu, ImmutableString("texelFetch(0L1C0C").hash32());
ASSERT_EQ(0x75c877acu, ImmutableString("texture(0M1B").hash32());
ASSERT_EQ(0x5bcc4eaau, ImmutableString("textureProj(0M2B").hash32());
ASSERT_EQ(0x7dcec2c7u, ImmutableString("textureProj(0M3B").hash32());
ASSERT_EQ(0xb3da1777u, ImmutableString("rgb_2_yuv(2B0G").hash32());
ASSERT_EQ(0x7c291893u, ImmutableString("yuv_2_rgb(2B0G").hash32());
ASSERT_EQ(0x0be139b9u, ImmutableString("textureSize(0M0C").hash32());
ASSERT_EQ(0x404f56ddu, ImmutableString("texelFetch(0M1C0C").hash32());
ASSERT_EQ(0xde51954du, ImmutableString("texture(0H1B0B").hash32()); ASSERT_EQ(0xde51954du, ImmutableString("texture(0H1B0B").hash32());
ASSERT_EQ(0x38c7ba95u, ImmutableString("texture(0P1B0B").hash32()); ASSERT_EQ(0x38c7ba95u, ImmutableString("texture(0P1B0B").hash32());
ASSERT_EQ(0x042a180au, ImmutableString("texture(0U1B0B").hash32()); ASSERT_EQ(0x042a180au, ImmutableString("texture(0U1B0B").hash32());
...@@ -796,273 +753,316 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch) ...@@ -796,273 +753,316 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
ASSERT_EQ(0x3171cee2u, ImmutableString("texture(0M1B0B").hash32()); ASSERT_EQ(0x3171cee2u, ImmutableString("texture(0M1B0B").hash32());
ASSERT_EQ(0x3b753944u, ImmutableString("textureProj(0M2B0B").hash32()); ASSERT_EQ(0x3b753944u, ImmutableString("textureProj(0M2B0B").hash32());
ASSERT_EQ(0x14a54bb5u, ImmutableString("textureProj(0M3B0B").hash32()); ASSERT_EQ(0x14a54bb5u, ImmutableString("textureProj(0M3B0B").hash32());
ASSERT_EQ(0x30de4eebu, ImmutableString("dFdx(0B").hash32()); ASSERT_EQ(0x2e205f43u, ImmutableString("texelFetch(0O1C0C").hash32());
ASSERT_EQ(0x8edb114eu, ImmutableString("dFdx(1B").hash32()); ASSERT_EQ(0x83a9e786u, ImmutableString("texelFetch(0T1C0C").hash32());
ASSERT_EQ(0x80e34a09u, ImmutableString("dFdx(2B").hash32()); ASSERT_EQ(0xbbdb8c61u, ImmutableString("texelFetch(0Y1C0C").hash32());
ASSERT_EQ(0x56e0c954u, ImmutableString("dFdx(3B").hash32()); ASSERT_EQ(0x573d1826u, ImmutableString("textureGather(0H1B").hash32());
ASSERT_EQ(0x2a65dfa6u, ImmutableString("dFdy(0B").hash32()); ASSERT_EQ(0x0f61635eu, ImmutableString("textureGather(0P1B").hash32());
ASSERT_EQ(0x4c6853c3u, ImmutableString("dFdy(1B").hash32()); ASSERT_EQ(0x181a7211u, ImmutableString("textureGather(0U1B").hash32());
ASSERT_EQ(0x726ace2cu, ImmutableString("dFdy(2B").hash32()); ASSERT_EQ(0x98b5c033u, ImmutableString("textureGather(0H1B0C").hash32());
ASSERT_EQ(0x9c6d4ee1u, ImmutableString("dFdy(3B").hash32()); ASSERT_EQ(0x1230974bu, ImmutableString("textureGather(0P1B0C").hash32());
ASSERT_EQ(0xa6cba313u, ImmutableString("fwidth(0B").hash32()); ASSERT_EQ(0x047e2010u, ImmutableString("textureGather(0U1B0C").hash32());
ASSERT_EQ(0x04c9f876u, ImmutableString("fwidth(1B").hash32()); ASSERT_EQ(0x889130b4u, ImmutableString("textureGather(0K2B").hash32());
ASSERT_EQ(0xf6d09e31u, ImmutableString("fwidth(2B").hash32()); ASSERT_EQ(0x80649bccu, ImmutableString("textureGather(0S2B").hash32());
ASSERT_EQ(0xccce1d7cu, ImmutableString("fwidth(3B").hash32()); ASSERT_EQ(0x77ff0931u, ImmutableString("textureGather(0X2B").hash32());
ASSERT_EQ(0xf0b36e1du, ImmutableString("textureGather(0K2B0C").hash32());
ASSERT_EQ(0x7e927bd5u, ImmutableString("textureGather(0S2B0C").hash32());
ASSERT_EQ(0x36e78b70u, ImmutableString("textureGather(0X2B0C").hash32());
ASSERT_EQ(0xf05b183bu, ImmutableString("textureGather(0J2B").hash32());
ASSERT_EQ(0xe6f2e1d3u, ImmutableString("textureGather(0R2B").hash32());
ASSERT_EQ(0x7bff68f8u, ImmutableString("textureGather(0W2B").hash32());
ASSERT_EQ(0x91e7b756u, ImmutableString("textureGather(0J2B0C").hash32());
ASSERT_EQ(0xb00a70eeu, ImmutableString("textureGather(0R2B0C").hash32());
ASSERT_EQ(0xd840ea01u, ImmutableString("textureGather(0W2B0C").hash32());
ASSERT_EQ(0xc3dadff4u, ImmutableString("textureGather(0Z1B").hash32());
ASSERT_EQ(0xbcf1974au, ImmutableString("textureGather(0Z1B0B").hash32());
ASSERT_EQ(0xdc0090e3u, ImmutableString("textureGather(0b2B").hash32());
ASSERT_EQ(0x36e65c71u, ImmutableString("textureGather(0b2B0B").hash32());
ASSERT_EQ(0x5e97fd5au, ImmutableString("textureGather(0a2B").hash32());
ASSERT_EQ(0xafef0c94u, ImmutableString("textureGather(0a2B0B").hash32());
ASSERT_EQ(0xe3b7a4efu, ImmutableString("textureGatherOffset(0H1B1C").hash32());
ASSERT_EQ(0x38ee90d7u, ImmutableString("textureGatherOffset(0P1B1C").hash32());
ASSERT_EQ(0xf91ef410u, ImmutableString("textureGatherOffset(0U1B1C").hash32());
ASSERT_EQ(0x8fa34bcau, ImmutableString("textureGatherOffset(0H1B1C0C").hash32());
ASSERT_EQ(0xb7b5eb12u, ImmutableString("textureGatherOffset(0P1B1C0C").hash32());
ASSERT_EQ(0x59490119u, ImmutableString("textureGatherOffset(0U1B1C0C").hash32());
ASSERT_EQ(0x3f682f01u, ImmutableString("textureGatherOffset(0K2B1C").hash32());
ASSERT_EQ(0x50a3ba69u, ImmutableString("textureGatherOffset(0S2B1C").hash32());
ASSERT_EQ(0xe3bd7c3cu, ImmutableString("textureGatherOffset(0X2B1C").hash32());
ASSERT_EQ(0x899b1520u, ImmutableString("textureGatherOffset(0K2B1C0C").hash32());
ASSERT_EQ(0x01a83888u, ImmutableString("textureGatherOffset(0S2B1C0C").hash32());
ASSERT_EQ(0x38ed38e5u, ImmutableString("textureGatherOffset(0X2B1C0C").hash32());
ASSERT_EQ(0xb006f693u, ImmutableString("textureGatherOffset(0Z1B0B1C").hash32());
ASSERT_EQ(0xd26cea7cu, ImmutableString("textureGatherOffset(0b2B0B1C").hash32());
ASSERT_EQ(0x0b8d8d0eu, ImmutableString("atomicCounter(0F").hash32());
ASSERT_EQ(0xf0f5289du, ImmutableString("atomicCounterIncrement(0F").hash32());
ASSERT_EQ(0xf5adf6d1u, ImmutableString("atomicCounterDecrement(0F").hash32());
ASSERT_EQ(0x48923c61u, ImmutableString("atomicAdd(0D0D").hash32());
ASSERT_EQ(0x174429d9u, ImmutableString("atomicAdd(0C0C").hash32());
ASSERT_EQ(0x7de6c91cu, ImmutableString("atomicMin(0D0D").hash32());
ASSERT_EQ(0x2f35a524u, ImmutableString("atomicMin(0C0C").hash32());
ASSERT_EQ(0x7a93e532u, ImmutableString("atomicMax(0D0D").hash32());
ASSERT_EQ(0xf35a12fau, ImmutableString("atomicMax(0C0C").hash32());
ASSERT_EQ(0xc90f20b3u, ImmutableString("atomicAnd(0D0D").hash32());
ASSERT_EQ(0x8f5a420bu, ImmutableString("atomicAnd(0C0C").hash32());
ASSERT_EQ(0x449a297fu, ImmutableString("atomicOr(0D0D").hash32());
ASSERT_EQ(0x797c3e57u, ImmutableString("atomicOr(0C0C").hash32());
ASSERT_EQ(0xe0d1d797u, ImmutableString("atomicXor(0D0D").hash32());
ASSERT_EQ(0x16f120efu, ImmutableString("atomicXor(0C0C").hash32());
ASSERT_EQ(0x32d4301fu, ImmutableString("atomicExchange(0D0D").hash32());
ASSERT_EQ(0x68f37977u, ImmutableString("atomicExchange(0C0C").hash32());
ASSERT_EQ(0x529504a4u, ImmutableString("atomicCompSwap(0D0D0D").hash32());
ASSERT_EQ(0x0fab9dd9u, ImmutableString("atomicCompSwap(0C0C0C").hash32());
ASSERT_EQ(0xb32c4610u, ImmutableString("imageSize(0c").hash32());
ASSERT_EQ(0xba2c5115u, ImmutableString("imageSize(0d").hash32());
ASSERT_EQ(0xb92c4f82u, ImmutableString("imageSize(0e").hash32());
ASSERT_EQ(0xb82c4defu, ImmutableString("imageSize(0f").hash32());
ASSERT_EQ(0xb72c4c5cu, ImmutableString("imageSize(0g").hash32());
ASSERT_EQ(0xbe2c5761u, ImmutableString("imageSize(0h").hash32());
ASSERT_EQ(0xbd2c55ceu, ImmutableString("imageSize(0i").hash32());
ASSERT_EQ(0xbc2c543bu, ImmutableString("imageSize(0j").hash32());
ASSERT_EQ(0xbb2c52a8u, ImmutableString("imageSize(0k").hash32());
ASSERT_EQ(0xc22c5dadu, ImmutableString("imageSize(0l").hash32());
ASSERT_EQ(0xc12c5c1au, ImmutableString("imageSize(0m").hash32());
ASSERT_EQ(0xc02c5a87u, ImmutableString("imageSize(0n").hash32());
ASSERT_EQ(0x6c195e87u, ImmutableString("imageLoad(0c1C").hash32());
ASSERT_EQ(0x753e7136u, ImmutableString("imageLoad(0d1C").hash32());
ASSERT_EQ(0xa9d0e5b5u, ImmutableString("imageLoad(0e1C").hash32());
ASSERT_EQ(0x9ad4e7a3u, ImmutableString("imageLoad(0f2C").hash32());
ASSERT_EQ(0x00a05f04u, ImmutableString("imageLoad(0g2C").hash32());
ASSERT_EQ(0x11c8ccddu, ImmutableString("imageLoad(0h2C").hash32());
ASSERT_EQ(0xa7a68486u, ImmutableString("imageLoad(0i2C").hash32());
ASSERT_EQ(0x28a31a5fu, ImmutableString("imageLoad(0j2C").hash32());
ASSERT_EQ(0x8d315d40u, ImmutableString("imageLoad(0k2C").hash32());
ASSERT_EQ(0xce50b7e9u, ImmutableString("imageLoad(0l2C").hash32());
ASSERT_EQ(0x62f2ce12u, ImmutableString("imageLoad(0m2C").hash32());
ASSERT_EQ(0x243de78bu, ImmutableString("imageLoad(0n2C").hash32());
ASSERT_EQ(0xaf6251f9u, ImmutableString("imageStore(0c1C3B").hash32());
ASSERT_EQ(0x5ba8f703u, ImmutableString("imageStore(0d1C3C").hash32());
ASSERT_EQ(0xe495b7e1u, ImmutableString("imageStore(0e1C3D").hash32());
ASSERT_EQ(0x886bdcd5u, ImmutableString("imageStore(0f2C3B").hash32());
ASSERT_EQ(0xb0002869u, ImmutableString("imageStore(0g2C3C").hash32());
ASSERT_EQ(0xf0cb4011u, ImmutableString("imageStore(0h2C3D").hash32());
ASSERT_EQ(0xfa7d2618u, ImmutableString("imageStore(0i2C3B").hash32());
ASSERT_EQ(0xcf4a9cdeu, ImmutableString("imageStore(0j2C3C").hash32());
ASSERT_EQ(0x008583a0u, ImmutableString("imageStore(0k2C3D").hash32());
ASSERT_EQ(0xbaead883u, ImmutableString("imageStore(0l2C3B").hash32());
ASSERT_EQ(0xc4d9f177u, ImmutableString("imageStore(0m2C3C").hash32());
ASSERT_EQ(0xd8dff3cbu, ImmutableString("imageStore(0n2C3D").hash32());
ASSERT_EQ(0xa7570267u, ImmutableString("memoryBarrier(").hash32());
ASSERT_EQ(0xd8373034u, ImmutableString("memoryBarrierAtomicCounter(").hash32());
ASSERT_EQ(0xff425859u, ImmutableString("memoryBarrierBuffer(").hash32());
ASSERT_EQ(0xcd7ff8a6u, ImmutableString("memoryBarrierImage(").hash32());
ASSERT_EQ(0x34af0318u, ImmutableString("barrier(").hash32());
ASSERT_EQ(0x9a984c24u, ImmutableString("memoryBarrierShared(").hash32());
ASSERT_EQ(0xdf09d132u, ImmutableString("groupMemoryBarrier(").hash32());
ASSERT_EQ(0xab932950u, ImmutableString("EmitVertex(").hash32());
ASSERT_EQ(0xfa01fdedu, ImmutableString("EndPrimitive(").hash32());
ASSERT_EQ(0xa30cdef4u, ImmutableString("frexp").hash32());
ASSERT_EQ(0x8c63f160u, ImmutableString("ldexp").hash32());
ASSERT_EQ(0xae0f4e53u, ImmutableString("packUnorm4x8").hash32());
ASSERT_EQ(0x4d4a19b5u, ImmutableString("packSnorm4x8").hash32());
ASSERT_EQ(0x33b8cbf8u, ImmutableString("unpackUnorm4x8").hash32());
ASSERT_EQ(0x7c07f1eeu, ImmutableString("unpackSnorm4x8").hash32());
ASSERT_EQ(0xf50788fdu, ImmutableString("bitfieldExtract").hash32());
ASSERT_EQ(0xf81301b9u, ImmutableString("bitfieldInsert").hash32());
ASSERT_EQ(0xe5c5029au, ImmutableString("bitfieldReverse").hash32());
ASSERT_EQ(0x2568837fu, ImmutableString("bitCount").hash32());
ASSERT_EQ(0x310cbdf3u, ImmutableString("findLSB").hash32());
ASSERT_EQ(0x7ba9e270u, ImmutableString("findMSB").hash32());
ASSERT_EQ(0xca0f40eeu, ImmutableString("uaddCarry").hash32());
ASSERT_EQ(0xb82cbfe3u, ImmutableString("usubBorrow").hash32());
ASSERT_EQ(0xebfef903u, ImmutableString("umulExtended").hash32());
ASSERT_EQ(0x55fde64fu, ImmutableString("imulExtended").hash32());
ASSERT_EQ(0x44a612d1u, ImmutableString("texelFetch").hash32());
ASSERT_EQ(0xa3a03233u, ImmutableString("textureGather").hash32());
ASSERT_EQ(0xb24338c0u, ImmutableString("textureGatherOffset").hash32());
ASSERT_EQ(0xc1e02fa4u, ImmutableString("atomicCounter").hash32());
ASSERT_EQ(0x666490f9u, ImmutableString("atomicCounterIncrement").hash32());
ASSERT_EQ(0xd651bc5du, ImmutableString("atomicCounterDecrement").hash32());
ASSERT_EQ(0x026813a3u, ImmutableString("atomicAdd").hash32());
ASSERT_EQ(0x23647d3cu, ImmutableString("atomicMin").hash32());
ASSERT_EQ(0x1150d92eu, ImmutableString("atomicMax").hash32());
ASSERT_EQ(0xe676f219u, ImmutableString("atomicAnd").hash32());
ASSERT_EQ(0xd2b1c53du, ImmutableString("atomicOr").hash32());
ASSERT_EQ(0xbfd854b5u, ImmutableString("atomicXor").hash32());
ASSERT_EQ(0xb94d85ddu, ImmutableString("atomicExchange").hash32());
ASSERT_EQ(0xf3bd9210u, ImmutableString("atomicCompSwap").hash32());
ASSERT_EQ(0x6ef2b1c3u, ImmutableString("imageSize").hash32());
ASSERT_EQ(0x493c8c52u, ImmutableString("imageLoad").hash32());
ASSERT_EQ(0x4f0e8e9bu, ImmutableString("imageStore").hash32());
ASSERT_EQ(0x3815d075u, ImmutableString("memoryBarrier").hash32());
ASSERT_EQ(0xb5e7ff54u, ImmutableString("memoryBarrierAtomicCounter").hash32());
ASSERT_EQ(0x6fdf21cbu, ImmutableString("memoryBarrierBuffer").hash32());
ASSERT_EQ(0x4dafa4aau, ImmutableString("memoryBarrierImage").hash32());
ASSERT_EQ(0x3d693fa0u, ImmutableString("barrier").hash32());
ASSERT_EQ(0xe85fa9e4u, ImmutableString("memoryBarrierShared").hash32());
ASSERT_EQ(0x7afaf16eu, ImmutableString("groupMemoryBarrier").hash32());
ASSERT_EQ(0xb5d34358u, ImmutableString("EmitVertex").hash32());
ASSERT_EQ(0xb413b257u, ImmutableString("EndPrimitive").hash32());
ASSERT_EQ(0x10d2583fu, ImmutableString("sinh").hash32());
ASSERT_EQ(0xf45c461cu, ImmutableString("cosh").hash32());
ASSERT_EQ(0x092855d0u, ImmutableString("tanh").hash32());
ASSERT_EQ(0xbab19e4au, ImmutableString("asinh").hash32());
ASSERT_EQ(0xedf2c855u, ImmutableString("acosh").hash32());
ASSERT_EQ(0x07275075u, ImmutableString("atanh").hash32());
ASSERT_EQ(0x2a48023bu, ImmutableString("abs").hash32());
ASSERT_EQ(0x0cbc8ba4u, ImmutableString("sign").hash32());
ASSERT_EQ(0xd55e61e5u, ImmutableString("trunc").hash32());
ASSERT_EQ(0x4f0be23bu, ImmutableString("round").hash32());
ASSERT_EQ(0xa4639127u, ImmutableString("roundEven").hash32());
ASSERT_EQ(0xc98f4557u, ImmutableString("min").hash32());
ASSERT_EQ(0xd7a2e319u, ImmutableString("max").hash32());
ASSERT_EQ(0xa82efcbcu, ImmutableString("clamp").hash32());
ASSERT_EQ(0xd78f5b61u, ImmutableString("mix").hash32());
ASSERT_EQ(0xeb6ede7fu, ImmutableString("modf").hash32());
ASSERT_EQ(0xb1b3c06au, ImmutableString("isnan").hash32());
ASSERT_EQ(0x26ac11d8u, ImmutableString("isinf").hash32());
ASSERT_EQ(0xb15a3cc9u, ImmutableString("floatBitsToInt").hash32());
ASSERT_EQ(0xc8575388u, ImmutableString("floatBitsToUint").hash32());
ASSERT_EQ(0xfc501e17u, ImmutableString("intBitsToFloat").hash32());
ASSERT_EQ(0xc29ffa7eu, ImmutableString("uintBitsToFloat").hash32());
ASSERT_EQ(0x4326f80au, ImmutableString("packSnorm2x16").hash32());
ASSERT_EQ(0x6ff78d04u, ImmutableString("packUnorm2x16").hash32());
ASSERT_EQ(0x5bd36438u, ImmutableString("packHalf2x16").hash32());
ASSERT_EQ(0x6e02ba1bu, ImmutableString("unpackSnorm2x16").hash32());
ASSERT_EQ(0x25680679u, ImmutableString("unpackUnorm2x16").hash32());
ASSERT_EQ(0x28cedbc3u, ImmutableString("unpackHalf2x16").hash32());
ASSERT_EQ(0xd5f05125u, ImmutableString("matrixCompMult").hash32());
ASSERT_EQ(0x8f8617abu, ImmutableString("outerProduct").hash32());
ASSERT_EQ(0xc03183c0u, ImmutableString("transpose").hash32());
ASSERT_EQ(0x767e36c0u, ImmutableString("determinant").hash32());
ASSERT_EQ(0xb201f283u, ImmutableString("inverse").hash32());
ASSERT_EQ(0x05fc75c3u, ImmutableString("lessThan").hash32());
ASSERT_EQ(0x0491f109u, ImmutableString("lessThanEqual").hash32());
ASSERT_EQ(0x04644cdeu, ImmutableString("greaterThan").hash32());
ASSERT_EQ(0xed7dc722u, ImmutableString("greaterThanEqual").hash32());
ASSERT_EQ(0x2f7508efu, ImmutableString("equal").hash32());
ASSERT_EQ(0x2485bbbeu, ImmutableString("notEqual").hash32());
ASSERT_EQ(0x3c6468f4u, ImmutableString("texture").hash32());
ASSERT_EQ(0x94b08f7fu, ImmutableString("textureProj").hash32());
ASSERT_EQ(0x023feff3u, ImmutableString("textureLod").hash32());
ASSERT_EQ(0xc73e788du, ImmutableString("textureSize").hash32());
ASSERT_EQ(0xb755b482u, ImmutableString("textureProjLod").hash32());
ASSERT_EQ(0x33a56e6cu, ImmutableString("textureGrad").hash32());
ASSERT_EQ(0x7bf8de3bu, ImmutableString("textureProjGrad").hash32());
ASSERT_EQ(0x88c917cfu, ImmutableString("textureOffset").hash32());
ASSERT_EQ(0xa5212424u, ImmutableString("textureProjOffset").hash32());
ASSERT_EQ(0x39d34980u, ImmutableString("textureLodOffset").hash32());
ASSERT_EQ(0x1535b7a5u, ImmutableString("textureProjLodOffset").hash32());
ASSERT_EQ(0x12b2640eu, ImmutableString("texelFetchOffset").hash32());
ASSERT_EQ(0x6b0ca057u, ImmutableString("textureGradOffset").hash32());
ASSERT_EQ(0x8b45ed38u, ImmutableString("textureProjGradOffset").hash32());
ASSERT_EQ(0xa6789406u, ImmutableString("rgb_2_yuv").hash32());
ASSERT_EQ(0xc7818fa2u, ImmutableString("yuv_2_rgb").hash32());
ASSERT_EQ(0xc8859a8bu, ImmutableString("dFdx").hash32());
ASSERT_EQ(0xc78598f8u, ImmutableString("dFdy").hash32());
ASSERT_EQ(0x4b6e55d3u, ImmutableString("fwidth").hash32());
ASSERT_EQ(0x18a9c042u, ImmutableString("texture2D").hash32());
ASSERT_EQ(0xc7cb8969u, ImmutableString("texture2DProj").hash32());
ASSERT_EQ(0xfece2a39u, ImmutableString("textureCube").hash32());
ASSERT_EQ(0x3d4abf10u, ImmutableString("texture2DRect").hash32());
ASSERT_EQ(0x6dc0e8e3u, ImmutableString("texture2DRectProj").hash32());
ASSERT_EQ(0xd1836639u, ImmutableString("texture2DGradEXT").hash32());
ASSERT_EQ(0x4040698cu, ImmutableString("texture2DProjGradEXT").hash32());
ASSERT_EQ(0x1d18f29cu, ImmutableString("textureCubeGradEXT").hash32());
ASSERT_EQ(0x7150ceb8u, ImmutableString("texture2DLodEXT").hash32());
ASSERT_EQ(0xbacaedf7u, ImmutableString("texture2DProjLodEXT").hash32());
ASSERT_EQ(0x7309b987u, ImmutableString("textureCubeLodEXT").hash32());
ASSERT_EQ(0xfa79f401u, ImmutableString("texture2DLod").hash32());
ASSERT_EQ(0x30ed9cfcu, ImmutableString("texture2DProjLod").hash32());
ASSERT_EQ(0xb35e342cu, ImmutableString("textureCubeLod").hash32());
ASSERT_EQ(0x856a57e1u, ImmutableString("radians").hash32());
ASSERT_EQ(0xaf5442eeu, ImmutableString("degrees").hash32());
ASSERT_EQ(0xe0302a4du, ImmutableString("sin").hash32());
ASSERT_EQ(0xfb8de29cu, ImmutableString("cos").hash32());
ASSERT_EQ(0x9cf73498u, ImmutableString("tan").hash32());
ASSERT_EQ(0xfeae7ea6u, ImmutableString("asin").hash32());
ASSERT_EQ(0x3c01df1fu, ImmutableString("acos").hash32());
ASSERT_EQ(0x0678cabfu, ImmutableString("atan").hash32());
ASSERT_EQ(0x58336ad5u, ImmutableString("pow").hash32());
ASSERT_EQ(0x72a68728u, ImmutableString("exp").hash32());
ASSERT_EQ(0x3f515151u, ImmutableString("log").hash32());
ASSERT_EQ(0x9626adeeu, ImmutableString("exp2").hash32());
ASSERT_EQ(0x10031ed9u, ImmutableString("log2").hash32());
ASSERT_EQ(0x7dee3bcfu, ImmutableString("sqrt").hash32());
ASSERT_EQ(0xe8b548a5u, ImmutableString("inversesqrt").hash32());
ASSERT_EQ(0xb8e70c1du, ImmutableString("floor").hash32());
ASSERT_EQ(0x62e4e208u, ImmutableString("ceil").hash32());
ASSERT_EQ(0xeef29a67u, ImmutableString("fract").hash32());
ASSERT_EQ(0xdf9e7283u, ImmutableString("mod").hash32());
ASSERT_EQ(0xc7441a0fu, ImmutableString("step").hash32());
ASSERT_EQ(0x95964e7du, ImmutableString("smoothstep").hash32());
ASSERT_EQ(0x83d03615u, ImmutableString("length").hash32());
ASSERT_EQ(0x2eb31462u, ImmutableString("distance").hash32());
ASSERT_EQ(0xd3689f20u, ImmutableString("dot").hash32());
ASSERT_EQ(0x29f5189bu, ImmutableString("cross").hash32());
ASSERT_EQ(0xce79296cu, ImmutableString("normalize").hash32());
ASSERT_EQ(0x5fd55fe1u, ImmutableString("faceforward").hash32());
ASSERT_EQ(0x92c778aau, ImmutableString("reflect").hash32());
ASSERT_EQ(0x066c705cu, ImmutableString("refract").hash32());
ASSERT_EQ(0x2c29f04du, ImmutableString("any").hash32());
ASSERT_EQ(0x13254bc4u, ImmutableString("all").hash32());
ASSERT_EQ(0x29b19c8au, ImmutableString("not").hash32());
ASSERT_EQ(0x2c4d0487u, ImmutableString("gl_MaxImageUnits").hash32());
ASSERT_EQ(0xeacd9c77u, ImmutableString("gl_MaxVertexImageUniforms").hash32());
ASSERT_EQ(0xe9637851u, ImmutableString("gl_MaxFragmentImageUniforms").hash32());
ASSERT_EQ(0x551515f4u, ImmutableString("gl_MaxComputeImageUniforms").hash32());
ASSERT_EQ(0x37f0f1d0u, ImmutableString("gl_MaxCombinedImageUniforms").hash32());
ASSERT_EQ(0x8dd1ae75u, ImmutableString("gl_MaxCombinedShaderOutputResources").hash32());
ASSERT_EQ(0xd54f2797u, ImmutableString("gl_MaxComputeWorkGroupCount").hash32());
ASSERT_EQ(0xec875d49u, ImmutableString("gl_MaxComputeWorkGroupSize").hash32());
ASSERT_EQ(0x6c3a75d8u, ImmutableString("gl_MaxComputeUniformComponents").hash32());
ASSERT_EQ(0x029d3b2bu, ImmutableString("gl_MaxComputeTextureImageUnits").hash32());
ASSERT_EQ(0xc3a870f0u, ImmutableString("gl_MaxComputeAtomicCounters").hash32());
ASSERT_EQ(0xacde249eu, ImmutableString("gl_MaxComputeAtomicCounterBuffers").hash32());
ASSERT_EQ(0x4cbd309du, ImmutableString("gl_MaxVertexAtomicCounters").hash32());
ASSERT_EQ(0x4591b147u, ImmutableString("gl_MaxFragmentAtomicCounters").hash32());
ASSERT_EQ(0x82903444u, ImmutableString("gl_MaxCombinedAtomicCounters").hash32());
ASSERT_EQ(0x5aeafb40u, ImmutableString("gl_MaxAtomicCounterBindings").hash32());
ASSERT_EQ(0x107540dfu, ImmutableString("gl_MaxVertexAtomicCounterBuffers").hash32());
ASSERT_EQ(0xf6212c11u, ImmutableString("gl_MaxFragmentAtomicCounterBuffers").hash32());
ASSERT_EQ(0x3d856f72u, ImmutableString("gl_MaxCombinedAtomicCounterBuffers").hash32());
ASSERT_EQ(0x98a09aa9u, ImmutableString("gl_MaxAtomicCounterBufferSize").hash32());
ASSERT_EQ(0x8539932du, ImmutableString("gl_MaxGeometryInputComponents").hash32());
ASSERT_EQ(0xd26bc9eau, ImmutableString("gl_MaxGeometryOutputComponents").hash32());
ASSERT_EQ(0x3dc1da39u, ImmutableString("gl_MaxGeometryImageUniforms").hash32());
ASSERT_EQ(0x361fe182u, ImmutableString("gl_MaxGeometryTextureImageUnits").hash32());
ASSERT_EQ(0x3620853du, ImmutableString("gl_MaxGeometryOutputVertices").hash32());
ASSERT_EQ(0x9923396au, ImmutableString("gl_MaxGeometryTotalOutputComponents").hash32());
ASSERT_EQ(0xc0ec9f01u, ImmutableString("gl_MaxGeometryUniformComponents").hash32());
ASSERT_EQ(0xd96c18afu, ImmutableString("gl_MaxGeometryAtomicCounters").hash32());
ASSERT_EQ(0xe353b519u, ImmutableString("gl_MaxGeometryAtomicCounterBuffers").hash32());
ASSERT_EQ(0x7dab4220u, ImmutableString("gl_in").hash32());
ASSERT_EQ(0x56624254u, ImmutableString("gl_NumWorkGroups").hash32());
ASSERT_EQ(0x121ffe70u, ImmutableString("gl_WorkGroupSize").hash32());
ASSERT_EQ(0x6fced514u, ImmutableString("gl_WorkGroupID").hash32());
ASSERT_EQ(0x4bbe0c1du, ImmutableString("gl_LocalInvocationID").hash32());
ASSERT_EQ(0xa34369b3u, ImmutableString("gl_GlobalInvocationID").hash32());
ASSERT_EQ(0x99f53c3cu, ImmutableString("gl_LocalInvocationIndex").hash32());
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(0x19b1fbf8u, ImmutableString("gl_MaxVertexOutputVectors").hash32());
ASSERT_EQ(0x348a8ebfu, ImmutableString("gl_MaxFragmentInputVectors").hash32());
ASSERT_EQ(0x7b08fc96u, ImmutableString("gl_MinProgramTexelOffset").hash32());
ASSERT_EQ(0x206d8524u, ImmutableString("gl_MaxProgramTexelOffset").hash32());
ASSERT_EQ(0x88103c08u, ImmutableString("gl_FragDepth").hash32()); ASSERT_EQ(0x88103c08u, ImmutableString("gl_FragDepth").hash32());
ASSERT_EQ(0x7e8a502du, ImmutableString("gl_InstanceID").hash32()); ASSERT_EQ(0x7e8a502du, ImmutableString("gl_InstanceID").hash32());
ASSERT_EQ(0xf39cf560u, ImmutableString("gl_VertexID").hash32()); ASSERT_EQ(0xf39cf560u, ImmutableString("gl_VertexID").hash32());
ASSERT_EQ(0xec388c2du, ImmutableString("gl_ViewID_OVR").hash32()); ASSERT_EQ(0xec388c2du, ImmutableString("gl_ViewID_OVR").hash32());
ASSERT_EQ(0x2c852cb5u, ImmutableString("texture2D(0H1B").hash32());
ASSERT_EQ(0xd6d4ae73u, ImmutableString("texture2DProj(0H2B").hash32());
ASSERT_EQ(0xb4d23a56u, ImmutableString("texture2DProj(0H3B").hash32());
ASSERT_EQ(0x11ea9d29u, ImmutableString("textureCube(0J2B").hash32());
ASSERT_EQ(0xe7d17641u, ImmutableString("texture2D(0L1B").hash32());
ASSERT_EQ(0x5270451fu, ImmutableString("texture2DProj(0L2B").hash32());
ASSERT_EQ(0xb06d0782u, ImmutableString("texture2DProj(0L3B").hash32());
ASSERT_EQ(0x05cd2a61u, ImmutableString("texture2DRect(0N1B").hash32());
ASSERT_EQ(0xc97a55d7u, ImmutableString("texture2DRectProj(0N2B").hash32());
ASSERT_EQ(0xa777e1bau, ImmutableString("texture2DRectProj(0N3B").hash32());
ASSERT_EQ(0x72093d38u, ImmutableString("texture2DGradEXT(0H1B1B1B").hash32());
ASSERT_EQ(0xabd48fdcu, ImmutableString("texture2DProjGradEXT(0H2B1B1B").hash32());
ASSERT_EQ(0x33484f89u, ImmutableString("texture2DProjGradEXT(0H3B1B1B").hash32());
ASSERT_EQ(0x79171da6u, ImmutableString("textureCubeGradEXT(0J2B2B2B").hash32());
ASSERT_EQ(0xd87bae2bu, ImmutableString("gl_MaxVaryingVectors").hash32()); ASSERT_EQ(0xd87bae2bu, ImmutableString("gl_MaxVaryingVectors").hash32());
ASSERT_EQ(0x4153e697u, ImmutableString("gl_FragData").hash32()); ASSERT_EQ(0x4153e697u, ImmutableString("gl_FragData").hash32());
ASSERT_EQ(0x9dae09f6u, ImmutableString("gl_SecondaryFragDataEXT").hash32()); ASSERT_EQ(0x9dae09f6u, ImmutableString("gl_SecondaryFragDataEXT").hash32());
ASSERT_EQ(0x86a48dcbu, ImmutableString("gl_FragDepthEXT").hash32()); ASSERT_EQ(0x86a48dcbu, ImmutableString("gl_FragDepthEXT").hash32());
ASSERT_EQ(0x8ee03ca7u, ImmutableString("texture2D(0H1B0B").hash32());
ASSERT_EQ(0x88cd05e1u, ImmutableString("texture2DProj(0H2B0B").hash32());
ASSERT_EQ(0x30daf170u, ImmutableString("texture2DProj(0H3B0B").hash32());
ASSERT_EQ(0xd649f15bu, ImmutableString("textureCube(0J2B0B").hash32());
ASSERT_EQ(0x8682af79u, ImmutableString("texture2DLodEXT(0H1B0B").hash32());
ASSERT_EQ(0xc117a53fu, ImmutableString("texture2DProjLodEXT(0H2B0B").hash32());
ASSERT_EQ(0x39021baeu, ImmutableString("texture2DProjLodEXT(0H3B0B").hash32());
ASSERT_EQ(0x43f81965u, ImmutableString("textureCubeLodEXT(0J2B0B").hash32());
ASSERT_EQ(0x1af4d39eu, ImmutableString("gl_FragColor").hash32()); ASSERT_EQ(0x1af4d39eu, ImmutableString("gl_FragColor").hash32());
ASSERT_EQ(0x0cf3085au, ImmutableString("texture2DLod(0H1B0B").hash32());
ASSERT_EQ(0x8ea43616u, ImmutableString("texture2DProjLod(0H2B0B").hash32());
ASSERT_EQ(0x157c8b27u, ImmutableString("texture2DProjLod(0H3B0B").hash32());
ASSERT_EQ(0x8238ae88u, ImmutableString("textureCubeLod(0J2B0B").hash32());
ASSERT_EQ(0xae48fef9u, ImmutableString("gl_SecondaryFragColorEXT").hash32()); ASSERT_EQ(0xae48fef9u, ImmutableString("gl_SecondaryFragColorEXT").hash32());
ASSERT_EQ(0x2ca6b5f7u, ImmutableString("gl_LastFragData").hash32()); ASSERT_EQ(0x2ca6b5f7u, ImmutableString("gl_LastFragData").hash32());
ASSERT_EQ(0x048d047eu, ImmutableString("gl_LastFragColor").hash32()); ASSERT_EQ(0x048d047eu, ImmutableString("gl_LastFragColor").hash32());
ASSERT_EQ(0xe1ad07e0u, ImmutableString("gl_LastFragColorARM").hash32()); ASSERT_EQ(0xe1ad07e0u, ImmutableString("gl_LastFragColorARM").hash32());
ASSERT_EQ(0x5ff73ab9u, ImmutableString("radians(0B").hash32());
ASSERT_EQ(0xb5f58384u, ImmutableString("radians(1B").hash32());
ASSERT_EQ(0x8ff3091bu, ImmutableString("radians(2B").hash32());
ASSERT_EQ(0x6df094feu, ImmutableString("radians(3B").hash32());
ASSERT_EQ(0x57cd6fecu, ImmutableString("degrees(0B").hash32());
ASSERT_EQ(0x81cff0a1u, ImmutableString("degrees(1B").hash32());
ASSERT_EQ(0x0fc88166u, ImmutableString("degrees(2B").hash32());
ASSERT_EQ(0x31caf583u, ImmutableString("degrees(3B").hash32());
ASSERT_EQ(0x8a07b54du, ImmutableString("sin(0B").hash32());
ASSERT_EQ(0x60053498u, ImmutableString("sin(1B").hash32());
ASSERT_EQ(0xba0383afu, ImmutableString("sin(2B").hash32());
ASSERT_EQ(0x98010f92u, ImmutableString("sin(3B").hash32());
ASSERT_EQ(0xcff55532u, ImmutableString("cos(0B").hash32());
ASSERT_EQ(0xf1f7c94fu, ImmutableString("cos(1B").hash32());
ASSERT_EQ(0x17fa43b8u, ImmutableString("cos(2B").hash32());
ASSERT_EQ(0x41fcc46du, ImmutableString("cos(3B").hash32());
ASSERT_EQ(0xee8ac486u, ImmutableString("tan(0B").hash32());
ASSERT_EQ(0x108d38a3u, ImmutableString("tan(1B").hash32());
ASSERT_EQ(0xb6907c8cu, ImmutableString("tan(2B").hash32());
ASSERT_EQ(0xe092fd41u, ImmutableString("tan(3B").hash32());
ASSERT_EQ(0x95a6e964u, ImmutableString("asin(0B").hash32());
ASSERT_EQ(0xbfa96a19u, ImmutableString("asin(1B").hash32());
ASSERT_EQ(0xcda2c45eu, ImmutableString("asin(2B").hash32());
ASSERT_EQ(0xefa5387bu, ImmutableString("asin(3B").hash32());
ASSERT_EQ(0x5f31e247u, ImmutableString("acos(0B").hash32());
ASSERT_EQ(0x3d2f6e2au, ImmutableString("acos(1B").hash32());
ASSERT_EQ(0x2f3613e5u, ImmutableString("acos(2B").hash32());
ASSERT_EQ(0x05339330u, ImmutableString("acos(3B").hash32());
ASSERT_EQ(0x82c5e6d5u, ImmutableString("atan(0B0B").hash32());
ASSERT_EQ(0x54d4c019u, ImmutableString("atan(1B1B").hash32());
ASSERT_EQ(0xdeb59d35u, ImmutableString("atan(2B2B").hash32());
ASSERT_EQ(0x0548e241u, ImmutableString("atan(3B3B").hash32());
ASSERT_EQ(0x8e3d93a7u, ImmutableString("atan(0B").hash32());
ASSERT_EQ(0x6c3b1f8au, ImmutableString("atan(1B").hash32());
ASSERT_EQ(0x5e435845u, ImmutableString("atan(2B").hash32());
ASSERT_EQ(0xb4400e10u, ImmutableString("atan(3B").hash32());
ASSERT_EQ(0xd4d6b527u, ImmutableString("pow(0B0B").hash32());
ASSERT_EQ(0x7000d433u, ImmutableString("pow(1B1B").hash32());
ASSERT_EQ(0x60d77e47u, ImmutableString("pow(2B2B").hash32());
ASSERT_EQ(0x31a9230bu, ImmutableString("pow(3B3B").hash32());
ASSERT_EQ(0xb3a5e896u, ImmutableString("exp(0B").hash32());
ASSERT_EQ(0xd5a85cb3u, ImmutableString("exp(1B").hash32());
ASSERT_EQ(0xfbaad71cu, ImmutableString("exp(2B").hash32());
ASSERT_EQ(0xa5ac8e51u, ImmutableString("exp(3B").hash32());
ASSERT_EQ(0x0b09eda9u, ImmutableString("log(0B").hash32());
ASSERT_EQ(0x6106a374u, ImmutableString("log(1B").hash32());
ASSERT_EQ(0x3b04290bu, ImmutableString("log(2B").hash32());
ASSERT_EQ(0x1901b4eeu, ImmutableString("log(3B").hash32());
ASSERT_EQ(0x3a43c8ecu, ImmutableString("exp2(0B").hash32());
ASSERT_EQ(0x644649a1u, ImmutableString("exp2(1B").hash32());
ASSERT_EQ(0xf23eda66u, ImmutableString("exp2(2B").hash32());
ASSERT_EQ(0x14414e83u, ImmutableString("exp2(3B").hash32());
ASSERT_EQ(0xebeb54f1u, ImmutableString("log2(0B").hash32());
ASSERT_EQ(0xc1e8d43cu, ImmutableString("log2(1B").hash32());
ASSERT_EQ(0x9be659d3u, ImmutableString("log2(2B").hash32());
ASSERT_EQ(0xf9e31c36u, ImmutableString("log2(3B").hash32());
ASSERT_EQ(0x1a10ccb7u, ImmutableString("sqrt(0B").hash32());
ASSERT_EQ(0x780d8f1au, ImmutableString("sqrt(1B").hash32());
ASSERT_EQ(0x6a15c7d5u, ImmutableString("sqrt(2B").hash32());
ASSERT_EQ(0x40134720u, ImmutableString("sqrt(3B").hash32());
ASSERT_EQ(0xe50d8305u, ImmutableString("inversesqrt(0B").hash32());
ASSERT_EQ(0x3b0bcbd0u, ImmutableString("inversesqrt(1B").hash32());
ASSERT_EQ(0x15095167u, ImmutableString("inversesqrt(2B").hash32());
ASSERT_EQ(0xf306dd4au, ImmutableString("inversesqrt(3B").hash32());
ASSERT_EQ(0x11769f9bu, ImmutableString("abs(0B").hash32());
ASSERT_EQ(0xef742b7eu, ImmutableString("abs(1B").hash32());
ASSERT_EQ(0xe17ad139u, ImmutableString("abs(2B").hash32());
ASSERT_EQ(0x37791a04u, ImmutableString("abs(3B").hash32());
ASSERT_EQ(0xba70875au, ImmutableString("sign(0B").hash32());
ASSERT_EQ(0x5c7231f7u, ImmutableString("sign(1B").hash32());
ASSERT_EQ(0x8274ac60u, ImmutableString("sign(2B").hash32());
ASSERT_EQ(0xac772d15u, ImmutableString("sign(3B").hash32());
ASSERT_EQ(0x68b063ddu, ImmutableString("floor(0B").hash32());
ASSERT_EQ(0xbead19a8u, ImmutableString("floor(1B").hash32());
ASSERT_EQ(0x98aa9f3fu, ImmutableString("floor(2B").hash32());
ASSERT_EQ(0x76a82b22u, ImmutableString("floor(3B").hash32());
ASSERT_EQ(0x4dc29736u, ImmutableString("ceil(0B").hash32());
ASSERT_EQ(0xefc5d4d3u, ImmutableString("ceil(1B").hash32());
ASSERT_EQ(0x15c84f3cu, ImmutableString("ceil(2B").hash32());
ASSERT_EQ(0x3fcacff1u, ImmutableString("ceil(3B").hash32());
ASSERT_EQ(0x061a7a4fu, ImmutableString("fract(0B").hash32());
ASSERT_EQ(0xe4180632u, ImmutableString("fract(1B").hash32());
ASSERT_EQ(0x561f756du, ImmutableString("fract(2B").hash32());
ASSERT_EQ(0x2c1cf4b8u, ImmutableString("fract(3B").hash32());
ASSERT_EQ(0xed15f051u, ImmutableString("mod(0B0B").hash32());
ASSERT_EQ(0x13e5dde0u, ImmutableString("mod(1B0B").hash32());
ASSERT_EQ(0x046a9b13u, ImmutableString("mod(2B0B").hash32());
ASSERT_EQ(0xbca39522u, ImmutableString("mod(3B0B").hash32());
ASSERT_EQ(0x3de85e95u, ImmutableString("mod(1B1B").hash32());
ASSERT_EQ(0x546f9631u, ImmutableString("mod(2B2B").hash32());
ASSERT_EQ(0xaeabcdddu, ImmutableString("mod(3B3B").hash32());
ASSERT_EQ(0x3b8c728du, ImmutableString("min(0B0B").hash32());
ASSERT_EQ(0x23497dfcu, ImmutableString("min(1B0B").hash32());
ASSERT_EQ(0xc777f74fu, ImmutableString("min(2B0B").hash32());
ASSERT_EQ(0xcc07353eu, ImmutableString("min(3B0B").hash32());
ASSERT_EQ(0x4d4bfeb1u, ImmutableString("min(1B1B").hash32());
ASSERT_EQ(0x177cf26du, ImmutableString("min(2B2B").hash32());
ASSERT_EQ(0xbe0f6df9u, ImmutableString("min(3B3B").hash32());
ASSERT_EQ(0xe7f2b603u, ImmutableString("max(0B0B").hash32());
ASSERT_EQ(0xa02bb012u, ImmutableString("max(1B0B").hash32());
ASSERT_EQ(0xd09e0b41u, ImmutableString("max(2B0B").hash32());
ASSERT_EQ(0x6ac79e50u, ImmutableString("max(3B0B").hash32());
ASSERT_EQ(0xc22e242fu, ImmutableString("max(1B1B").hash32());
ASSERT_EQ(0x009846a3u, ImmutableString("max(2B2B").hash32());
ASSERT_EQ(0x44c523e7u, ImmutableString("max(3B3B").hash32());
ASSERT_EQ(0xbe16c602u, ImmutableString("clamp(0B0B0B").hash32());
ASSERT_EQ(0x5e39910fu, ImmutableString("clamp(1B0B0B").hash32());
ASSERT_EQ(0xccc2d6c8u, ImmutableString("clamp(2B0B0B").hash32());
ASSERT_EQ(0xb154856du, ImmutableString("clamp(3B0B0B").hash32());
ASSERT_EQ(0x6b80211bu, ImmutableString("clamp(1B1B1B").hash32());
ASSERT_EQ(0xf0909e70u, ImmutableString("clamp(2B2B2B").hash32());
ASSERT_EQ(0x33d780d9u, ImmutableString("clamp(3B3B3B").hash32());
ASSERT_EQ(0xb5c1d059u, ImmutableString("mix(0B0B0B").hash32());
ASSERT_EQ(0x1f8d8da5u, ImmutableString("mix(1B1B0B").hash32());
ASSERT_EQ(0x60348539u, ImmutableString("mix(2B2B0B").hash32());
ASSERT_EQ(0xc398271du, ImmutableString("mix(3B3B0B").hash32());
ASSERT_EQ(0xf58b0cf0u, ImmutableString("mix(1B1B1B").hash32());
ASSERT_EQ(0x9030539bu, ImmutableString("mix(2B2B2B").hash32());
ASSERT_EQ(0xd1918162u, ImmutableString("mix(3B3B3B").hash32());
ASSERT_EQ(0xccdc3d05u, ImmutableString("step(0B0B").hash32());
ASSERT_EQ(0x92458549u, ImmutableString("step(1B1B").hash32());
ASSERT_EQ(0x35731765u, ImmutableString("step(2B2B").hash32());
ASSERT_EQ(0xcf6001f1u, ImmutableString("step(3B3B").hash32());
ASSERT_EQ(0x22da85d0u, ImmutableString("step(0B1B").hash32());
ASSERT_EQ(0xfcd80b67u, ImmutableString("step(0B2B").hash32());
ASSERT_EQ(0xdad5974au, ImmutableString("step(0B3B").hash32());
ASSERT_EQ(0xbdc5079du, ImmutableString("smoothstep(0B0B0B").hash32());
ASSERT_EQ(0x29eb2c34u, ImmutableString("smoothstep(1B1B1B").hash32());
ASSERT_EQ(0x45ccdddfu, ImmutableString("smoothstep(2B2B2B").hash32());
ASSERT_EQ(0x372206a6u, ImmutableString("smoothstep(3B3B3B").hash32());
ASSERT_EQ(0x13c35068u, ImmutableString("smoothstep(0B0B1B").hash32());
ASSERT_EQ(0xedc0d5ffu, ImmutableString("smoothstep(0B0B2B").hash32());
ASSERT_EQ(0xcbbe61e2u, ImmutableString("smoothstep(0B0B3B").hash32());
ASSERT_EQ(0x1731e675u, ImmutableString("length(0B").hash32());
ASSERT_EQ(0xed2f65c0u, ImmutableString("length(1B").hash32());
ASSERT_EQ(0x472c21d7u, ImmutableString("length(2B").hash32());
ASSERT_EQ(0x2529adbau, ImmutableString("length(3B").hash32());
ASSERT_EQ(0x97b032ceu, ImmutableString("distance(0B0B").hash32());
ASSERT_EQ(0xfdc4db42u, ImmutableString("distance(1B1B").hash32());
ASSERT_EQ(0x1a473286u, ImmutableString("distance(2B2B").hash32());
ASSERT_EQ(0x0887a662u, ImmutableString("distance(3B3B").hash32());
ASSERT_EQ(0xa05f6bc8u, ImmutableString("dot(0B0B").hash32());
ASSERT_EQ(0x41aa3804u, ImmutableString("dot(1B1B").hash32());
ASSERT_EQ(0xc42d3370u, ImmutableString("dot(2B2B").hash32());
ASSERT_EQ(0x2a4048e4u, ImmutableString("dot(3B3B").hash32());
ASSERT_EQ(0x4c9b39c9u, ImmutableString("cross(2B2B").hash32());
ASSERT_EQ(0xa2e83502u, ImmutableString("normalize(0B").hash32());
ASSERT_EQ(0x44eb729fu, ImmutableString("normalize(1B").hash32());
ASSERT_EQ(0x6aeded08u, ImmutableString("normalize(2B").hash32());
ASSERT_EQ(0x94f06dbdu, ImmutableString("normalize(3B").hash32());
ASSERT_EQ(0xfa8639d9u, ImmutableString("faceforward(0B0B0B").hash32());
ASSERT_EQ(0x3a4f7670u, ImmutableString("faceforward(1B1B1B").hash32());
ASSERT_EQ(0xd4f4bd1bu, ImmutableString("faceforward(2B2B2B").hash32());
ASSERT_EQ(0x1655eae2u, ImmutableString("faceforward(3B3B3B").hash32());
ASSERT_EQ(0x641f1576u, ImmutableString("reflect(0B0B").hash32());
ASSERT_EQ(0xca322aeau, ImmutableString("reflect(1B1B").hash32());
ASSERT_EQ(0x40514dceu, ImmutableString("reflect(2B2B").hash32());
ASSERT_EQ(0x619b508au, ImmutableString("reflect(3B3B").hash32());
ASSERT_EQ(0x762ec4e2u, ImmutableString("refract(0B0B0B").hash32());
ASSERT_EQ(0x0c4b44deu, ImmutableString("refract(1B1B0B").hash32());
ASSERT_EQ(0x3446c6cau, ImmutableString("refract(2B2B0B").hash32());
ASSERT_EQ(0x343e737eu, ImmutableString("refract(3B3B0B").hash32());
ASSERT_EQ(0x2530925bu, ImmutableString("matrixCompMult(5B5B").hash32());
ASSERT_EQ(0xce0b0283u, ImmutableString("matrixCompMult(ABAB").hash32());
ASSERT_EQ(0x646d7617u, ImmutableString("matrixCompMult(FBFB").hash32());
ASSERT_EQ(0x35d2bc55u, ImmutableString("lessThan(1B1B").hash32());
ASSERT_EQ(0x4c59f3f1u, ImmutableString("lessThan(2B2B").hash32());
ASSERT_EQ(0xa694989du, ImmutableString("lessThan(3B3B").hash32());
ASSERT_EQ(0x69652f41u, ImmutableString("lessThan(1C1C").hash32());
ASSERT_EQ(0xf707f2d5u, ImmutableString("lessThan(2C2C").hash32());
ASSERT_EQ(0x421d21e5u, ImmutableString("lessThan(3C3C").hash32());
ASSERT_EQ(0xbb7abcffu, ImmutableString("lessThanEqual(1B1B").hash32());
ASSERT_EQ(0xf9e4df73u, ImmutableString("lessThanEqual(2B2B").hash32());
ASSERT_EQ(0xcab81737u, ImmutableString("lessThanEqual(3B3B").hash32());
ASSERT_EQ(0xef0d2febu, ImmutableString("lessThanEqual(1C1C").hash32());
ASSERT_EQ(0x931af97fu, ImmutableString("lessThanEqual(2C2C").hash32());
ASSERT_EQ(0x965473c7u, ImmutableString("lessThanEqual(3C3C").hash32());
ASSERT_EQ(0x2e4fef86u, ImmutableString("greaterThan(1B1B").hash32());
ASSERT_EQ(0xa46f126au, ImmutableString("greaterThan(2B2B").hash32());
ASSERT_EQ(0x525f6fa6u, ImmutableString("greaterThan(3B3B").hash32());
ASSERT_EQ(0xb9cf953au, ImmutableString("greaterThan(1C1C").hash32());
ASSERT_EQ(0xba1060a6u, ImmutableString("greaterThan(2C2C").hash32());
ASSERT_EQ(0x36d7afdeu, ImmutableString("greaterThan(3C3C").hash32());
ASSERT_EQ(0x98571f82u, ImmutableString("greaterThanEqual(1B1B").hash32());
ASSERT_EQ(0xce27bec6u, ImmutableString("greaterThanEqual(2B2B").hash32());
ASSERT_EQ(0xbc669fa2u, ImmutableString("greaterThanEqual(3B3B").hash32());
ASSERT_EQ(0xe3884196u, ImmutableString("greaterThanEqual(1C1C").hash32());
ASSERT_EQ(0x63c84382u, ImmutableString("greaterThanEqual(2C2C").hash32());
ASSERT_EQ(0xa0dedfdau, ImmutableString("greaterThanEqual(3C3C").hash32());
ASSERT_EQ(0xf68b9ca9u, ImmutableString("equal(1B1B").hash32());
ASSERT_EQ(0x99b92ec5u, ImmutableString("equal(2B2B").hash32());
ASSERT_EQ(0x34e1bad1u, ImmutableString("equal(3B3B").hash32());
ASSERT_EQ(0xab5a7a95u, ImmutableString("equal(1C1C").hash32());
ASSERT_EQ(0x8417e089u, ImmutableString("equal(2C2C").hash32());
ASSERT_EQ(0xd06a4419u, ImmutableString("equal(3C3C").hash32());
ASSERT_EQ(0xeba3b9c1u, ImmutableString("equal(1E1E").hash32());
ASSERT_EQ(0xdc6a3fd9u, ImmutableString("equal(2E2E").hash32());
ASSERT_EQ(0x242c7b45u, ImmutableString("equal(3E3E").hash32());
ASSERT_EQ(0x58ce58e6u, ImmutableString("notEqual(1B1B").hash32());
ASSERT_EQ(0xb5a0c6cau, ImmutableString("notEqual(2B2B").hash32());
ASSERT_EQ(0x7173e986u, ImmutableString("notEqual(3B3B").hash32());
ASSERT_EQ(0x658a699au, ImmutableString("notEqual(1C1C").hash32());
ASSERT_EQ(0x4c7e8006u, ImmutableString("notEqual(2C2C").hash32());
ASSERT_EQ(0xd5eb603eu, ImmutableString("notEqual(3C3C").hash32());
ASSERT_EQ(0x1da7dd5eu, ImmutableString("notEqual(1E1E").hash32());
ASSERT_EQ(0x2ba422c6u, ImmutableString("notEqual(2E2E").hash32());
ASSERT_EQ(0x785bc622u, ImmutableString("notEqual(3E3E").hash32());
ASSERT_EQ(0x32a4419du, ImmutableString("any(1E").hash32());
ASSERT_EQ(0x82a280f6u, ImmutableString("any(2E").hash32());
ASSERT_EQ(0x5ea009b3u, ImmutableString("any(3E").hash32());
ASSERT_EQ(0x0f84439eu, ImmutableString("all(1E").hash32());
ASSERT_EQ(0xbf879745u, ImmutableString("all(2E").hash32());
ASSERT_EQ(0xdb8a01f0u, ImmutableString("all(3E").hash32());
ASSERT_EQ(0xde93f470u, ImmutableString("not(1E").hash32());
ASSERT_EQ(0xee8bbedbu, ImmutableString("not(2E").hash32());
ASSERT_EQ(0x128e361eu, ImmutableString("not(3E").hash32());
ASSERT_EQ(0xdcd239f5u, ImmutableString("gl_DepthRangeParameters").hash32()); ASSERT_EQ(0xdcd239f5u, ImmutableString("gl_DepthRangeParameters").hash32());
ASSERT_EQ(0x5c63b321u, ImmutableString("gl_DepthRange").hash32()); ASSERT_EQ(0x5c63b321u, ImmutableString("gl_DepthRange").hash32());
ASSERT_EQ(0x5a89e3d6u, ImmutableString("gl_MaxVertexAttribs").hash32()); ASSERT_EQ(0x5a89e3d6u, ImmutableString("gl_MaxVertexAttribs").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