Vulkan: roll Vulkan repos to v1.1.102

Bug: angleproject:3320
Change-Id: Ia24f9bc2499f36c6aab810db00bb6408920222fd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1541719
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/DEPS b/DEPS
index 4986bd1..8ecec0c 100644
--- a/DEPS
+++ b/DEPS
@@ -21,16 +21,16 @@
   'spirv_tools_revision': '2ac348b5c0a58c64305379baca778c2e58873cd6',
 
   # Current revision of Khronos Vulkan-Headers.
-  'vulkan_headers_revision': 'c200cb25db0f47364d3318d92c1d8e9dfff2fef1',
+  'vulkan_headers_revision': '982f0f84dccf6f281b48318c77261a9028000126',
 
   # Current revision of Khronos Vulkan-Loader.
-  'vulkan_loader_revision': 'e1eafa18e17d00374253bcd37d015befa89fcc43',
+  'vulkan_loader_revision': '2f0abfcf9eb04018e6e92125a70bc28665aa17fe',
 
   # Current revision of Khronos Vulkan-Tools.
-  'vulkan_tools_revision': '91b17fd866b2e9cfb875bf516b05536d059416b1',
+  'vulkan_tools_revision': 'f392e71b994036c92b896c2a62cc63d042b7f9b1',
 
   # Current revision of Khronos Vulkan-ValidationLayers.
-  'vulkan_validation_revision': '4eee269ae976567ef78db9c9feaafc3364578c87',
+  'vulkan_validation_revision': 'ff80a937c8a505abbdddb95d8ffaa446820c8391',
 }
 
 deps = {
diff --git a/scripts/run_code_generation_hashes.json b/scripts/run_code_generation_hashes.json
index 86b9893..d5123c1 100644
--- a/scripts/run_code_generation_hashes.json
+++ b/scripts/run_code_generation_hashes.json
@@ -314,7 +314,7 @@
   "Vulkan mandatory format support table:src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp":
     "d20e549634ef32d6ad4e9f0b28e52acf",
   "Vulkan mandatory format support table:third_party/vulkan-headers/src/registry/vk.xml":
-    "f5c8c9b8e521644ded34d44b1016c25e",
+    "8af0f992bd45c2d9500eb5ed60c256d6",
   "packed enum:src/common/PackedEGLEnums_autogen.cpp":
     "c9f7cea85751e5a39b92bccc1d97f3bd",
   "packed enum:src/common/PackedEGLEnums_autogen.h":
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index 7d36c30..3d46a06 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -181,6 +181,12 @@
 
     bool clearColor = IsMaskFlagSet(static_cast<int>(mask), GL_COLOR_BUFFER_BIT);
 
+    // If the only thing to be cleared was depth and it's masked, there's nothing to do.
+    if (!clearColor && !clearDepth && !clearStencil)
+    {
+        return angle::Result::Continue;
+    }
+
     const gl::State &glState = context->getState();
 
     VkClearDepthStencilValue clearDepthStencilValue =
diff --git a/src/libANGLE/renderer/vulkan/SurfaceVk.cpp b/src/libANGLE/renderer/vulkan/SurfaceVk.cpp
index 9d89333..f655e4f 100644
--- a/src/libANGLE/renderer/vulkan/SurfaceVk.cpp
+++ b/src/libANGLE/renderer/vulkan/SurfaceVk.cpp
@@ -466,24 +466,6 @@
         // have finished.  We therefore store the handle to the swapchain being destroyed in the
         // swap history (alongside the serial of the last submission) so it can be destroyed once we
         // wait on that serial as part of the CPU throttling.
-        //
-        // TODO(syoussefi): the spec specifically allows multiple retired swapchains to exist:
-        //
-        // > Multiple retired swapchains can be associated with the same VkSurfaceKHR through
-        // > multiple uses of oldSwapchain that outnumber calls to vkDestroySwapchainKHR.
-        //
-        // However, a bug in the validation layers currently forces us to limit this to one retired
-        // swapchain.  Once the issue is resolved, the following for loop can be removed.
-        // http://anglebug.com/3095
-        for (SwapHistory &swap : mSwapHistory)
-        {
-            if (swap.swapchain != VK_NULL_HANDLE)
-            {
-                ANGLE_TRY(renderer->finishToSerial(displayVk, swap.serial));
-                vkDestroySwapchainKHR(renderer->getDevice(), swap.swapchain, nullptr);
-                swap.swapchain = VK_NULL_HANDLE;
-            }
-        }
         mSwapHistory[swapHistoryIndex].swapchain = oldSwapchain;
     }
 
@@ -735,21 +717,27 @@
 
     VkPresentRegionKHR presentRegion   = {};
     VkPresentRegionsKHR presentRegions = {};
-    std::vector<VkRectLayerKHR> vk_rects;
+    std::vector<VkRectLayerKHR> vkRects;
     if (renderer->getFeatures().supportsIncrementalPresent && (n_rects > 0))
     {
-        EGLint *egl_rects            = rects;
+        EGLint width  = getWidth();
+        EGLint height = getHeight();
+
+        EGLint *eglRects             = rects;
         presentRegion.rectangleCount = n_rects;
-        vk_rects.resize(n_rects);
-        for (EGLint rect = 0; rect < n_rects; rect++)
+        vkRects.resize(n_rects);
+        for (EGLint i = 0; i < n_rects; i++)
         {
-            vk_rects[rect].offset.x      = *egl_rects++;
-            vk_rects[rect].offset.y      = *egl_rects++;
-            vk_rects[rect].extent.width  = *egl_rects++;
-            vk_rects[rect].extent.height = *egl_rects++;
-            vk_rects[rect].layer         = 0;
+            VkRectLayerKHR &rect = vkRects[i];
+
+            // Make sure the damage rects are within swapchain bounds.
+            rect.offset.x      = gl::clamp(*eglRects++, 0, width);
+            rect.offset.y      = gl::clamp(*eglRects++, 0, height);
+            rect.extent.width  = gl::clamp(*eglRects++, 0, width - rect.offset.x);
+            rect.extent.height = gl::clamp(*eglRects++, 0, height - rect.offset.y);
+            rect.layer         = 0;
         }
-        presentRegion.pRectangles = vk_rects.data();
+        presentRegion.pRectangles = vkRects.data();
 
         presentRegions.sType          = VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR;
         presentRegions.pNext          = nullptr;
diff --git a/third_party/vulkan-validation-layers/BUILD.gn b/third_party/vulkan-validation-layers/BUILD.gn
index aa08630..4934c7a 100644
--- a/third_party/vulkan-validation-layers/BUILD.gn
+++ b/third_party/vulkan-validation-layers/BUILD.gn
@@ -302,7 +302,6 @@
   "$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",
@@ -368,9 +367,9 @@
 layers = [
   [
     "core_validation",
-    core_validation_sources,
-    core_validation_deps,
-    [],
+    core_validation_sources + chassis_sources,
+    core_validation_deps + chassis_deps,
+    [ "BUILD_CORE_VALIDATION" ],
   ],
   [
     "object_lifetimes",