Normalize DEPS to ease merging with Dawn

- Format specific targets to have the hash in the target rule instead
  of a variable.
- Only have the base part of the URL in a variable
- Use vulkan-deps instead of individual DEPS (spirv-tools,
  spirv-headers & glslang)

BUG=tint:1481

Change-Id: I871a656e26050698da2c77f4f39fec94a9c4f8a4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/84723
Reviewed-by: David Neto <dneto@google.com>
Auto-Submit: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
diff --git a/.gitignore b/.gitignore
index 0503afb2..19bafab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,13 +19,11 @@
 /third_party/cpplint
 /third_party/benchmark
 /third_party/binutils
-/third_party/glslang
 /third_party/googletest
 /third_party/gpuweb-cts
 /third_party/llvm-build
 /third_party/protobuf
-/third_party/spirv-headers
-/third_party/spirv-tools
+/third_party/vulkan-deps
 /tools/clang
 /tools/bin
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index eadb633..17a7ec5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -200,7 +200,7 @@
 endif()
 
 if (${TINT_BUILD_SPV_READER})
-  include_directories("${TINT_THIRD_PARTY_DIR}/spirv-tools/include")
+  include_directories("${TINT_THIRD_PARTY_DIR}/vulkan-deps/spirv-tools/src/include")
 endif()
 
 if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC"))
@@ -264,7 +264,7 @@
 
   if (${TINT_BUILD_SPV_READER} OR ${TINT_BUILD_SPV_WRITER})
     target_include_directories(${TARGET} PUBLIC
-        "${TINT_THIRD_PARTY_DIR}/spirv-headers/include")
+        "${TINT_THIRD_PARTY_DIR}/vulkan-deps/spirv-headers/src/include")
   endif()
 
   target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_SPV_READER=$<BOOL:${TINT_BUILD_SPV_READER}>)
