Roll Dawn and add dependencies

Add Dawn's dependencies shaderc and glslang, and roll SPIRV. Update the
BUILD.gn files to match upstream changes.

Bug: skia:9939, chromium:1064563
Change-Id: Ie9720806efe823312da10f7911688f12cad0713e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/278770
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Weston Tracey <westont@google.com>
diff --git a/DEPS b/DEPS
index 2f8955d..f043e0ed 100644
--- a/DEPS
+++ b/DEPS
@@ -8,11 +8,13 @@
   "buildtools"                            : "https://chromium.googlesource.com/chromium/buildtools.git@505de88083136eefd056e5ee4ca0f01fe9b33de8",
   "common"                                : "https://skia.googlesource.com/common.git@9737551d7a52c3db3262db5856e6bcd62c462b92",
   "third_party/externals/angle2"          : "https://chromium.googlesource.com/angle/angle.git@1b2dd6f92a6ba4ac4738ae796692e4844bfd28c7",
-  # Dawn requires jinja2 and markupsafe for the code generator.
+  # Dawn requires jinja2 and markupsafe for the code generator, and glslang and shaderc for SPIRV compilation.
   # When the Dawn revision is updated these should be updated from the Dawn DEPS as well.
-  "third_party/externals/dawn"            : "https://dawn.googlesource.com/dawn.git@604072bc2ed01018eb03bcbbf9d94042f679af63",
+  "third_party/externals/dawn"            : "https://dawn.googlesource.com/dawn.git@11652ff8f8b3c3104eb2627717fa652d432d5b84",
+  "third_party/externals/glslang"         : "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang@1f0fcbe5a30fdc9632a8bff36277103fabf0797c",
   "third_party/externals/jinja2"          : "https://chromium.googlesource.com/chromium/src/third_party/jinja2@b41863e42637544c2941b574c7877d3e1f663e25",
   "third_party/externals/markupsafe"      : "https://chromium.googlesource.com/chromium/src/third_party/markupsafe@8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
+  "third_party/externals/shaderc"         : "https://chromium.googlesource.com/external/github.com/google/shaderc@362becca1ff2a841c21fd675ac3a9c1ee9bb5612",
   "third_party/externals/dng_sdk"         : "https://android.googlesource.com/platform/external/dng_sdk.git@c8d0c9b1d16bfda56f15165d39e0ffa360a11123",
   "third_party/externals/egl-registry"    : "https://skia.googlesource.com/external/github.com/KhronosGroup/EGL-Registry@a0bca08de07c7d7651047bedc0b653cfaaa4f2ae",
   "third_party/externals/expat"           : "https://android.googlesource.com/platform/external/expat.git@e5aa0a2cb0a5f759ef31c0819dc67d9b14246a4a",
@@ -32,9 +34,9 @@
   "third_party/externals/piex"            : "https://android.googlesource.com/platform/external/piex.git@bb217acdca1cc0c16b704669dd6f91a1b509c406",
   "third_party/externals/sdl"             : "https://skia.googlesource.com/third_party/sdl@5d7cfcca344034aff9327f77fc181ae3754e7a90",
   "third_party/externals/sfntly"          : "https://chromium.googlesource.com/external/github.com/googlei18n/sfntly.git@b55ff303ea2f9e26702b514cf6a3196a2e3e2974",
-  "third_party/externals/spirv-cross"     : "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross@dffd33dd9d19c798ffecc10f50e551b42d282628",
-  "third_party/externals/spirv-headers"   : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers.git@29c11140baaf9f7fdaa39a583672c556bf1795a1",
-  "third_party/externals/spirv-tools"     : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git@0c4feb643b89d1792b02f7cbef315e9d95633bd7",
+  "third_party/externals/spirv-cross"     : "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross@871c85d7f0edc6b613e3959bc51d13bfbc2fe2df",
+  "third_party/externals/spirv-headers"   : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers.git@f8bf11a0253a32375c32cad92c841237b96696c0",
+  "third_party/externals/spirv-tools"     : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git@1c8bda3721e6b9302f694b58c26d32eff341b126",
   "third_party/externals/swiftshader"     : "https://swiftshader.googlesource.com/SwiftShader@1c29477aa06ea733994d1d11d6bf63ba27ac8359",
   #"third_party/externals/v8"              : "https://chromium.googlesource.com/v8/v8.git@5f1ae66d5634e43563b2d25ea652dfb94c31a3b4",
   "third_party/externals/wuffs"           : "https://skia.googlesource.com/external/github.com/google/wuffs.git@4080840928c0b05a80cda0d14ac2e2615f679f1a",
diff --git a/build_overrides/build.gni b/build_overrides/build.gni
new file mode 100644
index 0000000..e8a2082
--- /dev/null
+++ b/build_overrides/build.gni
@@ -0,0 +1,6 @@
+# Copyright 2020 Google LLC.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+build_with_chromium = false
diff --git a/build_overrides/dawn.gni b/build_overrides/dawn.gni
index 14bbd0d..1a3456b 100644
--- a/build_overrides/dawn.gni
+++ b/build_overrides/dawn.gni
@@ -12,8 +12,9 @@
 
 # skia/third_party/externals/jinja2 relative to skia/third_party/dawn/BUILD.gn
 dawn_jinja2_dir = "../externals/jinja2"
+
 # dawn_glfw_dir = "//third_party/glfw"
 # dawn_googletest_dir = "//third_party/googletest"
-# dawn_shaderc_dir = "//third_party/shaderc"
-# dawn_spirv_tools_dir = "//third_party/SPIRV-Tools"
-# dawn_spirv_cross_dir = "//third_party/spirv-cross"
+dawn_shaderc_dir = "//third_party/shaderc"
+dawn_spirv_tools_dir = "//third_party/spirv-tools"
+dawn_spirv_cross_dir = "//third_party/spirv-cross"
diff --git a/build_overrides/glslang.gni b/build_overrides/glslang.gni
new file mode 100644
index 0000000..c334cb8
--- /dev/null
+++ b/build_overrides/glslang.gni
@@ -0,0 +1,6 @@
+# Copyright 2020 Google LLC.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+glslang_spirv_tools_dir = "//third_party/spirv-tools"
diff --git a/build_overrides/shaderc.gni b/build_overrides/shaderc.gni
new file mode 100644
index 0000000..d06cfc3
--- /dev/null
+++ b/build_overrides/shaderc.gni
@@ -0,0 +1,11 @@
+# Copyright 2020 Google LLC.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+shaderc_glslang_dir = "//third_party/glslang/"
+shaderc_spirv_tools_dir = "//third_party/spirv-tools/"
+shaderc_spirv_cross_dir = "//third_party/spirv-cross/"
+shaderc_spirv_headers_dir = "//third_party/externals/spirv-headers/"
+
+shaderc_enable_spvc_parser = false
diff --git a/build_overrides/spirv_tools.gni b/build_overrides/spirv_tools.gni
new file mode 100644
index 0000000..4808287
--- /dev/null
+++ b/build_overrides/spirv_tools.gni
@@ -0,0 +1,9 @@
+# Copyright 2020 Google LLC.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+spirv_tools_standalone = false
+
+spirv_tools_googletest_dir = "//third_party/googletest/src"
+spirv_tools_spirv_headers_dir = "//third_party/spirv-headers"
diff --git a/infra/bots/compile.isolate b/infra/bots/compile.isolate
index f774eb8..7457f36 100644
--- a/infra/bots/compile.isolate
+++ b/infra/bots/compile.isolate
@@ -13,7 +13,7 @@
       '../../bin/fetch-clang-format',
       '../../bin/fetch-gn',
       '../../build/fuchsia',
-      '../../build_overrides/dawn.gni',
+      '../../build_overrides',
       '../../buildtools',
       '../../dm',
       '../../docs/examples',
diff --git a/third_party/dawn/BUILD.gn b/third_party/dawn/BUILD.gn
index 79c44e8..f9d326d 100644
--- a/third_party/dawn/BUILD.gn
+++ b/third_party/dawn/BUILD.gn
@@ -111,8 +111,8 @@
     ":dawn_common",
     ":libdawn_native_headers",
     ":libdawn_native_utils_gen",
-    "//third_party/spirv-cross:spirv_cross",
-    "//third_party/spirv-tools:spvtools_val",
+    "${dawn_spirv_cross_dir}:spirv_cross",
+    "${dawn_spirv_tools_dir}:spvtools_val",
   ]
 
   configs += [ ":libdawn_native_internal" ]
@@ -123,193 +123,206 @@
   # libdawn_native target
   public_deps = [
     ":dawn_platform",
+    "${dawn_shaderc_dir}:libshaderc_spvc_sources",
   ]
 
   sources = rebase_path(get_target_outputs(":libdawn_native_utils_gen"),
                         ".",
                         "$dawn_root")
