Roll Vulkan repos

Bug: angleproject:3095
Change-Id: I6ae9d61304981223f9e2f1869ed32612aa38952c
Reviewed-on: https://chromium-review.googlesource.com/c/1405714
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
diff --git a/DEPS b/DEPS
index eb8ac5f..edeec8b 100644
--- a/DEPS
+++ b/DEPS
@@ -12,25 +12,25 @@
   'deqp_revision': '66a49e0a43f7af654ee1de8a3b1bcaf6c0d14aa4',
 
   # Current revision of glslang, the Khronos SPIRV compiler.
-  'glslang_revision': 'de3b8e3bf3893a40a1d9c3b0ed4de750e436e30f',
+  'glslang_revision': 'f6e7c4d2de0d59724ea07739df70c466d169a2cd',
 
   # Current revision fo the SPIRV-Headers Vulkan support library.
-  'spirv_headers_revision': '79b6681aadcb53c27d1052e5f8a0e82a981dbf2f',
+  'spirv_headers_revision': '8bea0a266ac9b718aa0818d9e3a47c0b77c2cb23',
 
   # Current revision of SPIRV-Tools for Vulkan.
-  'spirv_tools_revision': 'd14db341b834cfb3c574a258c331b3a6b1c2cbc5',
+  'spirv_tools_revision': 'e2279da7148d19bd21c6d47ffc96ee4176f43dba',
 
   # Current revision of Khronos Vulkan-Headers.
-  'vulkan_headers_revision': 'b65941cc4b2b43b74de00534d110b581c52c394b',
+  'vulkan_headers_revision': 'c200cb25db0f47364d3318d92c1d8e9dfff2fef1',
 
   # Current revision of Khronos Vulkan-Loader.
-  'vulkan_loader_revision': '2aa6dcc10189f7700824bc5e21120beeff013c3a',
+  'vulkan_loader_revision': 'e1eafa18e17d00374253bcd37d015befa89fcc43',
 
   # Current revision of Khronos Vulkan-Tools.
-  'vulkan_tools_revision': '2e8d601de618eddf2bab8597fd140b2824a060b2',
+  'vulkan_tools_revision': '91b17fd866b2e9cfb875bf516b05536d059416b1',
 
   # Current revision of Khronos Vulkan-ValidationLayers.