diff --git a/DEPS b/DEPS
index fbd2af5..7bf1906 100644
--- a/DEPS
+++ b/DEPS
@@ -7,24 +7,8 @@
 ]
 
 vars = {
-  'chromium_git':  'https://chromium.googlesource.com',
-  'github': '/external/github.com',
+  'chromium_git': 'https://chromium.googlesource.com',
 
-  'benchmark_revision': 'e991355c02b93fe17713efe04cbc2e278e00fdbd',
-  'build_revision': '555c8b467c21e2c4b22d00e87e3faa0431df9ac2',
-  'buildtools_revision': 'f78b4b9f33bd8ef9944d5ce643daff1c31880189',
-  'catapult_revision': 'fa35beefb3429605035f98211ddb8750dee6a13d',
-  'clang_format_revision': '2271e89c145a5e27d6c110b6a1113c057a8301a3',
-  'clang_revision': '8b7330592cb85ba09505a6be7bacabd0ad6160a3',
-  'glslang_revision': '4b7b86d568b40f4b076259dc2fc4cdd006340f34',
-  'googletest_revision': '6b74da4757a549563d7c37c8fae3e704662a043b',
-  'gpuweb_cts_revision': 'b0291fd966b55a5efc496772555b94842bde1085',
-  'libcxx_revision': '79a2e924d96e2fc1e4b937c42efd08898fa472d7',
-  'libcxxabi_revision': '2715a6c0de8dac4c7674934a6b3d30ba0c685271',
-  'protobuf_revision': 'fde7cf7358ec7cd69e8db9be4f1fa6a5c431386a',
-  'spirv_headers_revision': 'eddd4dfc930f1374a70797460240a501c7d333f7',
-  'spirv_tools_revision': 'df2aad68b98279412494a6d449bd71b6756e699b',
-  'testing_revision': 'd485ae97b7900c1fb7edfbe2901ae5adcb120865',
   'tint_gn_revision': 'git_revision:281ba2c91861b10fec7407c4b6172ec3d4661243',
 
   # We don't use location metadata in our test isolates.
@@ -32,32 +16,29 @@
 }
 
 deps = {
-  'third_party/gpuweb-cts': Var('chromium_git') + Var('github') +
-      '/gpuweb/cts.git@' + Var('gpuweb_cts_revision'),
+  'third_party/gpuweb-cts': {
+    'url': '{chromium_git}/external/github.com/gpuweb/cts@b0291fd966b55a5efc496772555b94842bde1085',
+  },
 
-  'third_party/spirv-headers': Var('chromium_git') + Var('github') +
-      '/KhronosGroup/SPIRV-Headers.git@' + Var('spirv_headers_revision'),
-
-  'third_party/spirv-tools': Var('chromium_git') + Var('github') +
-      '/KhronosGroup//SPIRV-Tools.git@' + Var('spirv_tools_revision'),
-
-  'third_party/glslang': Var('chromium_git') + Var('github') +
-      '/KhronosGroup/glslang.git@' + Var('glslang_revision'),
+  'third_party/vulkan-deps': {
+    'url': '{chromium_git}/vulkan-deps@20efc30b0c6fe3c9bbd4f8ed6335593ee51391b0',
+  },
 
   # Dependencies required to use GN/Clang in standalone
-  'build': Var('chromium_git') + '/chromium/src/build@' +
-      Var('build_revision'),
+  'build': {
+    'url': '{chromium_git}/chromium/src/build@555c8b467c21e2c4b22d00e87e3faa0431df9ac2',
+  },
 
-  'buildtools': Var('chromium_git') + '/chromium/src/buildtools@' +
-      Var('buildtools_revision'),
+  'buildtools': {
+    'url': '{chromium_git}/chromium/src/buildtools@f78b4b9f33bd8ef9944d5ce643daff1c31880189',
+  },
 
-  'tools/clang': Var('chromium_git') + '/chromium/src/tools/clang@' +
-      Var('clang_revision'),
+  'tools/clang': {
+    'url': '{chromium_git}/chromium/src/tools/clang@8b7330592cb85ba09505a6be7bacabd0ad6160a3',
+  },
 
   'buildtools/clang_format/script': {
-    'url': Var('chromium_git') +
-      '/external/github.com/llvm/llvm-project/clang/tools/clang-format.git@' +
-        Var('clang_format_revision'),
+    'url': '{chromium_git}/external/github.com/llvm/llvm-project/clang/tools/clang-format.git@2271e89c145a5e27d6c110b6a1113c057a8301a3',
   },
 
   'buildtools/linux64': {
@@ -85,31 +66,34 @@
     'condition': 'host_os == "win"',
   },
 
-  'buildtools/third_party/libc++/trunk':
-    Var('chromium_git') +
-      '/external/github.com/llvm/llvm-project/libcxx.git@' +
-        Var('libcxx_revision'),
+  'buildtools/third_party/libc++/trunk': {
+    'url': '{chromium_git}/external/github.com/llvm/llvm-project/libcxx.git@79a2e924d96e2fc1e4b937c42efd08898fa472d7',
+  },
 
-  'buildtools/third_party/libc++abi/trunk':
-    Var('chromium_git') +
-      '/external/github.com/llvm/llvm-project/libcxxabi.git@' +
-        Var('libcxxabi_revision'),
+  'buildtools/third_party/libc++abi/trunk': {
+    'url': '{chromium_git}/external/github.com/llvm/llvm-project/libcxxabi.git@2715a6c0de8dac4c7674934a6b3d30ba0c685271',
+  },
 
   # Dependencies required for testing
-  'testing': Var('chromium_git') + '/chromium/src/testing@' +
-      Var('testing_revision'),
+  'testing': {
+    'url': '{chromium_git}/chromium/src/testing@d485ae97b7900c1fb7edfbe2901ae5adcb120865',
+  },
 
-  'third_party/catapult': Var('chromium_git') + '/catapult.git@' +
-      Var('catapult_revision'),
+  'third_party/catapult': {
+    'url': '{chromium_git}/catapult.git@fa35beefb3429605035f98211ddb8750dee6a13d',
+  },
 
-  'third_party/benchmark': Var('chromium_git') + Var('github') +
-      '/google/benchmark.git@' + Var('benchmark_revision'),
+  'third_party/benchmark': {
+    'url': '{chromium_git}/external/github.com/google/benchmark.git@e991355c02b93fe17713efe04cbc2e278e00fdbd',
+  },
 
-  'third_party/googletest': Var('chromium_git') + Var('github') +
-      '/google/googletest.git@' + Var('googletest_revision'),
+  'third_party/googletest': {
+    'url': '{chromium_git}/external/github.com/google/googletest.git@6b74da4757a549563d7c37c8fae3e704662a043b',
+  },
 
-  'third_party/protobuf': Var('chromium_git') + Var('github') +
-      '/protocolbuffers/protobuf.git@' + Var('protobuf_revision'),
+  'third_party/protobuf': {
+    'url': '{chromium_git}/external/github.com/protocolbuffers/protobuf.git@fde7cf7358ec7cd69e8db9be4f1fa6a5c431386a',
+  },
 }
 
 hooks = [
@@ -210,4 +194,7 @@
 recursedeps = [
   # buildtools provides clang_format, libc++, and libc++abi
   'buildtools',
+  # vulkan-deps provides spirv-headers, spirv-tools & gslang
+  # It also provides other Vulkan tools that Tint doesn't use
+  'third_party/vulkan-deps',
 ]
diff --git a/build_overrides/glslang.gni b/build_overrides/glslang.gni
index 6345b33..80a30c9 100644
--- a/build_overrides/glslang.gni
+++ b/build_overrides/glslang.gni
@@ -12,4 +12,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-glslang_spirv_tools_dir = "//third_party/spirv-tools"
+glslang_spirv_tools_dir = "//third_party/vulkan-deps/spirv-tools/src"
diff --git a/build_overrides/spirv_tools.gni b/build_overrides/spirv_tools.gni
index a886b46..13bffc5 100644
--- a/build_overrides/spirv_tools.gni
+++ b/build_overrides/spirv_tools.gni
@@ -17,4 +17,4 @@
 
 # Paths to SPIRV-Tools dependencies in Tint
 spirv_tools_googletest_dir = "//third_party/googletest"
-spirv_tools_spirv_headers_dir = "//third_party/spirv-headers"
+spirv_tools_spirv_headers_dir = "//third_party/vulkan-deps/spirv-headers/src"
diff --git a/src/tint/cmd/BUILD.gn b/src/tint/cmd/BUILD.gn
index c9c2f20..c2f4322 100644
--- a/src/tint/cmd/BUILD.gn
+++ b/src/tint/cmd/BUILD.gn
@@ -27,8 +27,8 @@
 
   if (tint_build_glsl_writer) {
     deps += [
-      "${tint_root_dir}/third_party/glslang:glslang_default_resource_limits_sources",
-      "${tint_root_dir}/third_party/glslang:glslang_lib_sources",
+      "${tint_root_dir}/third_party/vulkan-deps/glslang/src:glslang_default_resource_limits_sources",
+      "${tint_root_dir}/third_party/vulkan-deps/glslang/src:glslang_lib_sources",
     ]
   }
 
diff --git a/test/tint/benchmark/particles.wgsl.expected.glsl b/test/tint/benchmark/particles.wgsl.expected.glsl
index 1ff55f9..acf0f1b 100644
--- a/test/tint/benchmark/particles.wgsl.expected.glsl
+++ b/test/tint/benchmark/particles.wgsl.expected.glsl
@@ -170,7 +170,7 @@
   uint width;
 };
 