-  sources += rebase_path([
-                           "src/dawn_native/Adapter.cpp",
-                           "src/dawn_native/Adapter.h",
-                           "src/dawn_native/AttachmentState.cpp",
-                           "src/dawn_native/AttachmentState.h",
-                           "src/dawn_native/BackendConnection.cpp",
-                           "src/dawn_native/BackendConnection.h",
-                           "src/dawn_native/BindGroup.cpp",
-                           "src/dawn_native/BindGroup.h",
-                           "src/dawn_native/BindGroupLayout.cpp",
-                           "src/dawn_native/BindGroupLayout.h",
-                           "src/dawn_native/BuddyAllocator.cpp",
-                           "src/dawn_native/BuddyAllocator.h",
-                           "src/dawn_native/BuddyMemoryAllocator.cpp",
-                           "src/dawn_native/BuddyMemoryAllocator.h",
-                           "src/dawn_native/Buffer.cpp",
-                           "src/dawn_native/Buffer.h",
-                           "src/dawn_native/CachedObject.cpp",
-                           "src/dawn_native/CommandAllocator.cpp",
-                           "src/dawn_native/CommandAllocator.h",
-                           "src/dawn_native/CommandBuffer.cpp",
-                           "src/dawn_native/CommandBuffer.h",
-                           "src/dawn_native/CommandBufferStateTracker.cpp",
-                           "src/dawn_native/CommandBufferStateTracker.h",
-                           "src/dawn_native/CommandEncoder.cpp",
-                           "src/dawn_native/CommandEncoder.h",
-                           "src/dawn_native/CommandValidation.cpp",
-                           "src/dawn_native/CommandValidation.h",
-                           "src/dawn_native/Commands.cpp",
-                           "src/dawn_native/Commands.h",
-                           "src/dawn_native/ComputePassEncoder.cpp",
-                           "src/dawn_native/ComputePassEncoder.h",
-                           "src/dawn_native/ComputePipeline.cpp",
-                           "src/dawn_native/ComputePipeline.h",
-                           "src/dawn_native/DawnNative.cpp",
-                           "src/dawn_native/Device.cpp",
-                           "src/dawn_native/Device.h",
-                           "src/dawn_native/DynamicUploader.cpp",
-                           "src/dawn_native/DynamicUploader.h",
-                           "src/dawn_native/Device.h",
-                           "src/dawn_native/EncodingContext.cpp",
-                           "src/dawn_native/EncodingContext.h",
-                           "src/dawn_native/Error.cpp",
-                           "src/dawn_native/Error.h",
-                           "src/dawn_native/ErrorData.cpp",
-                           "src/dawn_native/ErrorData.h",
-                           "src/dawn_native/ErrorScope.cpp",
-                           "src/dawn_native/ErrorScope.h",
-                           "src/dawn_native/ErrorScopeTracker.cpp",
-                           "src/dawn_native/ErrorScopeTracker.h",
-                           "src/dawn_native/Extensions.cpp",
-                           "src/dawn_native/Extensions.h",
-                           "src/dawn_native/Fence.cpp",
-                           "src/dawn_native/Fence.h",
-                           "src/dawn_native/FenceSignalTracker.cpp",
-                           "src/dawn_native/FenceSignalTracker.h",
-                           "src/dawn_native/Format.cpp",
-                           "src/dawn_native/Format.h",
-                           "src/dawn_native/Forward.h",
-                           "src/dawn_native/Instance.cpp",
-                           "src/dawn_native/Instance.h",
-                           "src/dawn_native/ObjectBase.h",
-                           "src/dawn_native/ObjectBase.cpp",
-                           "src/dawn_native/PassResourceUsage.h",
-                           "src/dawn_native/PassResourceUsageTracker.cpp",
-                           "src/dawn_native/PassResourceUsageTracker.h",
-                           "src/dawn_native/PerStage.cpp",
-                           "src/dawn_native/PerStage.h",
-                           "src/dawn_native/Pipeline.cpp",
-                           "src/dawn_native/Pipeline.h",
-                           "src/dawn_native/PipelineLayout.cpp",
-                           "src/dawn_native/PipelineLayout.h",
-                           "src/dawn_native/ProgrammablePassEncoder.cpp",
-                           "src/dawn_native/ProgrammablePassEncoder.h",
-                           "src/dawn_native/Queue.cpp",
-                           "src/dawn_native/Queue.h",
-                           "src/dawn_native/RefCounted.cpp",
-                           "src/dawn_native/RefCounted.h",
-                           "src/dawn_native/RenderBundle.cpp",
-                           "src/dawn_native/RenderBundle.h",
-                           "src/dawn_native/RenderBundleEncoder.cpp",
-                           "src/dawn_native/RenderBundleEncoder.h",
-                           "src/dawn_native/RenderEncoderBase.cpp",
-                           "src/dawn_native/RenderEncoderBase.h",
-                           "src/dawn_native/RenderPassEncoder.cpp",
-                           "src/dawn_native/RenderPassEncoder.h",
-                           "src/dawn_native/RenderPipeline.cpp",
-                           "src/dawn_native/RenderPipeline.h",
-                           "src/dawn_native/ResourceHeap.h",
-                           "src/dawn_native/ResourceHeapAllocator.h",
-                           "src/dawn_native/ResourceMemoryAllocation.cpp",
-                           "src/dawn_native/ResourceMemoryAllocation.h",
-                           "src/dawn_native/RingBufferAllocator.cpp",
-                           "src/dawn_native/RingBufferAllocator.h",
-                           "src/dawn_native/Sampler.cpp",
-                           "src/dawn_native/Sampler.h",
-                           "src/dawn_native/ShaderModule.cpp",
-                           "src/dawn_native/ShaderModule.h",
-                           "src/dawn_native/StagingBuffer.cpp",
-                           "src/dawn_native/StagingBuffer.h",
-                           "src/dawn_native/SwapChain.cpp",
-                           "src/dawn_native/SwapChain.h",
-                           "src/dawn_native/Texture.cpp",
-                           "src/dawn_native/Texture.h",
-                           "src/dawn_native/Toggles.cpp",
-                           "src/dawn_native/Toggles.h",
-                           "src/dawn_native/ToBackend.h",
-                           "src/dawn_native/dawn_platform.h",
-                         ],
-                         ".",
-                         "$dawn_root")
+  sources +=
+      rebase_path([
+                    "src/dawn_native/Adapter.cpp",
+                    "src/dawn_native/Adapter.h",
+                    "src/dawn_native/AttachmentState.cpp",
+                    "src/dawn_native/AttachmentState.h",
+                    "src/dawn_native/BackendConnection.cpp",
+                    "src/dawn_native/BackendConnection.h",
+                    "src/dawn_native/BindGroup.cpp",
+                    "src/dawn_native/BindGroup.h",
+                    "src/dawn_native/BindGroupAndStorageBarrierTrackers.h",
+                    "src/dawn_native/BindGroupLayout.cpp",
+                    "src/dawn_native/BindGroupLayout.h",
+                    "src/dawn_native/BuddyAllocator.cpp",
+                    "src/dawn_native/BuddyAllocator.h",
+                    "src/dawn_native/BuddyMemoryAllocator.cpp",
+                    "src/dawn_native/BuddyMemoryAllocator.h",
+                    "src/dawn_native/Buffer.cpp",
+                    "src/dawn_native/Buffer.h",
+                    "src/dawn_native/CachedObject.cpp",
+                    "src/dawn_native/CommandAllocator.cpp",
+                    "src/dawn_native/CommandAllocator.h",
+                    "src/dawn_native/CommandBuffer.cpp",
+                    "src/dawn_native/CommandBuffer.h",
+                    "src/dawn_native/CommandBufferStateTracker.cpp",
+                    "src/dawn_native/CommandBufferStateTracker.h",
+                    "src/dawn_native/CommandEncoder.cpp",
+                    "src/dawn_native/CommandEncoder.h",
+                    "src/dawn_native/CommandValidation.cpp",
+                    "src/dawn_native/CommandValidation.h",
+                    "src/dawn_native/Commands.cpp",
+                    "src/dawn_native/Commands.h",
+                    "src/dawn_native/ComputePassEncoder.cpp",
+                    "src/dawn_native/ComputePassEncoder.h",
+                    "src/dawn_native/ComputePipeline.cpp",
+                    "src/dawn_native/ComputePipeline.h",
+                    "src/dawn_native/DawnNative.cpp",
+                    "src/dawn_native/Device.cpp",
+                    "src/dawn_native/Device.h",
+                    "src/dawn_native/DynamicUploader.cpp",
+                    "src/dawn_native/DynamicUploader.h",
+                    "src/dawn_native/Device.h",
+                    "src/dawn_native/EncodingContext.cpp",
+                    "src/dawn_native/EncodingContext.h",
+                    "src/dawn_native/Error.cpp",
+                    "src/dawn_native/Error.h",
+                    "src/dawn_native/ErrorData.cpp",
+                    "src/dawn_native/ErrorData.h",
+                    "src/dawn_native/ErrorInjector.cpp",
+                    "src/dawn_native/ErrorInjector.h",
+                    "src/dawn_native/ErrorScope.cpp",
+                    "src/dawn_native/ErrorScope.h",
+                    "src/dawn_native/ErrorScopeTracker.cpp",
+                    "src/dawn_native/ErrorScopeTracker.h",
+                    "src/dawn_native/Extensions.cpp",
+                    "src/dawn_native/Extensions.h",
+                    "src/dawn_native/Fence.cpp",
+                    "src/dawn_native/Fence.h",
+                    "src/dawn_native/FenceSignalTracker.cpp",
+                    "src/dawn_native/FenceSignalTracker.h",
+                    "src/dawn_native/Format.cpp",
+                    "src/dawn_native/Format.h",
+                    "src/dawn_native/Forward.h",
+                    "src/dawn_native/Instance.cpp",
+                    "src/dawn_native/Instance.h",
+                    "src/dawn_native/ObjectBase.h",
+                    "src/dawn_native/ObjectBase.cpp",
+                    "src/dawn_native/PassResourceUsage.h",
+                    "src/dawn_native/PassResourceUsageTracker.cpp",
+                    "src/dawn_native/PassResourceUsageTracker.h",
+                    "src/dawn_native/PerStage.cpp",
+                    "src/dawn_native/PerStage.h",
+                    "src/dawn_native/Pipeline.cpp",
+                    "src/dawn_native/Pipeline.h",
+                    "src/dawn_native/PipelineLayout.cpp",
+                    "src/dawn_native/PipelineLayout.h",
+                    "src/dawn_native/ProgrammablePassEncoder.cpp",
+                    "src/dawn_native/ProgrammablePassEncoder.h",
+                    "src/dawn_native/Queue.cpp",
+                    "src/dawn_native/Queue.h",
+                    "src/dawn_native/RefCounted.cpp",
+                    "src/dawn_native/RefCounted.h",
+                    "src/dawn_native/RenderBundle.cpp",
+                    "src/dawn_native/RenderBundle.h",
+                    "src/dawn_native/RenderBundleEncoder.cpp",
+                    "src/dawn_native/RenderBundleEncoder.h",
+                    "src/dawn_native/RenderEncoderBase.cpp",
+                    "src/dawn_native/RenderEncoderBase.h",
+                    "src/dawn_native/RenderPassEncoder.cpp",
+                    "src/dawn_native/RenderPassEncoder.h",
+                    "src/dawn_native/RenderPipeline.cpp",
+                    "src/dawn_native/RenderPipeline.h",
+                    "src/dawn_native/ResourceHeap.h",
+                    "src/dawn_native/ResourceHeapAllocator.h",
+                    "src/dawn_native/ResourceMemoryAllocation.cpp",
+                    "src/dawn_native/ResourceMemoryAllocation.h",
+                    "src/dawn_native/RingBufferAllocator.cpp",
+                    "src/dawn_native/RingBufferAllocator.h",
+                    "src/dawn_native/Sampler.cpp",
+                    "src/dawn_native/Sampler.h",
+                    "src/dawn_native/ShaderModule.cpp",
+                    "src/dawn_native/ShaderModule.h",
+                    "src/dawn_native/StagingBuffer.cpp",
+                    "src/dawn_native/StagingBuffer.h",
+                    "src/dawn_native/Surface.cpp",
+                    "src/dawn_native/Surface.h",
+                    "src/dawn_native/SwapChain.cpp",
+                    "src/dawn_native/SwapChain.h",
+                    "src/dawn_native/Texture.cpp",
+                    "src/dawn_native/Texture.h",
+                    "src/dawn_native/Toggles.cpp",
+                    "src/dawn_native/Toggles.h",
+                    "src/dawn_native/ToBackend.h",
+                    "src/dawn_native/dawn_platform.h",
+                  ],
+                  ".",
+                  "$dawn_root")
 
   if (dawn_enable_d3d12) {
     libs += [ "dxguid.lib" ]
-    sources +=
-        rebase_path([
-                      "src/dawn_native/d3d12/AdapterD3D12.cpp",
-                      "src/dawn_native/d3d12/AdapterD3D12.h",
-                      "src/dawn_native/d3d12/BackendD3D12.cpp",
-                      "src/dawn_native/d3d12/BackendD3D12.h",
-                      "src/dawn_native/d3d12/BindGroupD3D12.cpp",
-                      "src/dawn_native/d3d12/BindGroupD3D12.h",
-                      "src/dawn_native/d3d12/BindGroupLayoutD3D12.cpp",
-                      "src/dawn_native/d3d12/BindGroupLayoutD3D12.h",
-                      "src/dawn_native/d3d12/BufferD3D12.cpp",
-                      "src/dawn_native/d3d12/BufferD3D12.h",
-                      "src/dawn_native/d3d12/CommandAllocatorManager.cpp",
-                      "src/dawn_native/d3d12/CommandAllocatorManager.h",
-                      "src/dawn_native/d3d12/CommandBufferD3D12.cpp",
-                      "src/dawn_native/d3d12/CommandBufferD3D12.h",
-                      "src/dawn_native/d3d12/CommandRecordingContext.cpp",
-                      "src/dawn_native/d3d12/CommandRecordingContext.h",
-                      "src/dawn_native/d3d12/ComputePipelineD3D12.cpp",
-                      "src/dawn_native/d3d12/ComputePipelineD3D12.h",
-                      "src/dawn_native/d3d12/D3D12Backend.cpp",
-                      "src/dawn_native/d3d12/D3D12Error.cpp",
-                      "src/dawn_native/d3d12/D3D12Error.h",
-                      "src/dawn_native/d3d12/D3D12Info.cpp",
-                      "src/dawn_native/d3d12/D3D12Info.h",
-                      "src/dawn_native/d3d12/DescriptorHeapAllocator.cpp",
-                      "src/dawn_native/d3d12/DescriptorHeapAllocator.h",
-                      "src/dawn_native/d3d12/DeviceD3D12.cpp",
-                      "src/dawn_native/d3d12/DeviceD3D12.h",
-                      "src/dawn_native/d3d12/Forward.h",
-                      "src/dawn_native/d3d12/HeapD3D12.cpp",
-                      "src/dawn_native/d3d12/HeapD3D12.h",
-                      "src/dawn_native/d3d12/HeapAllocatorD3D12.cpp",
-                      "src/dawn_native/d3d12/HeapAllocatorD3D12.h",
-                      "src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp",
-                      "src/dawn_native/d3d12/NativeSwapChainImplD3D12.h",
-                      "src/dawn_native/d3d12/PipelineLayoutD3D12.cpp",
-                      "src/dawn_native/d3d12/PipelineLayoutD3D12.h",
-                      "src/dawn_native/d3d12/PlatformFunctions.cpp",
-                      "src/dawn_native/d3d12/PlatformFunctions.h",
-                      "src/dawn_native/d3d12/QueueD3D12.cpp",
-                      "src/dawn_native/d3d12/QueueD3D12.h",
-                      "src/dawn_native/d3d12/RenderPassBuilderD3D12.cpp",
-                      "src/dawn_native/d3d12/RenderPassBuilderD3D12.h",
-                      "src/dawn_native/d3d12/RenderPipelineD3D12.cpp",
-                      "src/dawn_native/d3d12/RenderPipelineD3D12.h",
-                      "src/dawn_native/d3d12/ResourceAllocatorManagerD3D12.cpp",
-                      "src/dawn_native/d3d12/ResourceAllocatorManagerD3D12.h",
-                      "src/dawn_native/d3d12/ResourceHeapAllocationD3D12.cpp",
-                      "src/dawn_native/d3d12/ResourceHeapAllocationD3D12.h",
-                      "src/dawn_native/d3d12/SamplerD3D12.cpp",
-                      "src/dawn_native/d3d12/SamplerD3D12.h",
-                      "src/dawn_native/d3d12/ShaderModuleD3D12.cpp",
-                      "src/dawn_native/d3d12/ShaderModuleD3D12.h",
-                      "src/dawn_native/d3d12/StagingBufferD3D12.cpp",
-                      "src/dawn_native/d3d12/StagingBufferD3D12.h",
-                      "src/dawn_native/d3d12/SwapChainD3D12.cpp",
-                      "src/dawn_native/d3d12/SwapChainD3D12.h",
-                      "src/dawn_native/d3d12/TextureCopySplitter.cpp",
-                      "src/dawn_native/d3d12/TextureCopySplitter.h",
-                      "src/dawn_native/d3d12/TextureD3D12.cpp",
-                      "src/dawn_native/d3d12/TextureD3D12.h",
-                      "src/dawn_native/d3d12/UtilsD3D12.cpp",
-                      "src/dawn_native/d3d12/UtilsD3D12.h",
-                      "src/dawn_native/d3d12/d3d12_platform.h",
-                    ],
-                    ".",
-                    "$dawn_root")
+    sources += rebase_path(
+            [
+              "src/dawn_native/d3d12/AdapterD3D12.cpp",
+              "src/dawn_native/d3d12/AdapterD3D12.h",
+              "src/dawn_native/d3d12/BackendD3D12.cpp",
+              "src/dawn_native/d3d12/BackendD3D12.h",
+              "src/dawn_native/d3d12/BindGroupD3D12.cpp",
+              "src/dawn_native/d3d12/BindGroupD3D12.h",
+              "src/dawn_native/d3d12/BindGroupLayoutD3D12.cpp",
+              "src/dawn_native/d3d12/BindGroupLayoutD3D12.h",
+              "src/dawn_native/d3d12/BufferD3D12.cpp",
+              "src/dawn_native/d3d12/BufferD3D12.h",
+              "src/dawn_native/d3d12/CommandAllocatorManager.cpp",
+              "src/dawn_native/d3d12/CommandAllocatorManager.h",
+              "src/dawn_native/d3d12/CommandBufferD3D12.cpp",
+              "src/dawn_native/d3d12/CommandBufferD3D12.h",
+              "src/dawn_native/d3d12/CommandRecordingContext.cpp",
+              "src/dawn_native/d3d12/CommandRecordingContext.h",
+              "src/dawn_native/d3d12/ComputePipelineD3D12.cpp",
+              "src/dawn_native/d3d12/ComputePipelineD3D12.h",
+              "src/dawn_native/d3d12/D3D12Backend.cpp",
+              "src/dawn_native/d3d12/D3D12Error.cpp",
+              "src/dawn_native/d3d12/D3D12Error.h",
+              "src/dawn_native/d3d12/D3D12Info.cpp",
+              "src/dawn_native/d3d12/D3D12Info.h",
+              "src/dawn_native/d3d12/DescriptorHeapAllocationD3D12.cpp",
+              "src/dawn_native/d3d12/DescriptorHeapAllocationD3D12.h",
+              "src/dawn_native/d3d12/DescriptorHeapAllocator.cpp",
+              "src/dawn_native/d3d12/DescriptorHeapAllocator.h",
+              "src/dawn_native/d3d12/DeviceD3D12.cpp",
+              "src/dawn_native/d3d12/DeviceD3D12.h",
+              "src/dawn_native/d3d12/Forward.h",
+              "src/dawn_native/d3d12/HeapD3D12.cpp",
+              "src/dawn_native/d3d12/HeapD3D12.h",
+              "src/dawn_native/d3d12/HeapAllocatorD3D12.cpp",
+              "src/dawn_native/d3d12/HeapAllocatorD3D12.h",
+              "src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp",
+              "src/dawn_native/d3d12/NativeSwapChainImplD3D12.h",
+              "src/dawn_native/d3d12/PipelineLayoutD3D12.cpp",
+              "src/dawn_native/d3d12/PipelineLayoutD3D12.h",
+              "src/dawn_native/d3d12/PlatformFunctions.cpp",
+              "src/dawn_native/d3d12/PlatformFunctions.h",
+              "src/dawn_native/d3d12/QueueD3D12.cpp",
+              "src/dawn_native/d3d12/QueueD3D12.h",
+              "src/dawn_native/d3d12/RenderPassBuilderD3D12.cpp",
+              "src/dawn_native/d3d12/RenderPassBuilderD3D12.h",
+              "src/dawn_native/d3d12/RenderPipelineD3D12.cpp",
+              "src/dawn_native/d3d12/RenderPipelineD3D12.h",
+              "src/dawn_native/d3d12/ResidencyManagerD3D12.cpp",
+              "src/dawn_native/d3d12/ResidencyManagerD3D12.h",
+              "src/dawn_native/d3d12/ResourceAllocatorManagerD3D12.cpp",
+              "src/dawn_native/d3d12/ResourceAllocatorManagerD3D12.h",
+              "src/dawn_native/d3d12/ResourceHeapAllocationD3D12.cpp",
+              "src/dawn_native/d3d12/ResourceHeapAllocationD3D12.h",
+              "src/dawn_native/d3d12/SamplerD3D12.cpp",
+              "src/dawn_native/d3d12/SamplerD3D12.h",
+              "src/dawn_native/d3d12/ShaderModuleD3D12.cpp",
+              "src/dawn_native/d3d12/ShaderModuleD3D12.h",
+              "src/dawn_native/d3d12/ShaderVisibleDescriptorAllocatorD3D12.cpp",
+              "src/dawn_native/d3d12/ShaderVisibleDescriptorAllocatorD3D12.h",
+              "src/dawn_native/d3d12/StagingBufferD3D12.cpp",
+              "src/dawn_native/d3d12/StagingBufferD3D12.h",
+              "src/dawn_native/d3d12/SwapChainD3D12.cpp",
+              "src/dawn_native/d3d12/SwapChainD3D12.h",
+              "src/dawn_native/d3d12/TextureCopySplitter.cpp",
+              "src/dawn_native/d3d12/TextureCopySplitter.h",
+              "src/dawn_native/d3d12/TextureD3D12.cpp",
+              "src/dawn_native/d3d12/TextureD3D12.h",
+              "src/dawn_native/d3d12/UtilsD3D12.cpp",
+              "src/dawn_native/d3d12/UtilsD3D12.h",
+              "src/dawn_native/d3d12/d3d12_platform.h",
+            ],
+            ".",
+            "$dawn_root")
   }
 
   if (dawn_enable_metal) {
@@ -318,14 +331,22 @@
       "Cocoa.framework",
       "IOKit.framework",
       "IOSurface.framework",
+      "QuartzCore.framework",
     ]
     sources += rebase_path([
+                             "src/dawn_native/Surface_metal.mm",
                              "src/dawn_native/metal/BackendMTL.h",
                              "src/dawn_native/metal/BackendMTL.mm",
+                             "src/dawn_native/metal/BindGroupLayoutMTL.h",
+                             "src/dawn_native/metal/BindGroupLayoutMTL.mm",
+                             "src/dawn_native/metal/BindGroupMTL.h",
+                             "src/dawn_native/metal/BindGroupMTL.mm",
                              "src/dawn_native/metal/BufferMTL.h",
                              "src/dawn_native/metal/BufferMTL.mm",
                              "src/dawn_native/metal/CommandBufferMTL.h",
                              "src/dawn_native/metal/CommandBufferMTL.mm",
+                             "src/dawn_native/metal/CommandRecordingContext.h",
+                             "src/dawn_native/metal/CommandRecordingContext.mm",
                              "src/dawn_native/metal/ComputePipelineMTL.h",
                              "src/dawn_native/metal/ComputePipelineMTL.mm",
                              "src/dawn_native/metal/DeviceMTL.h",
@@ -372,6 +393,10 @@
         rebase_path([
                       "src/dawn_native/opengl/BackendGL.cpp",
                       "src/dawn_native/opengl/BackendGL.h",
+                      "src/dawn_native/opengl/BindGroupGL.cpp",
+                      "src/dawn_native/opengl/BindGroupGL.h",
+                      "src/dawn_native/opengl/BindGroupLayoutGL.cpp",
+                      "src/dawn_native/opengl/BindGroupLayoutGL.h",
                       "src/dawn_native/opengl/BufferGL.cpp",
                       "src/dawn_native/opengl/BufferGL.h",
                       "src/dawn_native/opengl/CommandBufferGL.cpp",
@@ -480,7 +505,15 @@
             ],
             ".",
             "$dawn_root")
-    if (is_linux) {
+    if (is_chromeos) {
+      sources += rebase_path(
+              [
+                "src/dawn_native/vulkan/external_memory/MemoryServiceDmaBuf.cpp",
+                "src/dawn_native/vulkan/external_semaphore/SemaphoreServiceOpaqueFD.cpp",
+              ],
+              ".",
+              "$dawn_root")
+    } else if (is_linux) {
       sources += rebase_path(
               [
                 "src/dawn_native/vulkan/external_memory/MemoryServiceOpaqueFD.cpp",
@@ -548,9 +581,15 @@
                           "Compiler.h",
                           "DynamicLib.cpp",
                           "DynamicLib.h",
+                          "GPUInfo.cpp",
+                          "GPUInfo.h",
                           "HashUtils.h",
+                          "LinkedList.h",
+                          "Log.cpp",
+                          "Log.h",
                           "Math.cpp",
                           "Math.h",
+                          "PlacementAllocated.h",
                           "Platform.h",
                           "Result.cpp",
                           "Result.h",
@@ -558,6 +597,8 @@
                           "SerialMap.h",
                           "SerialQueue.h",
                           "SerialStorage.h",
+                          "SlabAllocator.cpp",
+                          "SlabAllocator.h",
                           "SwapChainUtils.h",
                           "vulkan_platform.h",
                           "windows_with_undefs.h",
@@ -569,6 +610,9 @@
   deps = [
     ":dawn_headers",
   ]
+  if (dawn_enable_vulkan) {
+    configs += [ "//:our_vulkan_headers" ]
+  }
 }
 
 ###############################################################################
@@ -578,7 +622,6 @@
 dawn_json_generator("dawn_headers_gen") {
   target = "dawn_headers"
   outputs = [
-    "src/include/dawn/dawn.h",
     "src/include/dawn/dawn_proc_table.h",
     "src/include/dawn/webgpu.h",
   ]
@@ -604,7 +647,6 @@
 dawn_json_generator("dawncpp_headers_gen") {
   target = "dawncpp_headers"
   outputs = [
-    "src/include/dawn/dawncpp.h",
     "src/include/dawn/webgpu_cpp.h",
   ]
 }
diff --git a/third_party/glslang/BUILD.gn b/third_party/glslang/BUILD.gn
new file mode 100644
index 0000000..831d1c6
--- /dev/null
+++ b/third_party/glslang/BUILD.gn
@@ -0,0 +1,140 @@
+# Copyright 2020 Google LLC.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build_overrides/glslang.gni")
+import("../third_party.gni")
+
+glslang_root = "../externals/glslang"
+
+spirv_tools_dir = glslang_spirv_tools_dir
+
+third_party("glslang_sources") {
+  public_include_dirs = [ "$glslang_root" ]
+  public_defines = [ "ENABLE_HLSL=1" ]
+
+  sources =
+      rebase_path([
+                    "OGLCompilersDLL/InitializeDll.cpp",
+                    "OGLCompilersDLL/InitializeDll.h",
+                    "SPIRV/GLSL.ext.AMD.h",
+                    "SPIRV/GLSL.ext.EXT.h",
+                    "SPIRV/GLSL.ext.KHR.h",
+                    "SPIRV/GLSL.ext.NV.h",
+                    "SPIRV/GLSL.std.450.h",
+                    "SPIRV/GlslangToSpv.cpp",
+                    "SPIRV/GlslangToSpv.h",
+                    "SPIRV/InReadableOrder.cpp",
+                    "SPIRV/Logger.cpp",
+                    "SPIRV/Logger.h",
+                    "SPIRV/NonSemanticDebugPrintf.h",
+                    "SPIRV/SPVRemapper.cpp",
+                    "SPIRV/SPVRemapper.h",
+                    "SPIRV/SpvBuilder.cpp",
+                    "SPIRV/SpvBuilder.h",
+                    "SPIRV/SpvPostProcess.cpp",
+                    "SPIRV/SpvTools.cpp",
+                    "SPIRV/SpvTools.h",
+                    "SPIRV/bitutils.h",
+                    "SPIRV/disassemble.cpp",
+                    "SPIRV/disassemble.h",
+                    "SPIRV/doc.cpp",
+                    "SPIRV/doc.h",
+                    "SPIRV/hex_float.h",
+                    "SPIRV/spirv.hpp",
+                    "SPIRV/spvIR.h",
+                    "glslang/GenericCodeGen/CodeGen.cpp",
+                    "glslang/GenericCodeGen/Link.cpp",
+                    "glslang/Include/BaseTypes.h",
+                    "glslang/Include/Common.h",
+                    "glslang/Include/ConstantUnion.h",
+                    "glslang/Include/InfoSink.h",
+                    "glslang/Include/InitializeGlobals.h",
+                    "glslang/Include/PoolAlloc.h",
+                    "glslang/Include/ResourceLimits.h",
+                    "glslang/Include/ShHandle.h",
+                    "glslang/Include/Types.h",
+                    "glslang/Include/arrays.h",
+                    "glslang/Include/intermediate.h",
+                    "glslang/Include/revision.h",
+                    "glslang/MachineIndependent/Constant.cpp",
+                    "glslang/MachineIndependent/InfoSink.cpp",
+                    "glslang/MachineIndependent/Initialize.cpp",
+                    "glslang/MachineIndependent/Initialize.h",
+                    "glslang/MachineIndependent/IntermTraverse.cpp",
+                    "glslang/MachineIndependent/Intermediate.cpp",
+                    "glslang/MachineIndependent/LiveTraverser.h",
+                    "glslang/MachineIndependent/ParseContextBase.cpp",
+                    "glslang/MachineIndependent/ParseHelper.cpp",
+                    "glslang/MachineIndependent/ParseHelper.h",
+                    "glslang/MachineIndependent/PoolAlloc.cpp",
+                    "glslang/MachineIndependent/RemoveTree.cpp",
+                    "glslang/MachineIndependent/RemoveTree.h",
+                    "glslang/MachineIndependent/Scan.cpp",
+                    "glslang/MachineIndependent/Scan.h",
+                    "glslang/MachineIndependent/ScanContext.h",
+                    "glslang/MachineIndependent/ShaderLang.cpp",
+                    "glslang/MachineIndependent/SymbolTable.cpp",
+                    "glslang/MachineIndependent/SymbolTable.h",
+                    "glslang/MachineIndependent/Versions.cpp",
+                    "glslang/MachineIndependent/Versions.h",
+                    "glslang/MachineIndependent/attribute.cpp",
+                    "glslang/MachineIndependent/attribute.h",
+                    "glslang/MachineIndependent/gl_types.h",
+                    "glslang/MachineIndependent/glslang_tab.cpp",
+                    "glslang/MachineIndependent/glslang_tab.cpp.h",
+                    "glslang/MachineIndependent/intermOut.cpp",
+                    "glslang/MachineIndependent/iomapper.cpp",
+                    "glslang/MachineIndependent/iomapper.h",
+                    "glslang/MachineIndependent/limits.cpp",
+                    "glslang/MachineIndependent/linkValidate.cpp",
+                    "glslang/MachineIndependent/localintermediate.h",
+                    "glslang/MachineIndependent/parseConst.cpp",
+                    "glslang/MachineIndependent/parseVersions.h",
+                    "glslang/MachineIndependent/preprocessor/Pp.cpp",
+                    "glslang/MachineIndependent/preprocessor/PpAtom.cpp",
+                    "glslang/MachineIndependent/preprocessor/PpContext.cpp",
+                    "glslang/MachineIndependent/preprocessor/PpContext.h",
+                    "glslang/MachineIndependent/preprocessor/PpScanner.cpp",
+                    "glslang/MachineIndependent/preprocessor/PpTokens.cpp",
+                    "glslang/MachineIndependent/preprocessor/PpTokens.h",
+                    "glslang/MachineIndependent/propagateNoContraction.cpp",
+                    "glslang/MachineIndependent/propagateNoContraction.h",
+                    "glslang/MachineIndependent/reflection.cpp",
+                    "glslang/MachineIndependent/reflection.h",
+                    "glslang/OSDependent/osinclude.h",
+                    "glslang/Public/ShaderLang.h",
+                    "hlsl/hlslAttributes.cpp",
+                    "hlsl/hlslAttributes.h",
+                    "hlsl/hlslGrammar.cpp",
+                    "hlsl/hlslGrammar.h",
+                    "hlsl/hlslOpMap.cpp",
+                    "hlsl/hlslOpMap.h",
+                    "hlsl/hlslParseHelper.cpp",
+                    "hlsl/hlslParseHelper.h",
+                    "hlsl/hlslParseables.cpp",
+                    "hlsl/hlslParseables.h",
+                    "hlsl/hlslScanContext.cpp",
+                    "hlsl/hlslScanContext.h",
+                    "hlsl/hlslTokenStream.cpp",
+                    "hlsl/hlslTokenStream.h",
+                    "hlsl/hlslTokens.h",
+                  ],
+                  ".",
+                  "$glslang_root")
+
+  defines = [ "ENABLE_OPT=1" ]
+
+  if (is_win) {
+    sources += [ "${glslang_root}/glslang/OSDependent/Windows/ossource.cpp" ]
+    defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
+  } else {
+    sources += [ "${glslang_root}/glslang/OSDependent/Unix/ossource.cpp" ]
+    defines += [ "GLSLANG_OSINCLUDE_UNIX" ]
+  }
+
+  deps = [
+    "${spirv_tools_dir}:spvtools_val",
+  ]
+}
diff --git a/third_party/shaderc/BUILD.gn b/third_party/shaderc/BUILD.gn
new file mode 100644
index 0000000..fb755c6
--- /dev/null
+++ b/third_party/shaderc/BUILD.gn
@@ -0,0 +1,176 @@
+# Copyright 2020 Google LLC.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+shaderc_root = "../externals/shaderc"
+spirv_tools_root = "../externals/spirv-tools"
+
+import("//build_overrides/build.gni")
+import("//build_overrides/shaderc.gni")
+import("${shaderc_root}/shaderc_features.gni")
+import("../third_party.gni")
+
+glslang_dir = shaderc_glslang_dir
+spirv_tools_dir = shaderc_spirv_tools_dir
+spirv_cross_dir = shaderc_spirv_cross_dir
+spirv_headers_dir = shaderc_spirv_headers_dir
+use_direct_logging = shaderc_spvc_enable_direct_logging
+use_context_logging = !shaderc_spvc_disable_context_logging
+
+is_msvc = is_win && !is_clang
+
+config("shaderc_util_public") {
+  include_dirs = [ "${shaderc_root}/libshaderc_util/include" ]
+}
+
+source_set("shaderc_util_sources") {
+  sources = rebase_path(
+          [
+            "libshaderc_util/include/libshaderc_util/counting_includer.h",
+            "libshaderc_util/include/libshaderc_util/exceptions.h",
+            "libshaderc_util/include/libshaderc_util/file_finder.h",
+            "libshaderc_util/include/libshaderc_util/format.h",
+            "libshaderc_util/include/libshaderc_util/io.h",
+            "libshaderc_util/include/libshaderc_util/message.h",
+            "libshaderc_util/include/libshaderc_util/mutex.h",
+            "libshaderc_util/include/libshaderc_util/resources.h",
+            "libshaderc_util/include/libshaderc_util/spirv_tools_wrapper.h",
+            "libshaderc_util/include/libshaderc_util/string_piece.h",
+            "libshaderc_util/include/libshaderc_util/universal_unistd.h",
+            "libshaderc_util/include/libshaderc_util/version_profile.h",
+            "libshaderc_util/src/compiler.cc",
+            "libshaderc_util/src/file_finder.cc",
+            "libshaderc_util/src/io.cc",
+            "libshaderc_util/src/message.cc",
+            "libshaderc_util/src/resources.cc",
+            "libshaderc_util/src/shader_stage.cc",
+            "libshaderc_util/src/spirv_tools_wrapper.cc",
+            "libshaderc_util/src/version_profile.cc",
+          ],
+          ".",
+          "$shaderc_root")
+
+  # Configure Glslang's interface to include HLSL-related entry points.
+  defines = [ "ENABLE_HLSL=1" ]
+
+  public_configs = [ ":shaderc_util_public" ]
+
+  deps = [
+    "${glslang_dir}:glslang_sources",
+    "${spirv_tools_dir}:spvtools",
+  ]
+}
+
+config("shaderc_public") {
+  include_dirs = [ "${shaderc_root}/libshaderc/include" ]
+  if (is_component_build) {
+    defines = [ "SHADERC_SHAREDLIB" ]
+  }
+}
+
+third_party("libshaderc") {
+  public_include_dirs = []
+  configs += [
+    ":shaderc_public",
+    ":shaderc_util_public",
+  ]
+
+  defines = [ "SHADERC_IMPLEMENTATION" ]
+
+  sources = rebase_path([
+                          "libshaderc/include/shaderc/env.h",
+                          "libshaderc/include/shaderc/shaderc.h",
+                          "libshaderc/include/shaderc/shaderc.hpp",
+                          "libshaderc/include/shaderc/status.h",
+                          "libshaderc/include/shaderc/visibility.h",
+                          "libshaderc/src/shaderc.cc",
+                          "libshaderc/src/shaderc_private.h",
+                        ],
+                        ".",
+                        "$shaderc_root")
+
+  deps = [
+    ":shaderc_util_sources",
+    "${glslang_dir}:glslang_sources",
+    "${spirv_tools_dir}:spvtools",
+    "${spirv_tools_dir}:spvtools_val",
+  ]
+}
+
+config("spirv_cross_internal") {
+  if (!is_msvc) {
+    cflags_cc = [
+      "-Wno-implicit-fallthrough",
+      "-Wno-return-type",
+      "-Wno-sign-compare",
+    ]
+  } else {
+    # Disable "not all control paths return a value" warning.
+    cflags_cc = [ "/wd4715" ]
+  }
+}
+
+config("shaderc_spvc_public") {
+  include_dirs = [
+    "${shaderc_root}/libshaderc/include",
+    "${shaderc_root}/libshaderc_spvc/include",
+    "${spirv_headers_dir}/include",
+
+    # Accessing a private spirv-tools headers.
+    "${spirv_tools_root}",
+  ]
+
+  include_dirs += [ "${target_gen_dir}/../spirv-tools" ]
+
+  if (is_component_build) {
+    defines = [ "SHADERC_SHAREDLIB" ]
+  }
+}
+
+source_set("libshaderc_spvc_sources") {
+  public_configs = [ ":shaderc_spvc_public" ]
+
+  defines = [
+    "SHADERC_IMPLEMENTATION",
+    "SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS",
+  ]
+
+  if (use_direct_logging) {
+    defines += [ "SHADERC_SPVC_ENABLE_DIRECT_LOGGING" ]
+  }
+
+  if (!use_context_logging) {
+    defines += [ "SHADERC_SPVC_DISABLE_CONTEXT_LOGGING" ]
+  }
+
+  sources = rebase_path([
+                          "libshaderc/include/shaderc/env.h",
+                          "libshaderc/include/shaderc/status.h",
+                          "libshaderc/include/shaderc/visibility.h",
+                          "libshaderc_spvc/include/spvc/spvc.h",
+                          "libshaderc_spvc/include/spvc/spvc.hpp",
+                          "libshaderc_spvc/src/spvc.cc",
+                          "libshaderc_spvc/src/spvc_log.cc",
+                          "libshaderc_spvc/src/spvc_log.h",
+                          "libshaderc_spvc/src/spvc_private.cc",
+                          "libshaderc_spvc/src/spvc_private.h",
+                          "libshaderc_spvc/src/spvcir_pass.cc",
+                          "libshaderc_spvc/src/spvcir_pass.h",
+                        ],
+                        ".",
+                        "$shaderc_root")
+
+  public_deps = [
+    "${spirv_cross_dir}:spirv_cross",
+  ]
+
+  deps = [
+    "${spirv_tools_dir}:spvtools",
+    "${spirv_tools_dir}:spvtools_core_enums_unified1",
+    "${spirv_tools_dir}:spvtools_opt",
+    "${spirv_tools_dir}:spvtools_val",
+  ]
+
+  configs += []
+}
diff --git a/third_party/spirv-cross/BUILD.gn b/third_party/spirv-cross/BUILD.gn
index 4e78518..a08d27d 100644
--- a/third_party/spirv-cross/BUILD.gn
+++ b/third_party/spirv-cross/BUILD.gn
@@ -29,6 +29,8 @@
                           "spirv_msl.hpp",
                           "spirv_parser.cpp",
                           "spirv_parser.hpp",
+                          "spirv_reflect.cpp",
+                          "spirv_reflect.hpp",
                         ],
                         ".",
                         "${spirv_cross}")
diff --git a/third_party/spirv-tools/BUILD.gn b/third_party/spirv-tools/BUILD.gn
index 0bdb8dd..89e0650 100644
--- a/third_party/spirv-tools/BUILD.gn
+++ b/third_party/spirv-tools/BUILD.gn
@@ -14,10 +14,15 @@
         "${spirv_headers}/include/spirv/$version/spirv.core.grammar.json"
     core_insts_file = "${target_gen_dir}/core.insts-$version.inc"
     operand_kinds_file = "${target_gen_dir}/operand.kinds-$version.inc"
-    extinst_file = "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+    debuginfo_insts_file =
+        "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+    cldebuginfo100_insts_file =
+        "${spirv_tools}/source/extinst.opencl.debuginfo.100.grammar.json"
 
     sources = [
+      cldebuginfo100_insts_file,
       core_json_file,
+      debuginfo_insts_file,
     ]
     outputs = [
       core_insts_file,
@@ -29,7 +34,9 @@
       "--core-insts-output",
       rebase_path(core_insts_file, root_build_dir),
       "--extinst-debuginfo-grammar",
-      rebase_path(extinst_file, root_build_dir),
+      rebase_path(debuginfo_insts_file, root_build_dir),
+      "--extinst-cldebuginfo100-grammar",
+      rebase_path(cldebuginfo100_insts_file, root_build_dir),
       "--operand-kinds-output",
       rebase_path(operand_kinds_file, root_build_dir),
     ]
@@ -46,7 +53,11 @@
 
     core_json_file =
         "${spirv_headers}/include/spirv/$version/spirv.core.grammar.json"
-    debug_insts_file = "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+    debuginfo_insts_file =
+        "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+    cldebuginfo100_insts_file =
+        "${spirv_tools}/source/extinst.opencl.debuginfo.100.grammar.json"
+
     extension_enum_file = "${target_gen_dir}/extension_enum.inc"
     extension_map_file = "${target_gen_dir}/enum_string_mapping.inc"
 
@@ -54,7 +65,9 @@
       "--spirv-core-grammar",
       rebase_path(core_json_file, root_build_dir),
       "--extinst-debuginfo-grammar",
-      rebase_path(debug_insts_file, root_build_dir),
+      rebase_path(debuginfo_insts_file, root_build_dir),
+      "--extinst-cldebuginfo100-grammar",
+      rebase_path(cldebuginfo100_insts_file, root_build_dir),
       "--extension-enum-output",
       rebase_path(extension_enum_file, root_build_dir),
       "--enum-string-mapping-output",
@@ -62,6 +75,8 @@
     ]
     inputs = [
       core_json_file,
+      debuginfo_insts_file,
+      cldebuginfo100_insts_file,
     ]
     outputs = [
       extension_enum_file,
@@ -81,22 +96,30 @@
     core_json_file =
         "${spirv_headers}/include/spirv/$version/spirv.core.grammar.json"
     glsl_json_file = "${spirv_headers}/include/spirv/${version}/extinst.glsl.std.450.grammar.json"
+    debuginfo_insts_file =
+        "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+    cldebuginfo100_insts_file =
+        "${spirv_tools}/source/extinst.opencl.debuginfo.100.grammar.json"
+
     glsl_insts_file = "${target_gen_dir}/glsl.std.450.insts.inc"
-    debug_insts_file = "${spirv_tools}/source/extinst.debuginfo.grammar.json"
 
     args = [
       "--spirv-core-grammar",
       rebase_path(core_json_file, root_build_dir),
+      "--extinst-debuginfo-grammar",
+      rebase_path(debuginfo_insts_file, root_build_dir),
+      "--extinst-cldebuginfo100-grammar",
+      rebase_path(cldebuginfo100_insts_file, root_build_dir),
       "--extinst-glsl-grammar",
       rebase_path(glsl_json_file, root_build_dir),
       "--glsl-insts-output",
       rebase_path(glsl_insts_file, root_build_dir),
-      "--extinst-debuginfo-grammar",
-      rebase_path(debug_insts_file, root_build_dir),
     ]
     inputs = [
       core_json_file,
       glsl_json_file,
+      debuginfo_insts_file,
+      cldebuginfo100_insts_file,
     ]
     outputs = [
       glsl_insts_file,
@@ -114,23 +137,31 @@
 
     core_json_file =
         "${spirv_headers}/include/spirv/$version/spirv.core.grammar.json"
-    opengl_json_file = "${spirv_headers}/include/spirv/${version}/extinst.opencl.std.100.grammar.json"
+    opencl_json_file = "${spirv_headers}/include/spirv/${version}/extinst.opencl.std.100.grammar.json"
+    debuginfo_insts_file =
+        "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+    cldebuginfo100_insts_file =
+        "${spirv_tools}/source/extinst.opencl.debuginfo.100.grammar.json"
+
     opencl_insts_file = "${target_gen_dir}/opencl.std.insts.inc"
-    debug_insts_file = "${spirv_tools}/source/extinst.debuginfo.grammar.json"
 
     args = [
       "--spirv-core-grammar",
       rebase_path(core_json_file, root_build_dir),
+      "--extinst-debuginfo-grammar",
+      rebase_path(debuginfo_insts_file, root_build_dir),
+      "--extinst-cldebuginfo100-grammar",
+      rebase_path(cldebuginfo100_insts_file, root_build_dir),
       "--extinst-opencl-grammar",
-      rebase_path(opengl_json_file, root_build_dir),
+      rebase_path(opencl_json_file, root_build_dir),
       "--opencl-insts-output",
       rebase_path(opencl_insts_file, root_build_dir),
-      "--extinst-debuginfo-grammar",
-      rebase_path(debug_insts_file, root_build_dir),
     ]
     inputs = [
       core_json_file,
-      opengl_json_file,
+      opencl_json_file,
+      debuginfo_insts_file,
+      cldebuginfo100_insts_file,
     ]
     outputs = [
       opencl_insts_file,
@@ -145,22 +176,19 @@
     script = "${spirv_tools}/utils/generate_language_headers.py"
 
     name = invoker.name
-    extinst_output_base = "${target_gen_dir}/${name}"
-    debug_insts_file = "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+    extinst_output_path = "${target_gen_dir}/${name}.h"
 
     args = [
-      "--extinst-name",
-      "${name}",
       "--extinst-grammar",
-      rebase_path(debug_insts_file, root_build_dir),
-      "--extinst-output-base",
-      rebase_path(extinst_output_base, root_build_dir),
+      rebase_path(invoker.grammar_file, root_build_dir),
+      "--extinst-output-path",
+      rebase_path(extinst_output_path, root_build_dir),
     ]
     inputs = [
-      debug_insts_file,
+      invoker.grammar_file,
     ]
     outputs = [
-      "${extinst_output_base}.h",
+      "${extinst_output_path}",
     ]
   }
 }
@@ -181,6 +209,8 @@
       rebase_path(extinst_vendor_grammar, root_build_dir),
       "--vendor-insts-output",
       rebase_path(extinst_file, root_build_dir),
+      "--vendor-operand-kind-prefix",
+      invoker.operand_kind_prefix,
     ]
     inputs = [
       extinst_vendor_grammar,
@@ -239,21 +269,47 @@
 spvtools_opencl_tables("opencl1-0") {
   version = "1.0"
 }
-spvtools_language_header("unified1") {
+spvtools_language_header("debuginfo") {
   name = "DebugInfo"
+  grammar_file = "${spirv_tools}/source/extinst.debuginfo.grammar.json"
+}
+spvtools_language_header("cldebuginfo100") {
+  name = "OpenCLDebugInfo100"
+  grammar_file =
+      "${spirv_tools}/source/extinst.opencl.debuginfo.100.grammar.json"
 }
 
 spvtools_vendor_tables = [
-  "spv-amd-shader-explicit-vertex-parameter",
-  "spv-amd-shader-trinary-minmax",
-  "spv-amd-gcn-shader",
-  "spv-amd-shader-ballot",
-  "debuginfo",
+  [
+    "spv-amd-shader-explicit-vertex-parameter",
+    "...nil...",
+  ],
+  [
+    "spv-amd-shader-trinary-minmax",
+    "...nil...",
+  ],
+  [
+    "spv-amd-gcn-shader",
+    "...nil...",
+  ],
+  [
+    "spv-amd-shader-ballot",
+    "...nil...",
+  ],
+  [
+    "debuginfo",
+    "...nil...",
+  ],
+  [
+    "opencl.debuginfo.100",
+    "CLDEBUG100_",
+  ],
 ]
 
-foreach(table, spvtools_vendor_tables) {
-  spvtools_vendor_table(table) {
-    name = table
+foreach(table_def, spvtools_vendor_tables) {
+  spvtools_vendor_table(table_def[0]) {
+    name = table_def[0]
+    operand_kind_prefix = table_def[1]
   }
 }
 
@@ -273,6 +329,7 @@
   if (is_clang) {
     cflags = [
       "-Wno-implicit-fallthrough",
+      "-Wno-newline-eof",
       "-Wno-extra-semi",
       "-Wno-range-loop-analysis",
       "-Wno-conditional-uninitialized",
@@ -282,6 +339,7 @@
 
 source_set("spvtools_headers") {
   sources = rebase_path([
+                          "include/spirv-tools/instrument.h",
                           "include/spirv-tools/libspirv.h",
                           "include/spirv-tools/libspirv.hpp",
                           "include/spirv-tools/linker.hpp",
@@ -300,11 +358,13 @@
     ":spvtools_core_tables_unified1",
     ":spvtools_generators_inc",
     ":spvtools_glsl_tables_glsl1-0",
-    ":spvtools_language_header_unified1",
+    ":spvtools_language_header_cldebuginfo100",
+    ":spvtools_language_header_debuginfo",
     ":spvtools_opencl_tables_opencl1-0",
   ]
-  foreach(target_name, spvtools_vendor_tables) {
-    deps += [ ":spvtools_vendor_tables_$target_name" ]
+  foreach(table_def, spvtools_vendor_tables) {
+    name = table_def[0]
+    deps += [ ":spvtools_vendor_tables_$name" ]
   }
 
   sources = rebase_path([
@@ -312,17 +372,23 @@
                           "source/assembly_grammar.h",
                           "source/binary.cpp",
                           "source/binary.h",
+                          "source/cfa.h",
                           "source/diagnostic.cpp",
                           "source/diagnostic.h",
                           "source/disassemble.cpp",
+                          "source/disassemble.h",
                           "source/enum_set.h",
                           "source/enum_string_mapping.cpp",
+                          "source/enum_string_mapping.h",
                           "source/ext_inst.cpp",
                           "source/ext_inst.h",
                           "source/extensions.cpp",
                           "source/extensions.h",
                           "source/instruction.h",
                           "source/libspirv.cpp",
+                          "source/latest_version_glsl_std_450_header.h",
+                          "source/latest_version_opencl_std_header.h",
+                          "source/latest_version_spirv_header.h",
                           "source/macro.h",
                           "source/name_mapper.cpp",
                           "source/name_mapper.h",
@@ -338,6 +404,8 @@
                           "source/spirv_definition.h",
                           "source/spirv_endian.cpp",
                           "source/spirv_endian.h",
+                          "source/spirv_optimizer_options.cpp",
+                          "source/spirv_optimizer_options.h",
                           "source/spirv_target_env.cpp",
                           "source/spirv_target_env.h",
                           "source/spirv_validator_options.cpp",
@@ -368,6 +436,7 @@
 
   public_deps = [
     ":spvtools_headers",
+    "${spirv_headers}:spv_headers",
   ]
 
   configs += [ ":spvtools_internal_config" ]
@@ -377,8 +446,12 @@
   public_include_dirs = []
   sources = rebase_path([
                           "source/val/basic_block.cpp",
+                          "source/val/basic_block.h",
                           "source/val/construct.cpp",
+                          "source/val/construct.h",
+                          "source/val/decoration.h",
                           "source/val/function.cpp",
+                          "source/val/function.h",
                           "source/val/instruction.cpp",
                           "source/val/validate.cpp",
                           "source/val/validate.h",
@@ -394,7 +467,6 @@
                           "source/val/validate_composites.cpp",
                           "source/val/validate_constants.cpp",
                           "source/val/validate_conversion.cpp",
-                          "source/val/validate_datarules.cpp",
                           "source/val/validate_debug.cpp",
                           "source/val/validate_decorations.cpp",
                           "source/val/validate_derivatives.cpp",
@@ -410,19 +482,257 @@
                           "source/val/validate_logicals.cpp",
                           "source/val/validate_memory.cpp",
                           "source/val/validate_memory_semantics.cpp",
+                          "source/val/validate_memory_semantics.h",
                           "source/val/validate_misc.cpp",
                           "source/val/validate_mode_setting.cpp",
                           "source/val/validate_non_uniform.cpp",
                           "source/val/validate_primitives.cpp",
                           "source/val/validate_scopes.cpp",
+                          "source/val/validate_scopes.h",
+                          "source/val/validate_small_type_uses.cpp",
                           "source/val/validate_type.cpp",
                           "source/val/validation_state.cpp",
+                          "source/val/validation_state.h",
                         ],
                         ".",
                         spirv_tools)
 
   deps = [
     ":spvtools",
+    ":spvtools_language_header_cldebuginfo100",
+    ":spvtools_language_header_debuginfo",
+  ]
+  public_deps = [
+    ":spvtools_headers",
+  ]
+
+  configs += [ ":spvtools_internal_config" ]
+}
+
+third_party("spvtools_opt") {
+  public_include_dirs = []
+  sources =
+      rebase_path([
+                    "source/opt/aggressive_dead_code_elim_pass.cpp",
+                    "source/opt/aggressive_dead_code_elim_pass.h",
+                    "source/opt/amd_ext_to_khr.cpp",
+                    "source/opt/amd_ext_to_khr.h",
+                    "source/opt/basic_block.cpp",
+                    "source/opt/basic_block.h",
+                    "source/opt/block_merge_pass.cpp",
+                    "source/opt/block_merge_pass.h",
+                    "source/opt/block_merge_util.cpp",
+                    "source/opt/block_merge_util.h",
+                    "source/opt/build_module.cpp",
+                    "source/opt/build_module.h",
+                    "source/opt/ccp_pass.cpp",
+                    "source/opt/ccp_pass.h",
+                    "source/opt/cfg.cpp",
+                    "source/opt/cfg.h",
+                    "source/opt/cfg_cleanup_pass.cpp",
+                    "source/opt/cfg_cleanup_pass.h",
+                    "source/opt/code_sink.cpp",
+                    "source/opt/code_sink.h",
+                    "source/opt/combine_access_chains.cpp",
+                    "source/opt/combine_access_chains.h",
+                    "source/opt/compact_ids_pass.cpp",
+                    "source/opt/compact_ids_pass.h",
+                    "source/opt/composite.cpp",
+                    "source/opt/composite.h",
+                    "source/opt/const_folding_rules.cpp",
+                    "source/opt/const_folding_rules.h",
+                    "source/opt/constants.cpp",
+                    "source/opt/constants.h",
+                    "source/opt/convert_to_half_pass.cpp",
+                    "source/opt/convert_to_half_pass.h",
+                    "source/opt/copy_prop_arrays.cpp",
+                    "source/opt/copy_prop_arrays.h",
+                    "source/opt/dead_branch_elim_pass.cpp",
+                    "source/opt/dead_branch_elim_pass.h",
+                    "source/opt/dead_insert_elim_pass.cpp",
+                    "source/opt/dead_insert_elim_pass.h",
+                    "source/opt/dead_variable_elimination.cpp",
+                    "source/opt/dead_variable_elimination.h",
+                    "source/opt/decompose_initialized_variables_pass.cpp",
+                    "source/opt/decompose_initialized_variables_pass.h",
+                    "source/opt/decoration_manager.cpp",
+                    "source/opt/decoration_manager.h",
+                    "source/opt/def_use_manager.cpp",
+                    "source/opt/def_use_manager.h",
+                    "source/opt/desc_sroa.cpp",
+                    "source/opt/desc_sroa.h",
+                    "source/opt/dominator_analysis.cpp",
+                    "source/opt/dominator_analysis.h",
+                    "source/opt/dominator_tree.cpp",
+                    "source/opt/dominator_tree.h",
+                    "source/opt/eliminate_dead_constant_pass.cpp",
+                    "source/opt/eliminate_dead_constant_pass.h",
+                    "source/opt/eliminate_dead_functions_pass.cpp",
+                    "source/opt/eliminate_dead_functions_pass.h",
+                    "source/opt/eliminate_dead_functions_util.cpp",
+                    "source/opt/eliminate_dead_functions_util.h",
+                    "source/opt/eliminate_dead_members_pass.cpp",
+                    "source/opt/eliminate_dead_members_pass.h",
+                    "source/opt/feature_manager.cpp",
+                    "source/opt/feature_manager.h",
+                    "source/opt/fix_storage_class.cpp",
+                    "source/opt/fix_storage_class.h",
+                    "source/opt/flatten_decoration_pass.cpp",
+                    "source/opt/flatten_decoration_pass.h",
+                    "source/opt/fold.cpp",
+                    "source/opt/fold.h",
+                    "source/opt/fold_spec_constant_op_and_composite_pass.cpp",
+                    "source/opt/fold_spec_constant_op_and_composite_pass.h",
+                    "source/opt/folding_rules.cpp",
+                    "source/opt/folding_rules.h",
+                    "source/opt/freeze_spec_constant_value_pass.cpp",
+                    "source/opt/freeze_spec_constant_value_pass.h",
+                    "source/opt/function.cpp",
+                    "source/opt/function.h",
+                    "source/opt/generate_webgpu_initializers_pass.cpp",
+                    "source/opt/generate_webgpu_initializers_pass.h",
+                    "source/opt/graphics_robust_access_pass.cpp",
+                    "source/opt/graphics_robust_access_pass.h",
+                    "source/opt/if_conversion.cpp",
+                    "source/opt/if_conversion.h",
+                    "source/opt/inline_exhaustive_pass.cpp",
+                    "source/opt/inline_exhaustive_pass.h",
+                    "source/opt/inline_opaque_pass.cpp",
+                    "source/opt/inline_opaque_pass.h",
+                    "source/opt/inline_pass.cpp",
+                    "source/opt/inline_pass.h",
+                    "source/opt/inst_bindless_check_pass.cpp",
+                    "source/opt/inst_bindless_check_pass.h",
+                    "source/opt/inst_buff_addr_check_pass.cpp",
+                    "source/opt/inst_buff_addr_check_pass.h",
+                    "source/opt/inst_debug_printf_pass.cpp",
+                    "source/opt/inst_debug_printf_pass.h",
+                    "source/opt/instruction.cpp",
+                    "source/opt/instruction.h",
+                    "source/opt/instruction_list.cpp",
+                    "source/opt/instruction_list.h",
+                    "source/opt/instrument_pass.cpp",
+                    "source/opt/instrument_pass.h",
+                    "source/opt/ir_builder.h",
+                    "source/opt/ir_context.cpp",
+                    "source/opt/ir_context.h",
+                    "source/opt/ir_loader.cpp",
+                    "source/opt/ir_loader.h",
+                    "source/opt/iterator.h",
+                    "source/opt/legalize_vector_shuffle_pass.cpp",
+                    "source/opt/legalize_vector_shuffle_pass.h",
+                    "source/opt/licm_pass.cpp",
+                    "source/opt/licm_pass.h",
+                    "source/opt/local_access_chain_convert_pass.cpp",
+                    "source/opt/local_access_chain_convert_pass.h",
+                    "source/opt/local_redundancy_elimination.cpp",
+                    "source/opt/local_redundancy_elimination.h",
+                    "source/opt/local_single_block_elim_pass.cpp",
+                    "source/opt/local_single_block_elim_pass.h",
+                    "source/opt/local_single_store_elim_pass.cpp",
+                    "source/opt/local_single_store_elim_pass.h",
+                    "source/opt/log.h",
+                    "source/opt/loop_dependence.cpp",
+                    "source/opt/loop_dependence.h",
+                    "source/opt/loop_dependence_helpers.cpp",
+                    "source/opt/loop_descriptor.cpp",
+                    "source/opt/loop_descriptor.h",
+                    "source/opt/loop_fission.cpp",
+                    "source/opt/loop_fission.h",
+                    "source/opt/loop_fusion.cpp",
+                    "source/opt/loop_fusion.h",
+                    "source/opt/loop_fusion_pass.cpp",
+                    "source/opt/loop_fusion_pass.h",
+                    "source/opt/loop_peeling.cpp",
+                    "source/opt/loop_peeling.h",
+                    "source/opt/loop_unroller.cpp",
+                    "source/opt/loop_unroller.h",
+                    "source/opt/loop_unswitch_pass.cpp",
+                    "source/opt/loop_unswitch_pass.h",
+                    "source/opt/loop_utils.cpp",
+                    "source/opt/loop_utils.h",
+                    "source/opt/mem_pass.cpp",
+                    "source/opt/mem_pass.h",
+                    "source/opt/merge_return_pass.cpp",
+                    "source/opt/merge_return_pass.h",
+                    "source/opt/module.cpp",
+                    "source/opt/module.h",
+                    "source/opt/null_pass.h",
+                    "source/opt/optimizer.cpp",
+                    "source/opt/pass.cpp",
+                    "source/opt/pass.h",
+                    "source/opt/pass_manager.cpp",
+                    "source/opt/pass_manager.h",
+                    "source/opt/passes.h",
+                    "source/opt/private_to_local_pass.cpp",
+                    "source/opt/private_to_local_pass.h",
+                    "source/opt/process_lines_pass.cpp",
+                    "source/opt/process_lines_pass.h",
+                    "source/opt/propagator.cpp",
+                    "source/opt/propagator.h",
+                    "source/opt/reduce_load_size.cpp",
+                    "source/opt/reduce_load_size.h",
+                    "source/opt/redundancy_elimination.cpp",
+                    "source/opt/redundancy_elimination.h",
+                    "source/opt/reflect.h",
+                    "source/opt/register_pressure.cpp",
+                    "source/opt/register_pressure.h",
+                    "source/opt/relax_float_ops_pass.cpp",
+                    "source/opt/relax_float_ops_pass.h",
+                    "source/opt/remove_duplicates_pass.cpp",
+                    "source/opt/remove_duplicates_pass.h",
+                    "source/opt/replace_invalid_opc.cpp",
+                    "source/opt/replace_invalid_opc.h",
+                    "source/opt/scalar_analysis.cpp",
+                    "source/opt/scalar_analysis.h",
+                    "source/opt/scalar_analysis_nodes.h",
+                    "source/opt/scalar_analysis_simplification.cpp",
+                    "source/opt/scalar_replacement_pass.cpp",
+                    "source/opt/scalar_replacement_pass.h",
+                    "source/opt/set_spec_constant_default_value_pass.cpp",
+                    "source/opt/set_spec_constant_default_value_pass.h",
+                    "source/opt/simplification_pass.cpp",
+                    "source/opt/simplification_pass.h",
+                    "source/opt/split_invalid_unreachable_pass.cpp",
+                    "source/opt/split_invalid_unreachable_pass.h",
+                    "source/opt/ssa_rewrite_pass.cpp",
+                    "source/opt/ssa_rewrite_pass.h",
+                    "source/opt/strength_reduction_pass.cpp",
+                    "source/opt/strength_reduction_pass.h",
+                    "source/opt/strip_atomic_counter_memory_pass.cpp",
+                    "source/opt/strip_atomic_counter_memory_pass.h",
+                    "source/opt/strip_debug_info_pass.cpp",
+                    "source/opt/strip_debug_info_pass.h",
+                    "source/opt/strip_reflect_info_pass.cpp",
+                    "source/opt/strip_reflect_info_pass.h",
+                    "source/opt/struct_cfg_analysis.cpp",
+                    "source/opt/struct_cfg_analysis.h",
+                    "source/opt/tree_iterator.h",
+                    "source/opt/type_manager.cpp",
+                    "source/opt/type_manager.h",
+                    "source/opt/types.cpp",
+                    "source/opt/types.h",
+                    "source/opt/unify_const_pass.cpp",
+                    "source/opt/unify_const_pass.h",
+                    "source/opt/upgrade_memory_model.cpp",
+                    "source/opt/upgrade_memory_model.h",
+                    "source/opt/value_number_table.cpp",
+                    "source/opt/value_number_table.h",
+                    "source/opt/vector_dce.cpp",
+                    "source/opt/vector_dce.h",
+                    "source/opt/workaround1209.cpp",
+                    "source/opt/workaround1209.h",
+                    "source/opt/wrap_opkill.cpp",
+                    "source/opt/wrap_opkill.h",
+                  ],
+                  ".",
+                  spirv_tools)
+
+  deps = [
+    ":spvtools",
+    ":spvtools_language_header_cldebuginfo100",
+    ":spvtools_language_header_debuginfo",
+    ":spvtools_vendor_tables_spv-amd-shader-ballot",
   ]
   public_deps = [
     ":spvtools_headers",
diff --git a/tools/sk_app/DawnWindowContext.cpp b/tools/sk_app/DawnWindowContext.cpp
index 1001fc0..47fe43d 100644
--- a/tools/sk_app/DawnWindowContext.cpp
+++ b/tools/sk_app/DawnWindowContext.cpp
@@ -42,7 +42,7 @@
     fSwapChainImplementation = this->createSwapChainImplementation(-1, -1, fDisplayParams);
     wgpu::SwapChainDescriptor swapChainDesc;
     swapChainDesc.implementation = reinterpret_cast<int64_t>(&fSwapChainImplementation);
-    fSwapChain = fDevice.CreateSwapChain(&swapChainDesc);
+    fSwapChain = fDevice.CreateSwapChain(nullptr, &swapChainDesc);
     if (!fSwapChain) {
         fContext.reset();
         return;
@@ -92,7 +92,7 @@
     fSwapChainImplementation = this->createSwapChainImplementation(w, h, fDisplayParams);
     wgpu::SwapChainDescriptor swapChainDesc;
     swapChainDesc.implementation = reinterpret_cast<int64_t>(&fSwapChainImplementation);
-    fSwapChain = fDevice.CreateSwapChain(&swapChainDesc);
+    fSwapChain = fDevice.CreateSwapChain(nullptr, &swapChainDesc);
     if (!fSwapChain) {
         fContext.reset();
         return;