Vulkan: Update build files after roll.

They have consolidated to one helper script generator. Simplifies the
GN build. This also re-enables the Vulkan back-end after the roll.

BUG=angleproject:1319

Change-Id: Ie98568ae5d1dc46932ea8d698809561da7591836
Reviewed-on: https://chromium-review.googlesource.com/427307
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/gni/angle.gni b/gni/angle.gni
index 7650778..a5fa07a 100644
--- a/gni/angle.gni
+++ b/gni/angle.gni
@@ -15,8 +15,7 @@
   angle_enable_d3d9 = true
   angle_enable_d3d11 = true
   angle_enable_gl = true
-  # TODO(jmadill): Re-enable Vulkan after roll.
-  angle_enable_vulkan = false
+  angle_enable_vulkan = true
 
   import("//build/config/win/visual_studio_version.gni")
 } else if (is_linux && use_x11 && !is_chromeos) {
diff --git a/src/angle.gyp b/src/angle.gyp
index e57c6d0..95b0062 100644
--- a/src/angle.gyp
+++ b/src/angle.gyp
@@ -30,8 +30,7 @@
                 'angle_enable_d3d9%': 1,
                 'angle_enable_d3d11%': 1,
                 'angle_enable_hlsl%': 1,
-                # TODO(jmadill): Re-enable Vulkan after roll.
-                'angle_enable_vulkan%': 0,
+                'angle_enable_vulkan%': 1,
             }],
             ['OS=="linux" and use_x11==1 and chromeos==0',
             {
diff --git a/src/vulkan_support/BUILD.gn b/src/vulkan_support/BUILD.gn
index 2b41f68..2e6281b 100644
--- a/src/vulkan_support/BUILD.gn
+++ b/src/vulkan_support/BUILD.gn
@@ -81,58 +81,78 @@
   configs -= vulkan_undefine_configs
 }
 
-action("vulkan_gen_dispatch_table_helper") {
-  script = "$vulkan_layers_dir/scripts/lvl_genvk.py"
-  inputs = [
-    "$vulkan_layers_dir/scripts/dispatch_table_generator.py",
-    "$vulkan_layers_dir/scripts/generator.py",
-    "$vulkan_layers_dir/scripts/reg.py",
-    "$vulkan_layers_dir/scripts/vk.xml",
-    "$vulkan_layers_dir/scripts/vulkan.py",
-  ]
-  outputs = [
-    "$vulkan_gen_dir/vk_dispatch_table_helper.h",
-  ]
-  args = [
-    "-o",
-    raw_vulkan_gen_dir,
-    "-registry",
-    "$raw_vulkan_layers_dir/scripts/vk.xml",
+helper_script_and_deps = [
+  [
+    "vulkan_gen_dispatch_table_helper",
     "vk_dispatch_table_helper.h",
-    "-quiet",
-  ]
-}
+    "dispatch_table_generator.py",
+  ],
+  [
+    "vulkan_gen_enum_string_helper",
+    "vk_enum_string_helper.h",
+    "helper_file_generator.py",
+  ],
+  [
+    "vulkan_gen_safe_struct_cpp",
+    "vk_safe_struct.cpp",
+    "helper_file_generator.py",
+  ],
+  [
+    "vulkan_gen_safe_struct_h",
+    "vk_safe_struct.h",
+    "helper_file_generator.py",
+  ],
+  [
+    "vulkan_gen_struct_size_helper_c",
+    "vk_struct_size_helper.c",
+    "helper_file_generator.py",
+  ],
+  [
+    "vulkan_gen_struct_size_helper_h",
+    "vk_struct_size_helper.h",
+    "helper_file_generator.py",
+  ],
+  [
+    "vulkan_gen_thread_check_helper",
+    "thread_check.h",
+    "threading_generator.py",
+  ],
+  [
+    "vulkan_gen_parameter_validation_helper",
+    "parameter_validation.h",
+    "parameter_validation_generator.py",
+  ],
+  [
+    "vulkan_gen_unique_objects_wrappers_helper",
+    "unique_objects_wrappers.h",
+    "unique_objects_generator.py",
+  ],
+]
 
-action("vulkan_gen_struct_wrappers") {
-  script = "$vulkan_layers_dir/scripts/vk_helper.py"
-  inputs = [
-    "$vulkan_layers_dir/include/vulkan/vulkan.h",
-  ]
-  outputs = vulkan_gypi.vulkan_struct_wrappers_outputs
-  args = [
-    "--gen_struct_wrappers",
-    rebase_path(vulkan_layers_dir) + "/include/vulkan/vulkan.h",
-    "--abs_out_dir",
-    raw_vulkan_gen_dir,
-    "--quiet",
-  ]
-}
-
-action("vulkan_gen_enum_string_helper") {
-  script = "$vulkan_layers_dir/scripts/vk_helper.py"
-  inputs = [
-    "$vulkan_layers_dir/include/vulkan/vulkan.h",
-  ]
-  outputs = [
-    "$vulkan_gen_dir/vk_enum_string_helper.h",
-  ]
-  args = [
-    "--gen_enum_string_helper",
-    rebase_path(vulkan_layers_dir) + "/include/vulkan/vulkan.h",
-    "--abs_out_dir",
-    raw_vulkan_gen_dir,
-    "--quiet",
-  ]
+foreach(script_and_dep, helper_script_and_deps) {
+  target_name = script_and_dep[0]
+  file = script_and_dep[1]
+  dep = script_and_dep[2]
+  target("action", target_name) {
+    script = "$vulkan_layers_dir/scripts/lvl_genvk.py"
+    inputs = [
+      "$vulkan_layers_dir/scripts/$dep",
+      "$vulkan_layers_dir/scripts/generator.py",
+      "$vulkan_layers_dir/scripts/reg.py",
+      "$vulkan_layers_dir/scripts/vk.xml",
+    ]
+    outputs = [
+      "$vulkan_gen_dir/$file",
+    ]
+    args = [
+      "-o",
+      raw_vulkan_gen_dir,
+      "-registry",
+      "$raw_vulkan_layers_dir/scripts/vk.xml",
+      "$file",
+      "-quiet",
+    ]
+  }
 }
 
 config("vulkan_layer_config") {
@@ -145,11 +165,12 @@
 source_set("vulkan_layer_table") {
   configs -= vulkan_undefine_configs
   public_deps = [
-    ":vulkan_gen_dispatch_table_helper",
-    ":vulkan_gen_enum_string_helper",
-    ":vulkan_gen_struct_wrappers",
     ":vulkan_layer_utils",
   ]
+  foreach(script_and_dep, helper_script_and_deps) {
+    target_name = script_and_dep[0]
+    public_deps += [ ":$target_name" ]
+  }
   public_configs = [ ":vulkan_layer_config" ]
   sources = [
     "$target_gen_dir/angle/vulkan/vk_dispatch_table_helper.h",
@@ -290,51 +311,6 @@
   public_configs = [ ":vulkan_core_validation_config" ]
 }
 
-vk_gen_layers = [
-  [
-    "threading",
-    "thread_check.h",
-    "threading_generator.py",
-  ],
-  [
-    "parameter_validation",
-    "parameter_validation.h",
-    "parameter_validation_generator.py",
-  ],
-  [
-    "unique_objects",
-    "unique_objects_wrappers.h",
-    "unique_objects_generator.py",
-  ],
-]
-
-foreach(info, vk_gen_layers) {
-  layer = info[0]
-  header = info[1]
-  dep = info[2]
-  action("vulkan_gen_$layer") {
-    script = "$vulkan_layers_dir/scripts/lvl_genvk.py"
-    inputs = [
-      "$vulkan_layers_dir/scripts/generator.py",
-      "$vulkan_layers_dir/scripts/lvl_genvk.py",
-      "$vulkan_layers_dir/scripts/reg.py",
-      "$vulkan_layers_dir/scripts/vk.xml",
-      "$vulkan_layers_dir/scripts/$dep",
-    ]
-    outputs = [
-      "$vulkan_gen_dir/$header",
-    ]
-    args = [
-      "-o",
-      raw_vulkan_gen_dir,
-      "-registry",
-      "$raw_vulkan_layers_dir/scripts/vk.xml",
-      "$header",
-      "-quiet",
-    ]
-  }
-}
-
 layer_indexes = [
   0,
   1,
@@ -360,9 +336,9 @@
   [],
   [],
   [],
-  [ ":vulkan_gen_unique_objects" ],
-  [ ":vulkan_gen_threading" ],
-  [ ":vulkan_gen_parameter_validation" ],
+  [ ":vulkan_gen_unique_objects_wrappers_helper" ],
+  [ ":vulkan_gen_thread_check_helper" ],
+  [ ":vulkan_gen_parameter_validation_helper" ],
 ]
 
 foreach(index, layer_indexes) {
diff --git a/src/vulkan_support/vulkan.gypi b/src/vulkan_support/vulkan.gypi
index ca3fca0..321bc40 100644
--- a/src/vulkan_support/vulkan.gypi
+++ b/src/vulkan_support/vulkan.gypi
@@ -532,11 +532,133 @@
                     'target_name': 'vulkan_generate_layer_helpers',
                     'type': 'none',
                     'msvs_cygwin_shell': 0,
+
                     'actions':
                     [
+                        # Duplicate everything because of GYP limitations.
+                        {
+                            'action_name': 'vulkan_run_vk_xml_generate_vk_enum_string_helper_h',
+                            'message': 'generating vk_enum_string_helper.h',
+                            'inputs':
+                            [
+                                '<(vulkan_layers_path)/scripts/generator.py',
+                                '<(vulkan_layers_path)/scripts/helper_file_generator.py',
+                                '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                '<(vulkan_layers_path)/scripts/reg.py',
+                                '<(vulkan_layers_path)/scripts/vk.xml',
+                            ],
+                            'outputs':
+                            [
+                                '<(angle_gen_path)/vulkan/vk_enum_string_helper.h'
+                            ],
+                            'action':
+                            [
+                                'python', '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                 '-o', '<(angle_gen_path)/vulkan',
+                                '-registry', '<(vulkan_layers_path)/scripts/vk.xml',
+                                'vk_enum_string_helper.h', '-quiet',
+                            ],
+                        },
+
+                        {
+                            'action_name': 'vulkan_run_vk_xml_generate_vk_struct_size_helper_h',
+                            'message': 'generating vk_struct_size_helper.h',
+                            'inputs':
+                            [
+                                '<(vulkan_layers_path)/scripts/generator.py',
+                                '<(vulkan_layers_path)/scripts/helper_file_generator.py',
+                                '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                '<(vulkan_layers_path)/scripts/reg.py',
+                                '<(vulkan_layers_path)/scripts/vk.xml',
+                            ],
+                            'outputs':
+                            [
+                                '<(angle_gen_path)/vulkan/vk_struct_size_helper.h'
+                            ],
+                            'action':
+                            [
+                                'python', '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                 '-o', '<(angle_gen_path)/vulkan',
+                                '-registry', '<(vulkan_layers_path)/scripts/vk.xml',
+                                'vk_struct_size_helper.h', '-quiet',
+                            ],
+                        },
+
+                        {
+                            'action_name': 'vulkan_run_vk_xml_generate_vk_struct_size_helper_c',
+                            'message': 'generating vk_struct_size_helper.c',
+                            'inputs':
+                            [
+                                '<(vulkan_layers_path)/scripts/generator.py',
+                                '<(vulkan_layers_path)/scripts/helper_file_generator.py',
+                                '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                '<(vulkan_layers_path)/scripts/reg.py',
+                                '<(vulkan_layers_path)/scripts/vk.xml',
+                            ],
+                            'outputs':
+                            [
+                                '<(angle_gen_path)/vulkan/vk_struct_size_helper.c'
+                            ],
+                            'action':
+                            [
+                                'python', '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                 '-o', '<(angle_gen_path)/vulkan',
+                                '-registry', '<(vulkan_layers_path)/scripts/vk.xml',
+                                'vk_struct_size_helper.c', '-quiet',
+                            ],
+                        },
+
+                        {
+                            'action_name': 'vulkan_run_vk_xml_generate_vk_safe_struct_h',
+                            'message': 'generating vk_safe_struct.h',
+                            'inputs':
+                            [
+                                '<(vulkan_layers_path)/scripts/generator.py',
+                                '<(vulkan_layers_path)/scripts/helper_file_generator.py',
+                                '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                '<(vulkan_layers_path)/scripts/reg.py',
+                                '<(vulkan_layers_path)/scripts/vk.xml',
+                            ],
+                            'outputs':
+                            [
+                                '<(angle_gen_path)/vulkan/vk_safe_struct.h'
+                            ],
+                            'action':
+                            [
+                                'python', '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                 '-o', '<(angle_gen_path)/vulkan',
+                                '-registry', '<(vulkan_layers_path)/scripts/vk.xml',
+                                'vk_safe_struct.h', '-quiet',
+                            ],
+                        },
+
+                        {
+                            'action_name': 'vulkan_run_vk_xml_generate_vk_safe_struct_cpp',
+                            'message': 'generating vk_safe_struct.cpp',
+                            'inputs':
+                            [
+                                '<(vulkan_layers_path)/scripts/generator.py',
+                                '<(vulkan_layers_path)/scripts/helper_file_generator.py',
+                                '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                '<(vulkan_layers_path)/scripts/reg.py',
+                                '<(vulkan_layers_path)/scripts/vk.xml',
+                            ],
+                            'outputs':
+                            [
+                                '<(angle_gen_path)/vulkan/vk_safe_struct.cpp'
+                            ],
+                            'action':
+                            [
+                                'python', '<(vulkan_layers_path)/scripts/lvl_genvk.py',
+                                 '-o', '<(angle_gen_path)/vulkan',
+                                '-registry', '<(vulkan_layers_path)/scripts/vk.xml',
+                                'vk_safe_struct.cpp', '-quiet',
+                            ],
+                        },
+
                         {
                             'action_name': 'vulkan_generate_dispatch_table_helper',
-                            'message': 'generating Vulkan dispatch table helpers',
+                            'message': 'generating vk_dispatch_table_helper.h',
                             'inputs':
                             [
                                 '<(vulkan_layers_path)/scripts/dispatch_table_generator.py',
@@ -555,53 +677,6 @@
                                 '-registry', '<(vulkan_layers_path)/scripts/vk.xml', 'vk_dispatch_table_helper.h', '-quiet',
                             ],
                         },
-                        {
-                            'action_name': 'vulkan_generate_enum_string_helper',
-                            'message': 'generating Vulkan enum string helper',
-                            'inputs':
-                            [
-                                '<(vulkan_layers_path)/scripts/vk_helper.py',
-                                '<(vulkan_layers_path)/include/vulkan/vulkan.h'
-                            ],
-                            'outputs':
-                            [
-                                '<(angle_gen_path)/vulkan/vk_enum_string_helper.h',
-                            ],
-                            'action':
-                            [
-                                'python',
-                                '<(vulkan_layers_path)/scripts/vk_helper.py',
-                                '--gen_enum_string_helper',
-                                '<(vulkan_layers_path)/include/vulkan/vulkan.h',
-                                '--abs_out_dir',
-                                '<(angle_gen_path)/vulkan',
-                                '--quiet',
-                            ],
-                        },
-
-                        {
-                            'action_name': 'vulkan_generate_struct_wrappers',
-                            'message': 'generating Vulkan struct wrappers',
-                            'inputs':
-                            [
-                                '<(vulkan_layers_path)/scripts/vk_helper.py',
-                                '<(vulkan_layers_path)/include/vulkan/vulkan.h'
-                            ],
-                            'outputs':
-                            [
-                                '<@(vulkan_struct_wrappers_outputs)',
-                            ],
-                            'action':
-                            [
-                                'python',
-                                '<(vulkan_layers_path)/scripts/vk_helper.py',
-                                '--gen_struct_wrappers',
-                                '<(vulkan_layers_path)/include/vulkan/vulkan.h',
-                                '--abs_out_dir',
-                                '<(angle_gen_path)/vulkan',
-                                '--quiet',
-                            ],
-                        },
 
                         {
                             'action_name': 'vulkan_generate_json_files',