-uniform highp sampler2D tint_symbol_1;
+uniform highp sampler2D tint_symbol_6;
 void simulate(uvec3 GlobalInvocationID) {
   rand_seed = ((sim_params.seed.xy + vec2(GlobalInvocationID.xy)) * sim_params.seed.zw);
   uint idx = GlobalInvocationID.x;
@@ -182,22 +182,27 @@
   if ((particle.lifetime < 0.0f)) {
     ivec2 coord = ivec2(0, 0);
     {
-      for(int level = (textureQueryLevels(tint_symbol_1) - 1); (level > 0); level = (level - 1)) {
-        vec4 probabilites = texelFetch(tint_symbol_1, coord, level);
-        vec4 value = vec4(rand());
+      for(int level = (textureQueryLevels(tint_symbol_6) - 1); (level > 0); level = (level - 1)) {
+        vec4 probabilites = texelFetch(tint_symbol_6, coord, level);
+        float tint_symbol_5 = rand();
+        vec4 value = vec4(tint_symbol_5);
         bvec4 mask = bvec4(uvec4(greaterThanEqual(value, vec4(0.0f, probabilites.xyz))) & uvec4(lessThan(value, probabilites)));
         coord = (coord * 2);
         coord.x = (coord.x + (any(mask.yw) ? 1 : 0));
         coord.y = (coord.y + (any(mask.zw) ? 1 : 0));
       }
     }
-    vec2 uv = (vec2(coord) / vec2(textureSize(tint_symbol_1, 0)));
+    vec2 uv = (vec2(coord) / vec2(textureSize(tint_symbol_6, 0)));
     particle.position = vec3((((uv - 0.5f) * 3.0f) * vec2(1.0f, -1.0f)), 0.0f);
-    particle.color = texelFetch(tint_symbol_1, coord, 0);
-    particle.velocity.x = ((rand() - 0.5f) * 0.100000001f);
-    particle.velocity.y = ((rand() - 0.5f) * 0.100000001f);
-    particle.velocity.z = (rand() * 0.300000012f);
-    particle.lifetime = (0.5f + (rand() * 2.0f));
+    particle.color = texelFetch(tint_symbol_6, coord, 0);
+    float tint_symbol_1 = rand();
+    particle.velocity.x = ((tint_symbol_1 - 0.5f) * 0.100000001f);
+    float tint_symbol_2 = rand();
+    particle.velocity.y = ((tint_symbol_2 - 0.5f) * 0.100000001f);
+    float tint_symbol_3 = rand();
+    particle.velocity.z = (tint_symbol_3 * 0.300000012f);
+    float tint_symbol_4 = rand();
+    particle.lifetime = (0.5f + (tint_symbol_4 * 2.0f));
   }
   data.particles[idx] = particle;
 }
diff --git a/test/tint/builtins/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl b/test/tint/builtins/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
index 22d032e..6aa8f5a 100644
--- a/test/tint/builtins/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
@@ -1,3 +1,5 @@
+SKIP: FAILED
+
 #version 310 es
 precision mediump float;
 
@@ -28,6 +30,13 @@
   fragment_main();
   return;
 }