-  'vulkan_validation_revision': '0fa2823fa693cc22afaa6e6c6d34aadb97104a2d',
+  'vulkan_validation_revision': '4eee269ae976567ef78db9c9feaafc3364578c87',
 }
 
 deps = {
diff --git a/android/angle_apk.gni b/android/angle_apk.gni
index ee8b7c0..fe901f0 100644
--- a/android/angle_apk.gni
+++ b/android/angle_apk.gni
@@ -7,9 +7,9 @@
 
 vulkan_validation_layers = [
   "VkLayer_core_validation",
-  "VkLayer_object_tracker",
-  "VkLayer_parameter_validation",
-  "VkLayer_threading",
+  "VkLayer_object_lifetimes",
+  "VkLayer_stateless_validation",
+  "VkLayer_thread_safety",
   "VkLayer_unique_objects",
 ]
 
@@ -77,9 +77,10 @@
         }
         if (angle_enable_vulkan_validation_layers) {
           foreach(_layer, vulkan_validation_layers) {
-            secondary_abi_shared_libraries +=
-                [ "${angle_root}/third_party/vulkan-validation-layers:${_layer}" +
-                  "($android_secondary_abi_toolchain)" ]
+            secondary_abi_shared_libraries += [
+              "${angle_root}/third_party/vulkan-validation-layers:${_layer}" +
+                  "($android_secondary_abi_toolchain)",
+            ]
           }
         }
       } else {
@@ -88,8 +89,7 @@
                 "root_out_dir")
         secondary_abi_loadable_modules = []
         foreach(_library, angle_libraries) {
-          secondary_abi_loadable_modules +=
-            [ "${_secondary_out_dir}/lib.compressed/lib${_library}${angle_libs_suffix}.so" ]
+          secondary_abi_loadable_modules += [ "${_secondary_out_dir}/lib.compressed/lib${_library}${angle_libs_suffix}.so" ]
         }
         if (angle_enable_vulkan_validation_layers) {
           foreach(_layer, vulkan_validation_layers) {
@@ -115,9 +115,7 @@
     } else {
       loadable_modules = []
       foreach(_library, angle_libraries) {
-        loadable_modules += [
-          "${root_out_dir}/lib.compressed/lib${_library}${angle_libs_suffix}.so",
-        ]
+        loadable_modules += [ "${root_out_dir}/lib.compressed/lib${_library}${angle_libs_suffix}.so" ]
       }
       if (angle_enable_vulkan_validation_layers) {
         foreach(_layer, vulkan_validation_layers) {
diff --git a/scripts/remove_file_if_exists.py b/scripts/remove_file_if_exists.py
deleted file mode 100755
index 976470b..0000000
--- a/scripts/remove_file_if_exists.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2017 The ANGLE Project Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# remove_file_if_exists.py:
-#   This special action is needed to remove generated headers.
-#   Otherwise ANGLE will pick up the old file(s) and the build will fail.
-#
-
-import sys
-import os
-
-if len(sys.argv) < 3:
-    print("Usage: " + sys.argv[0] + " <remove_file> <stamp_file>")
-
-remove_file = sys.argv[1]
-if os.path.isfile(remove_file):
-    os.remove(remove_file)
-
-# touch a dummy file to keep a timestamp
-with open(sys.argv[2], "w") as f:
-    f.write("blah")
-    f.close()
diff --git a/scripts/remove_files.py b/scripts/remove_files.py
new file mode 100755
index 0000000..f52a1a8
--- /dev/null
+++ b/scripts/remove_files.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python2
+#
+# Copyright 2019 The ANGLE Project Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# remove_files.py:
+#   This special action is used to cleanup old files from the build directory.
+#   Otherwise ANGLE will pick up the old file(s), causing build or runtime errors.
+#
+
+import glob
+import os
+import sys
+
+if len(sys.argv) < 3:
+    print("Usage: " + sys.argv[0] + " <stamp_file> <remove_patterns>")
+
+stamp_file = sys.argv[1]
+
+for i in range(2, len(sys.argv)):
+    remove_pattern = sys.argv[i]
+    remove_files = glob.glob(remove_pattern)
+    for f in remove_files:
+        if os.path.isfile(f):
+            os.remove(f)
+
+# touch a dummy file to keep a timestamp
+with open(stamp_file, "w") as f:
+    f.write("blah")
+    f.close()
diff --git a/scripts/run_code_generation_hashes.json b/scripts/run_code_generation_hashes.json
index 53d1595..d2fcd4b 100644
--- a/scripts/run_code_generation_hashes.json
+++ b/scripts/run_code_generation_hashes.json
@@ -110,7 +110,7 @@
   "Vulkan mandatory format support table:src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json":
     "fa2bd54c1bb0ab2cf1d386061a4bc5c5",
   "Vulkan mandatory format support table:third_party/vulkan-headers/src/registry/vk.xml":
-    "8d46c04ce50d9866c934a6c4d175ab71",
+    "f5c8c9b8e521644ded34d44b1016c25e",
   "packed enum:src/common/gen_packed_gl_enums.py":
     "a9b1c38b4e4d8a1038e743be323f1a51",
   "packed enum:src/common/packed_egl_enums.json":
diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp
index eab2c6d..47d2775 100644
--- a/src/libANGLE/renderer/vulkan/RendererVk.cpp
+++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp
@@ -212,7 +212,7 @@
             return "Debug Utils Messenger";
         case VK_OBJECT_TYPE_VALIDATION_CACHE_EXT:
             return "Validation Cache";
-        case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NVX:
+        case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV:
             return "Acceleration Structure";
         default:
             return "<Unrecognized>";
diff --git a/third_party/vulkan-validation-layers/BUILD.gn b/third_party/vulkan-validation-layers/BUILD.gn
index e77a9fa..aa08630 100644
--- a/third_party/vulkan-validation-layers/BUILD.gn
+++ b/third_party/vulkan-validation-layers/BUILD.gn
@@ -22,6 +22,9 @@
   ]
 }
 
+raw_root_out_dir = rebase_path(root_out_dir, root_build_dir)
+raw_data_dir = rebase_path("$root_out_dir/$data_dir", root_build_dir)
+
 raw_vulkan_headers_dir =
     rebase_path("$angle_root/third_party/vulkan-headers/src", root_build_dir)
 
@@ -50,7 +53,7 @@
   [
     "vulkan_gen_layer_dispatch_table_h",
     "vk_layer_dispatch_table.h",
-    "loader_extension_generator.py",
+    "layer_dispatch_table_generator.py",
   ],
   [
     "vulkan_gen_object_types_h",
@@ -68,9 +71,14 @@
     "helper_file_generator.py",
   ],
   [
-    "vulkan_gen_thread_check_helper",
-    "thread_check.h",
-    "threading_generator.py",
+    "vulkan_gen_thread_safety_h",
+    "thread_safety.h",
+    "thread_safety_generator.py",
+  ],
+  [
+    "vulkan_gen_thread_safety_cpp",
+    "thread_safety.cpp",
+    "thread_safety_generator.py",
   ],
   [
     "vulkan_gen_typemap_helper",
@@ -78,6 +86,11 @@
     "helper_file_generator.py",
   ],
   [
+    "vulkan_gen_object_tracker_h",
+    "object_tracker.h",
+    "object_tracker_generator.py",
+  ],
+  [
     "vulkan_gen_object_tracker_cpp",
     "object_tracker.cpp",
     "object_tracker_generator.py",
@@ -88,9 +101,29 @@
     "parameter_validation_generator.py",
   ],
   [
-    "vulkan_gen_unique_objects_wrappers_helper",
-    "unique_objects_wrappers.h",
-    "unique_objects_generator.py",
+    "vulkan_gen_parameter_validation_h",
+    "parameter_validation.h",
+    "parameter_validation_generator.py",
+  ],
+  [
+    "vulkan_gen_layer_chassis_h",
+    "chassis.h",
+    "layer_chassis_generator.py",
+  ],
+  [
+    "vulkan_gen_layer_chassis_cpp",
+    "chassis.cpp",
+    "layer_chassis_generator.py",
+  ],
+  [
+    "vulkan_gen_layer_chassis_dispatch_h",
+    "layer_chassis_dispatch.h",
+    "layer_chassis_dispatch_generator.py",
+  ],
+  [
+    "vulkan_gen_layer_chassis_dispatch_cpp",
+    "layer_chassis_dispatch.cpp",
+    "layer_chassis_dispatch_generator.py",
   ],
 ]
 
@@ -98,22 +131,58 @@
 # so that all dependencies are together
 copy("python_gen_deps") {
   sources = vulkan_registry_script_files + [
-              "src/layers/vk_validation_error_messages.h",
               "src/scripts/common_codegen.py",
               "src/scripts/dispatch_table_helper_generator.py",
               "src/scripts/helper_file_generator.py",
-              "src/scripts/loader_extension_generator.py",
+              "src/scripts/layer_dispatch_table_generator.py",
               "src/scripts/lvl_genvk.py",
               "src/scripts/object_tracker_generator.py",
               "src/scripts/parameter_validation_generator.py",
-              "src/scripts/threading_generator.py",
-              "src/scripts/unique_objects_generator.py",
+              "src/scripts/thread_safety_generator.py",
+              "src/scripts/layer_chassis_generator.py",
+              "src/scripts/layer_chassis_dispatch_generator.py",
             ]
   outputs = [
     "$vulkan_gen_dir/{{source_file_part}}",
   ]
 }
 
+# This special action is needed to remove previously-generated header files.
+# Otherwise the cpp files can pick up the old header files and cause build
+# failures.
+action("vulkan_clean_gen_headers") {
+  script = "$angle_root/scripts/remove_files.py"
+  deps = [
+    ":python_gen_deps",
+  ]
+  outputs = [
+    "$vulkan_gen_dir/vk_validation_error_messages_h_is_removed",
+  ]
+  args = [
+    "$raw_vulkan_gen_dir/vk_validation_error_messages_h_is_removed",
+    "$raw_vulkan_gen_dir/vk_validation_error_messages.h",
+  ]
+}
+
+# This special action is needed to remove old VVL objects that are now renamed.
+action("vulkan_clean_old_validation_layer_objects") {
+  script = "$angle_root/scripts/remove_files.py"
+
+  # inputs is a (random) new file since the vvl roll, used to ensure the cleanup is done only once
+  inputs = [
+    "src/layers/gpu_validation.cpp",
+  ]
+  outputs = [
+    "$vulkan_gen_dir/old_vvl_files_are_removed",
+  ]
+  args = [
+    "$raw_vulkan_gen_dir/old_vvl_files_are_removed",
+    "$raw_root_out_dir/libVkLayer*",
+    "$raw_root_out_dir/VkLayer*",
+    "$raw_data_dir/VkLayer*.json",
+  ]
+}
+
 foreach(script_and_dep, helper_script_and_deps) {
   target_name = script_and_dep[0]
   file = script_and_dep[1]
@@ -121,12 +190,14 @@
   target("action", target_name) {
     public_deps = [
       ":python_gen_deps",
+      ":vulkan_clean_gen_headers",
+      ":vulkan_clean_old_validation_layer_objects",
     ]
     script = "$vulkan_gen_dir/lvl_genvk.py"
     inputs = [
       "$vulkan_gen_dir/$dep",
       "$vulkan_gen_dir/common_codegen.py",
-      "$vulkan_gen_dir/vk_validation_error_messages.h",
+      "src/layers/vk_validation_error_messages.h",
     ]
     outputs = [
       "$vulkan_gen_dir/$file",
@@ -231,70 +302,99 @@
   "$vulkan_gen_dir/vk_safe_struct.h",
   "src/layers/buffer_validation.cpp",
   "src/layers/buffer_validation.h",
+  "src/layers/core_dispatch.cpp",
   "src/layers/core_validation.cpp",
   "src/layers/core_validation.h",
   "src/layers/convert_to_renderpass2.cpp",
   "src/layers/descriptor_sets.cpp",
   "src/layers/descriptor_sets.h",
+  "src/layers/gpu_validation.cpp",
+  "src/layers/gpu_validation.h",
   "src/layers/shader_validation.cpp",
   "src/layers/shader_validation.h",
   "src/layers/xxhash.c",
   "src/layers/xxhash.h",
 ]
 
-object_tracker_sources = [
+object_lifetimes_sources = [
   "$vulkan_gen_dir/object_tracker.cpp",
-  "src/layers/object_tracker.h",
+  "$vulkan_gen_dir/object_tracker.h",
   "src/layers/object_tracker_utils.cpp",
 ]
 
-parameter_validation_sources = [
+stateless_validation_sources = [
   "$vulkan_gen_dir/parameter_validation.cpp",
-  "src/layers/parameter_validation.h",
+  "$vulkan_gen_dir/parameter_validation.h",
   "src/layers/parameter_validation_utils.cpp",
 ]
 
-threading_sources = [
-  "$vulkan_gen_dir/thread_check.h",
-  "src/layers/threading.cpp",
-  "src/layers/threading.h",
+thread_safety_sources = [
+  "$vulkan_gen_dir/thread_safety.cpp",
+  "$vulkan_gen_dir/thread_safety.h",
 ]
 
-unique_objects_sources = [
-  "$vulkan_gen_dir/unique_objects_wrappers.h",
+unique_objects_sources = []
 
-  # This file is manually included in the layer
-  # "$vulkan_gen_dir/vk_safe_struct.cpp",
-  "$vulkan_gen_dir/vk_safe_struct.h",
-  "src/layers/unique_objects.cpp",
-  "src/layers/unique_objects.h",
+chassis_sources = [
+  "$vulkan_gen_dir/chassis.cpp",
+  "$vulkan_gen_dir/chassis.h",
+  "$vulkan_gen_dir/layer_chassis_dispatch.cpp",
+  "$vulkan_gen_dir/layer_chassis_dispatch.h",
+]
+
+core_validation_deps = [ ":vulkan_core_validation_glslang" ]
+
+object_lifetimes_deps = [
+  ":vulkan_gen_object_tracker_cpp",
+  ":vulkan_gen_object_tracker_h",
+]
+
+stateless_validation_deps = [ ":vulkan_gen_stateless_validation" ]
+
+thread_safety_deps = [
+  ":vulkan_gen_thread_safety_cpp",
+  ":vulkan_gen_thread_safety_h",
+]
+
+unique_objects_deps = []
+
+chassis_deps = [
+  ":vulkan_gen_layer_chassis_cpp",
+  ":vulkan_gen_layer_chassis_h",
+  ":vulkan_gen_layer_chassis_dispatch_cpp",
+  ":vulkan_gen_layer_chassis_dispatch_h",
 ]
 
 layers = [
   [
     "core_validation",
     core_validation_sources,
-    ":vulkan_core_validation_glslang",
+    core_validation_deps,
+    [],
   ],
   [
-    "object_tracker",
-    object_tracker_sources,
-    ":vulkan_gen_object_tracker",
+    "object_lifetimes",
+    object_lifetimes_sources + chassis_sources,
+    object_lifetimes_deps + chassis_deps,
+    [ "BUILD_OBJECT_TRACKER" ],
   ],
   [
-    "parameter_validation",
-    parameter_validation_sources,
-    ":vulkan_gen_parameter_validation",
+    "stateless_validation",
+    stateless_validation_sources + chassis_sources,
+    stateless_validation_deps + chassis_deps,
+    [ "BUILD_PARAMETER_VALIDATION" ],
   ],
   [
-    "threading",
-    threading_sources,
-    ":vulkan_gen_thread_check_helper",
+    "thread_safety",
+    thread_safety_sources + chassis_sources,
+    thread_safety_deps + chassis_deps,
+    [ "BUILD_THREAD_SAFETY" ],
   ],
   [
     "unique_objects",
-    unique_objects_sources,
-    ":vulkan_gen_unique_objects_wrappers_helper",
+    unique_objects_sources + chassis_sources,
+    unique_objects_deps + chassis_deps,
+    [ "LAYER_CHASSIS_CAN_WRAP_HANDLES" ],
   ],
 ]
 
@@ -303,12 +403,15 @@
 
   action("vulkan_gen_json_files") {
     script = "$angle_root/scripts/generate_vulkan_layers_json.py"
+    public_deps = [
+      ":vulkan_clean_old_validation_layer_objects",
+    ]
     json_names = [
       "VkLayer_core_validation.json",
-      "VkLayer_object_tracker.json",
-      "VkLayer_parameter_validation.json",
+      "VkLayer_object_lifetimes.json",
+      "VkLayer_stateless_validation.json",
       "VkLayer_standard_validation.json",
-      "VkLayer_threading.json",
+      "VkLayer_thread_safety.json",
       "VkLayer_unique_objects.json",
     ]
     sources = [
@@ -359,63 +462,24 @@
 source_set("vulkan_core_validation_glslang") {
   public_deps = [
     "${angle_spirv_tools_dir}:spvtools",
+    "${angle_spirv_tools_dir}:spvtools_opt",
     "${angle_spirv_tools_dir}:spvtools_val",
   ]
   public_configs = [ ":vulkan_core_validation_config" ]
 }
 
-config("vulkan_parameter_validation_config") {
+config("vulkan_stateless_validation_config") {
   if (is_clang) {
     cflags_cc = [ "-Wno-unused-const-variable" ]
   }
 }
 
-# These special "clean" actions are needed to remove generated headers.
-# Otherwise the cpp files will pick up the old generated files
-# and the build will fail. It's a bit unfortunate but necessary.
-action("vulkan_clean_parameter_gen_header") {
-  script = "$angle_root/scripts/remove_file_if_exists.py"
-  inputs = parameter_validation_sources
+source_set("vulkan_gen_stateless_validation") {
   deps = [
     ":vulkan_gen_parameter_validation_cpp",
+    ":vulkan_gen_parameter_validation_h",
   ]
-  outputs = [
-    "$vulkan_gen_dir/parameter_validation_h_is_removed",
-  ]
-  args = [
-    "$raw_vulkan_gen_dir/parameter_validation.h",
-    "$raw_vulkan_gen_dir/parameter_validation_h_is_removed",
-  ]
-}
-
-action("vulkan_clean_tracker_gen_header") {
-  script = "$angle_root/scripts/remove_file_if_exists.py"
-  inputs = object_tracker_sources
-  deps = [
-    ":vulkan_gen_object_tracker_cpp",
-  ]
-  outputs = [
-    "$vulkan_gen_dir/object_tracker_h_is_removed",
-  ]
-  args = [
-    "$raw_vulkan_gen_dir/object_tracker.h",
-    "$raw_vulkan_gen_dir/object_tracker_h_is_removed",
-  ]
-}
-
-source_set("vulkan_gen_parameter_validation") {
-  deps = [
-    ":vulkan_clean_parameter_gen_header",
-    ":vulkan_gen_parameter_validation_cpp",
-  ]
-  public_configs = [ ":vulkan_parameter_validation_config" ]
-}
-
-source_set("vulkan_gen_object_tracker") {
-  deps = [
-    ":vulkan_clean_tracker_gen_header",
-    ":vulkan_gen_object_tracker_cpp",
-  ]
+  public_configs = [ ":vulkan_stateless_validation_config" ]
 }
 
 foreach(layer_info, layers) {
@@ -429,7 +493,7 @@
       ":vulkan_layer_utils",
     ]
     if (layer_info[2] != "") {
-      deps += [ layer_info[2] ]
+      deps += layer_info[2]
     }
     sources = layer_info[1]
     if (is_win) {
@@ -439,9 +503,13 @@
       ldflags = [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ]
     }
     if (is_android) {
-      libs = [ "log" ]
+      libs = [
+        "log",
+        "nativewindow",
+      ]
       configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
     }
+    defines = layer_info[3]
   }
 }