Identify functions by unique id in BuiltInFunctionEmulator

Now that unique ids of all builtins are compile-time constants, we can
use them to look up functions in BuiltInFunctionEmulator. This is
simpler than using a custom struct with the name and parameters for
identifying functions.

This requires that we store a reference to a TFunction in those
TIntermUnary nodes that were created based on a function.

This decreases shader_translator binary size by about 6 KB on Windows.

BUG=angleproject:2267
BUG=chromium:823856
TEST=angle_unittests

Change-Id: Idd5a00c772c6f26dd36fdbbfbe161d22ab27c2fe
Reviewed-on: https://chromium-review.googlesource.com/995372
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/scripts/run_code_generation.py b/scripts/run_code_generation.py
index bd073f3..a3b9ee7 100755
--- a/scripts/run_code_generation.py
+++ b/scripts/run_code_generation.py
@@ -156,6 +156,15 @@
         ],
         'script': 'src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py',
     },
+    'Emulated HLSL functions': {
+        'inputs': [
+            'src/compiler/translator/emulated_builtin_function_data_hlsl.json'
+        ],
+        'outputs': [
+            'src/compiler/translator/emulated_builtin_functions_hlsl_autogen.cpp'
+        ],
+        'script': 'src/compiler/translator/gen_emulated_builtin_function_tables.py'
+    },
     'ESSL static builtins': {
         'inputs': [
             'src/compiler/translator/builtin_function_declarations.txt',