+Error parsing GLSL shader:
+ERROR: 0:6: 'atomicCompSwap' : Atomic memory function can only be used for shader storage block member or shared variable. 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
 #version 310 es
 
 ivec2 tint_atomicCompareExchangeWeak(inout int param_0, int param_1, int param_2) {
@@ -58,3 +67,10 @@
   compute_main();
   return;
 }
+Error parsing GLSL shader:
+ERROR: 0:5: 'atomicCompSwap' : Atomic memory function can only be used for shader storage block member or shared variable. 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/tint/builtins/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl b/test/tint/builtins/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
index abfdbf5..65d12ed 100644
--- a/test/tint/builtins/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
@@ -1,3 +1,5 @@
+SKIP: FAILED
+
 #version 310 es
 precision mediump float;
 
@@ -28,6 +30,13 @@
   fragment_main();
   return;
 }
+Error parsing GLSL shader:
+ERROR: 0:6: 'atomicCompSwap' : Atomic memory function can only be used for shader storage block member or shared variable. 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
 #version 310 es
 
 uvec2 tint_atomicCompareExchangeWeak(inout uint param_0, uint param_1, uint param_2) {
@@ -58,3 +67,10 @@
   compute_main();
   return;
 }
+Error parsing GLSL shader:
+ERROR: 0:5: 'atomicCompSwap' : Atomic memory function can only be used for shader storage block member or shared variable. 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/tint/builtins/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl b/test/tint/builtins/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
index 7cc71a3..2f649cd 100644
--- a/test/tint/builtins/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
@@ -1,3 +1,5 @@
+SKIP: FAILED
+
 #version 310 es
 
 ivec2 tint_atomicCompareExchangeWeak(inout int param_0, int param_1, int param_2) {
@@ -26,3 +28,10 @@
   compute_main(gl_LocalInvocationIndex);
   return;
 }
+Error parsing GLSL shader:
+ERROR: 0:5: 'atomicCompSwap' : Atomic memory function can only be used for shader storage block member or shared variable. 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/tint/builtins/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl b/test/tint/builtins/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
index 56826d4..cbb201a 100644
--- a/test/tint/builtins/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
@@ -1,3 +1,5 @@
+SKIP: FAILED
+
 #version 310 es
 
 uvec2 tint_atomicCompareExchangeWeak(inout uint param_0, uint param_1, uint param_2) {
@@ -26,3 +28,10 @@
   compute_main(gl_LocalInvocationIndex);
   return;
 }
+Error parsing GLSL shader:
+ERROR: 0:5: 'atomicCompSwap' : Atomic memory function can only be used for shader storage block member or shared variable. 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
index d14ef3c..3808a80 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/writer/glsl/generator_impl.cc:2587 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2544 internal compiler error: Multiplanar external texture transform was not run.
 
 
 ********************************************************************
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
index d14ef3c..3808a80 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/writer/glsl/generator_impl.cc:2587 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2544 internal compiler error: Multiplanar external texture transform was not run.
 
 
 ********************************************************************
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
index d14ef3c..3808a80 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/writer/glsl/generator_impl.cc:2587 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2544 internal compiler error: Multiplanar external texture transform was not run.
 
 
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl
index 7cc77ec..005362d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl
@@ -1,45 +1,37 @@
 SKIP: FAILED
 
-vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl:1:13 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
-type Arr = @stride(16) array<f32, 3>;
-            ^^^^^^
-
-vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl:7:15 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
-type Arr_1 = @stride(16) array<i32, 4>;
-              ^^^^^^
-
 #version 310 es
 precision mediump float;
 
 layout(location = 0) out vec4 x_GLF_color_1_1;
-struct tint_padded_array_element {
+struct strided_arr {
   float el;
 };
 
 struct buf1 {
-  tint_padded_array_element x_GLF_uniform_float_values[3];
+  strided_arr x_GLF_uniform_float_values[3];
 };
 
-struct tint_padded_array_element_1 {
+struct strided_arr_1 {
   int el;
 };
 
 struct buf0 {
-  tint_padded_array_element_1 x_GLF_uniform_int_values[4];
+  strided_arr_1 x_GLF_uniform_int_values[4];
 };
 
 layout(binding = 1) uniform buf1_1 {
-  tint_padded_array_element x_GLF_uniform_float_values[3];
+  strided_arr x_GLF_uniform_float_values[3];
 } x_6;
 
 layout(binding = 0) uniform buf0_1 {
-  tint_padded_array_element_1 x_GLF_uniform_int_values[4];
+  strided_arr_1 x_GLF_uniform_int_values[4];
 } x_8;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat4x3 m43 = mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  tint_padded_array_element sums[3] = tint_padded_array_element[3](tint_padded_array_element(0.0f), tint_padded_array_element(0.0f), tint_padded_array_element(0.0f));
+  strided_arr sums[3] = strided_arr[3](strided_arr(0.0f), strided_arr(0.0f), strided_arr(0.0f));
   int i = 0;
   int a = 0;
   int x_67_phi = 0;
@@ -53,8 +45,11 @@
   float x_58 = x_6.x_GLF_uniform_float_values[0].el;
   float x_60 = x_6.x_GLF_uniform_float_values[0].el;
   float x_62 = x_6.x_GLF_uniform_float_values[0].el;
-  tint_padded_array_element tint_symbol_1[3] = tint_padded_array_element[3](tint_padded_array_element(x_58), tint_padded_array_element(x_60), tint_padded_array_element(x_62));
-  sums = tint_symbol_1;
+  strided_arr tint_symbol_1 = strided_arr(x_58);
+  strided_arr tint_symbol_2 = strided_arr(x_60);
+  strided_arr tint_symbol_3 = strided_arr(x_62);
+  strided_arr tint_symbol_4[3] = strided_arr[3](tint_symbol_1, tint_symbol_2, tint_symbol_3);
+  sums = tint_symbol_4;
   int x_65 = x_8.x_GLF_uniform_int_values[0].el;
   i = x_65;
   x_67_phi = x_65;
@@ -110,8 +105,8 @@
 
 main_out tint_symbol() {
   main_1();
-  main_out tint_symbol_2 = main_out(x_GLF_color);
-  return tint_symbol_2;
+  main_out tint_symbol_5 = main_out(x_GLF_color);
+  return tint_symbol_5;
 }
 
 void main() {
@@ -120,9 +115,9 @@
   return;
 }
 Error parsing GLSL shader:
-ERROR: 0:74: '[' :  matrix index out of range '4'
-ERROR: 0:74: '=' :  cannot convert from ' temp mediump 3-component vector of float' to ' temp mediump float'
-ERROR: 0:74: '' : compilation terminated 
+ERROR: 0:77: '[' :  matrix index out of range '4'
+ERROR: 0:77: '=' :  cannot convert from ' temp mediump 3-component vector of float' to ' temp mediump float'
+ERROR: 0:77: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl
index 808d973..eda3b9a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl
@@ -1,39 +1,31 @@
 SKIP: FAILED
 
-vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl:1:13 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
-type Arr = @stride(16) array<f32, 2>;
-            ^^^^^^
-
-vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl:7:15 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
-type Arr_1 = @stride(16) array<i32, 3>;
-              ^^^^^^
-
 #version 310 es
 precision mediump float;
 
 layout(location = 0) out vec4 x_GLF_color_1_1;
-struct tint_padded_array_element {
+struct strided_arr {
   float el;
 };
 
 struct buf1 {
-  tint_padded_array_element x_GLF_uniform_float_values[2];
+  strided_arr x_GLF_uniform_float_values[2];
 };
 
-struct tint_padded_array_element_1 {
+struct strided_arr_1 {
   int el;
 };
 
 struct buf0 {
-  tint_padded_array_element_1 x_GLF_uniform_int_values[3];
+  strided_arr_1 x_GLF_uniform_int_values[3];
 };
 
 layout(binding = 1) uniform buf1_1 {
-  tint_padded_array_element x_GLF_uniform_float_values[2];
+  strided_arr x_GLF_uniform_float_values[2];
 } x_6;
 
 layout(binding = 0) uniform buf0_1 {
-  tint_padded_array_element_1 x_GLF_uniform_int_values[3];
+  strided_arr_1 x_GLF_uniform_int_values[3];
 } x_8;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
index 90862ee..bf1542c 100644
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -31,7 +31,7 @@
 
 if(${TINT_BUILD_SPV_READER} OR ${TINT_BUILD_SPV_WRITER})
   if (NOT IS_DIRECTORY "${SPIRV-Headers_SOURCE_DIR}")
-    set(SPIRV-Headers_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/spirv-headers CACHE STRING "Source directory for SPIR-V headers")
+    set(SPIRV-Headers_SOURCE_DIR "${TINT_THIRD_PARTY_DIR}/vulkan-deps/spirv-headers/src" CACHE STRING "Source directory for SPIR-V headers")
   endif()
 
   if (NOT TARGET SPIRV-Tools)
@@ -40,14 +40,14 @@
     if (${TINT_BUILD_SPIRV_TOOLS_FUZZER})
       set(SPIRV_BUILD_FUZZER ON CACHE BOOL "Controls whether spirv-fuzz is built" FORCE)
     endif()
-    set(SPIRV-Headers_SOURCE_DIR "${TINT_THIRD_PARTY_DIR}/spirv-headers")
-    add_subdirectory("${TINT_THIRD_PARTY_DIR}/spirv-tools" "${CMAKE_BINARY_DIR}/third_party/spirv-tools" EXCLUDE_FROM_ALL)
+    set(SPIRV-Headers_SOURCE_DIR "${TINT_THIRD_PARTY_DIR}/vulkan-deps/spirv-headers/src")
+    add_subdirectory("${TINT_THIRD_PARTY_DIR}/vulkan-deps/spirv-tools/src" "${CMAKE_BINARY_DIR}/third_party/spirv-tools" EXCLUDE_FROM_ALL)
   endif()
 endif()
 
 if(${TINT_BUILD_GLSL_WRITER})
-  set(SPIRV-Headers_SOURCE_DIR "${TINT_THIRD_PARTY_DIR}/glslang")
+  set(SPIRV-Headers_SOURCE_DIR "${TINT_THIRD_PARTY_DIR}/vulkan-deps/glslang/src")
   if(${TINT_BUILD_SAMPLES})
-    add_subdirectory("${TINT_THIRD_PARTY_DIR}/glslang" "${CMAKE_BINARY_DIR}/third_party/glslang" EXCLUDE_FROM_ALL)
+    add_subdirectory("${TINT_THIRD_PARTY_DIR}/vulkan-deps/glslang/src" "${CMAKE_BINARY_DIR}/third_party/glslang" EXCLUDE_FROM_ALL)
   endif()
 endif()
diff --git a/tint_overrides_with_defaults.gni b/tint_overrides_with_defaults.gni
index e952005..9680e35 100644
--- a/tint_overrides_with_defaults.gni
+++ b/tint_overrides_with_defaults.gni
@@ -24,7 +24,7 @@
 
   # Path to spirv-tools checkout
   if (!defined(tint_spirv_tools_dir)) {
-    tint_spirv_tools_dir = "//third_party/spirv-tools"
+    tint_spirv_tools_dir = "//third_party/vulkan-deps/spirv-tools/src"
   }
 
   # Path to googletest checkout
@@ -34,7 +34,7 @@
 
   # Path to spirv-headers checkout
   if (!defined(tint_spirv_headers_dir)) {
-    tint_spirv_headers_dir = "//third_party/spirv-headers"
+    tint_spirv_headers_dir = "//third_party/vulkan-deps/spirv-headers/src"
   }
 
   # Build the SPIR-V input reader