diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index 763977c..be1a48d 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -338,18 +338,12 @@
 
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
         // TODO(crbug.com/tint/369): Use a mat2x2 when Tint translates it correctly.
-        // TODO(crbug.com/tint/386): Use the same struct.
-        [[block]] struct VertexUniformBuffer1 {
+        [[block]] struct VertexUniformBuffer {
             transform : vec4<f32>;
         };
 
-        [[block]] struct VertexUniformBuffer2 {
-            transform : vec4<f32>;
-        };
-
-        // TODO(crbug.com/tint/386): Use the same struct definition.
-        [[group(0), binding(0)]] var <uniform> vertexUbo1 : VertexUniformBuffer1;
-        [[group(1), binding(0)]] var <uniform> vertexUbo2 : VertexUniformBuffer2;
+        [[group(0), binding(0)]] var <uniform> vertexUbo1 : VertexUniformBuffer;
+        [[group(1), binding(0)]] var <uniform> vertexUbo2 : VertexUniformBuffer;
 
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
@@ -365,18 +359,12 @@
         })");
 
     wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
-        // TODO(crbug.com/tint/386): Use the same struct
-        [[block]] struct FragmentUniformBuffer1 {
+        [[block]] struct FragmentUniformBuffer {
             color : vec4<f32>;
         };
 
-        [[block]] struct FragmentUniformBuffer2 {
-            color : vec4<f32>;
-        };
-
-        // TODO(crbug.com/tint/386): Use the same struct definition.
-        [[group(0), binding(1)]] var <uniform> fragmentUbo1 : FragmentUniformBuffer1;
-        [[group(1), binding(1)]] var <uniform> fragmentUbo2 : FragmentUniformBuffer2;
+        [[group(0), binding(1)]] var <uniform> fragmentUbo1 : FragmentUniformBuffer;
+        [[group(1), binding(1)]] var <uniform> fragmentUbo2 : FragmentUniformBuffer;
 
         [[stage(fragment)]] fn main() -> [[location(0)]] vec4<f32> {
             return fragmentUbo1.color + fragmentUbo2.color;
@@ -770,6 +758,9 @@
 // Regression test for crbug.com/dawn/408 where dynamic offsets were applied in the wrong order.
 // Dynamic offsets should be applied in increasing order of binding number.
 TEST_P(BindGroupTests, DynamicOffsetOrder) {
+    // Does not work with SPIRV-Cross. crbug.com/dawn/975
+    DAWN_SUPPRESS_TEST_IF(IsD3D12() && !HasToggleEnabled("use_tint_generator"));
+
     // We will put the following values and the respective offsets into a buffer.
     // The test will ensure that the correct dynamic offset is applied to each buffer by reading the
     // value from an offset binding.
@@ -819,16 +810,7 @@
 
     wgpu::ComputePipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.compute.module = utils::CreateShaderModule(device, R"(
-        // TODO(crbug.com/tint/386): Use the same struct
-        [[block]] struct Buffer0 {
-            value : u32;
-        };
-
-        [[block]] struct Buffer2 {
-            value : u32;
-        };
-
-        [[block]] struct Buffer3 {
+        [[block]] struct Buffer {
             value : u32;
         };
 
@@ -836,9 +818,9 @@
             value : vec3<u32>;
         };
 
-        [[group(0), binding(2)]] var<uniform> buffer2 : Buffer2;
-        [[group(0), binding(3)]] var<storage, read> buffer3 : Buffer3;
-        [[group(0), binding(0)]] var<storage, read> buffer0 : Buffer0;
+        [[group(0), binding(2)]] var<uniform> buffer2 : Buffer;
+        [[group(0), binding(3)]] var<storage, read> buffer3 : Buffer;
+        [[group(0), binding(0)]] var<storage, read> buffer0 : Buffer;
         [[group(0), binding(4)]] var<storage, read_write> outputBuffer : OutputBuffer;
 
         [[stage(compute), workgroup_size(1)]] fn main() {
@@ -948,23 +930,13 @@
         })");
 
     wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
-        // TODO(crbug.com/tint/386): Use the same struct
-        [[block]] struct Ubo1 {
+        [[block]] struct Ubo {
             color : vec4<f32>;
         };
 
-        [[block]] struct Ubo2 {
-            color : vec4<f32>;
-        };
-
-        [[block]] struct Ubo3 {
-            color : vec4<f32>;
-        };
-
-        // TODO(crbug.com/tint/386): Use the same struct definition.
-        [[group(0), binding(953)]] var <uniform> ubo1 : Ubo1;
-        [[group(0), binding(47)]] var <uniform> ubo2 : Ubo2;
-        [[group(0), binding(111)]] var <uniform> ubo3 : Ubo3;
+        [[group(0), binding(953)]] var <uniform> ubo1 : Ubo;
+        [[group(0), binding(47)]] var <uniform> ubo2 : Ubo;
+        [[group(0), binding(111)]] var <uniform> ubo3 : Ubo;
 
         [[stage(fragment)]] fn main() -> [[location(0)]] vec4<f32> {
             return ubo1.color + 2.0 * ubo2.color + 4.0 * ubo3.color;
diff --git a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
index bdf9093..6b60a0e 100644
--- a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
+++ b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
@@ -88,16 +88,12 @@
 // Test that a trivial compute-shader memcpy implementation works.
 TEST_P(ComputeCopyStorageBufferTests, SizedArrayOfBasic) {
     BasicTest(R"(
-        [[block]] struct Buf1 {
-            s : array<vec4<u32>, 4>;
-        };
-        [[block]] struct Buf2 {
+        [[block]] struct Buf {
             s : array<vec4<u32>, 4>;
         };
 
-        // TODO(crbug.com/tint/386): Use the same struct type
-        [[group(0), binding(0)]] var<storage, read_write> src : Buf1;
-        [[group(0), binding(1)]] var<storage, read_write> dst : Buf2;
+        [[group(0), binding(0)]] var<storage, read_write> src : Buf;
+        [[group(0), binding(1)]] var<storage, read_write> dst : Buf;
 
         [[stage(compute), workgroup_size(1)]]
         fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
@@ -115,16 +111,12 @@
             b : vec2<u32>;
         };
 
-        [[block]] struct Buf1 {
-            s : array<S, 4>;
-        };
-        [[block]] struct Buf2 {
+        [[block]] struct Buf {
             s : array<S, 4>;
         };
 
-        // TODO(crbug.com/tint/386): Use the same struct type
-        [[group(0), binding(0)]] var<storage, read_write> src : Buf1;
-        [[group(0), binding(1)]] var<storage, read_write> dst : Buf2;
+        [[group(0), binding(0)]] var<storage, read_write> src : Buf;
+        [[group(0), binding(1)]] var<storage, read_write> dst : Buf;
 
         [[stage(compute), workgroup_size(1)]]
         fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
@@ -137,16 +129,12 @@
 // Test that a trivial compute-shader memcpy implementation works.
 TEST_P(ComputeCopyStorageBufferTests, UnsizedArrayOfBasic) {
     BasicTest(R"(
-        [[block]] struct Buf1 {
-            s : array<vec4<u32>>;
-        };
-        [[block]] struct Buf2 {
+        [[block]] struct Buf {
             s : array<vec4<u32>>;
         };
 
-        // TODO(crbug.com/tint/386): Use the same struct type
-        [[group(0), binding(0)]] var<storage, read_write> src : Buf1;
-        [[group(0), binding(1)]] var<storage, read_write> dst : Buf2;
+        [[group(0), binding(0)]] var<storage, read_write> src : Buf;
+        [[group(0), binding(1)]] var<storage, read_write> dst : Buf;
 
         [[stage(compute), workgroup_size(1)]]
         fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
diff --git a/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp b/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
index 2cd7aa4..fd7e4ee 100644
--- a/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
+++ b/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
@@ -82,17 +82,12 @@
         device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc);
 
     wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
-        // TODO(crbug.com/tint/386):  Use the same struct.
-        [[block]] struct Src {
+        [[block]] struct Buf {
             data : array<u32, 100>;
         };
 
-        [[block]] struct Dst {
-            data : array<u32, 100>;
-        };
-
-        [[group(0), binding(0)]] var<storage, read_write> src : Src;
-        [[group(0), binding(1)]] var<storage, read_write> dst : Dst;
+        [[group(0), binding(0)]] var<storage, read_write> src : Buf;
+        [[group(0), binding(1)]] var<storage, read_write> dst : Buf;
 
         [[stage(compute), workgroup_size(1)]]
         fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
@@ -153,17 +148,12 @@
         device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc);
 
     wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
-        // TODO(crbug.com/tint/386):  Use the same struct.
-        [[block]] struct Src {
+        [[block]] struct Buf {
             data : array<u32, 100>;
         };
 
-        [[block]] struct Dst {
-            data : array<u32, 100>;
-        };
-
-        [[group(0), binding(0)]] var<storage, read> src : Src;
-        [[group(0), binding(1)]] var<storage, read_write> dst : Dst;
+        [[group(0), binding(0)]] var<storage, read> src : Buf;
+        [[group(0), binding(1)]] var<storage, read_write> dst : Buf;
 
         [[stage(compute), workgroup_size(1)]]
         fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index 5f91cab..ba46d37 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -107,36 +107,19 @@
         std::ostringstream fs;
         std::string multipleNumber = isInheritedPipeline ? "2" : "1";
         fs << R"(
-            // TODO(crbug.com/tint/386):  Use the same struct.
-            [[block]] struct Buffer1 {
+            [[block]] struct Buf {
                 value : vec2<u32>;
             };
 
-            [[block]] struct Buffer2 {
-                value : vec2<u32>;
-            };
-
-            [[block]] struct Buffer3 {
-                value : vec2<u32>;
-            };
-
-            [[block]] struct Buffer4 {
-                value : vec2<u32>;
-            };
-
-            [[group(0), binding(0)]] var<uniform> uBufferNotDynamic : Buffer1;
-            [[group(0), binding(1)]] var<storage, read_write> sBufferNotDynamic : Buffer2;
-            [[group(0), binding(3)]] var<uniform> uBuffer : Buffer3;
-            [[group(0), binding(4)]] var<storage, read_write> sBuffer : Buffer4;
+            [[group(0), binding(0)]] var<uniform> uBufferNotDynamic : Buf;
+            [[group(0), binding(1)]] var<storage, read_write> sBufferNotDynamic : Buf;
+            [[group(0), binding(3)]] var<uniform> uBuffer : Buf;
+            [[group(0), binding(4)]] var<storage, read_write> sBuffer : Buf;
         )";
 
         if (isInheritedPipeline) {
             fs << R"(
-                [[block]] struct Buffer5 {
-                    value : vec2<u32>;
-                };
-
-                [[group(1), binding(0)]] var<uniform> paddingBlock : Buffer5;
+                [[group(1), binding(0)]] var<uniform> paddingBlock : Buf;
             )";
         }
 
@@ -144,7 +127,7 @@
         fs << R"(
             [[stage(fragment)]] fn main() -> [[location(0)]] vec4<f32> {
                 sBufferNotDynamic.value = uBufferNotDynamic.value.xy;
-                sBuffer.value = vec2<u32>(multipleNumber, multipleNumber) * (uBuffer.value.xy + sBufferNotDynamic.value.xy);
+                sBuffer.value = vec2<u32>(multipleNumber, multipleNumber) * (uBuffer.value.xy + uBufferNotDynamic.value.xy);
                 return vec4<f32>(f32(uBuffer.value.x) / 255.0, f32(uBuffer.value.y) / 255.0,
                                       1.0, 1.0);
             }
@@ -174,36 +157,19 @@
         std::ostringstream cs;
         std::string multipleNumber = isInheritedPipeline ? "2" : "1";
         cs << R"(
-            // TODO(crbug.com/tint/386):  Use the same struct.
-            [[block]] struct Buffer1 {
+            [[block]] struct Buf {
                 value : vec2<u32>;
             };
 
-            [[block]] struct Buffer2 {
-                value : vec2<u32>;
-            };
-
-            [[block]] struct Buffer3 {
-                value : vec2<u32>;
-            };
-
-            [[block]] struct Buffer4 {
-                value : vec2<u32>;
-            };
-
-            [[group(0), binding(0)]] var<uniform> uBufferNotDynamic : Buffer1;
-            [[group(0), binding(1)]] var<storage, read_write> sBufferNotDynamic : Buffer2;
-            [[group(0), binding(3)]] var<uniform> uBuffer : Buffer3;
-            [[group(0), binding(4)]] var<storage, read_write> sBuffer : Buffer4;
+            [[group(0), binding(0)]] var<uniform> uBufferNotDynamic : Buf;
+            [[group(0), binding(1)]] var<storage, read_write> sBufferNotDynamic : Buf;
+            [[group(0), binding(3)]] var<uniform> uBuffer : Buf;
+            [[group(0), binding(4)]] var<storage, read_write> sBuffer : Buf;
         )";
 
         if (isInheritedPipeline) {
             cs << R"(
-                [[block]] struct Buffer5 {
-                    value : vec2<u32>;
-                };
-
-                [[group(1), binding(0)]] var<uniform> paddingBlock : Buffer5;
+                [[group(1), binding(0)]] var<uniform> paddingBlock : Buf;
             )";
         }
 
@@ -211,7 +177,7 @@
         cs << R"(
             [[stage(compute), workgroup_size(1)]] fn main() {
                 sBufferNotDynamic.value = uBufferNotDynamic.value.xy;
-                sBuffer.value = vec2<u32>(multipleNumber, multipleNumber) * (uBuffer.value.xy + sBufferNotDynamic.value.xy);
+                sBuffer.value = vec2<u32>(multipleNumber, multipleNumber) * (uBuffer.value.xy + uBufferNotDynamic.value.xy);
             }
         )";
 
@@ -256,7 +222,7 @@
 }
 
 // Have non-zero dynamic offsets.
-TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsRenderPipeline) {
+TEST_P(DynamicBufferOffsetTests, SetDynamicOffsetsRenderPipeline) {
     wgpu::RenderPipeline pipeline = CreateRenderPipeline();
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
@@ -280,6 +246,9 @@
 
 // Dynamic offsets are all zero and no effect to result.
 TEST_P(DynamicBufferOffsetTests, BasicComputePipeline) {
+    // TODO(crbug.com/dawn/978): Failing on Windows Vulkan NVIDIA
+    DAWN_SUPPRESS_TEST_IF(IsWindows() && IsVulkan() && IsNvidia());
+
     wgpu::ComputePipeline pipeline = CreateComputePipeline();
 
     std::array<uint32_t, 2> offsets = {0, 0};
@@ -298,7 +267,10 @@
 }
 
 // Have non-zero dynamic offsets.
-TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsComputePipeline) {
+TEST_P(DynamicBufferOffsetTests, SetDynamicOffsetsComputePipeline) {
+    // TODO(crbug.com/dawn/978): Failing on Windows Vulkan NVIDIA
+    DAWN_SUPPRESS_TEST_IF(IsWindows() && IsVulkan() && IsNvidia());
+
     wgpu::ComputePipeline pipeline = CreateComputePipeline();
 
     std::array<uint32_t, 2> offsets = {kMinUniformBufferOffsetAlignment,
@@ -319,7 +291,7 @@
 }
 
 // Test inherit dynamic offsets on render pipeline
-TEST_P(DynamicBufferOffsetTests, InheritDynamicOffestsRenderPipeline) {
+TEST_P(DynamicBufferOffsetTests, InheritDynamicOffsetsRenderPipeline) {
     // Using default pipeline and setting dynamic offsets
     wgpu::RenderPipeline pipeline = CreateRenderPipeline();
     wgpu::RenderPipeline testPipeline = CreateRenderPipeline(true);
@@ -351,7 +323,7 @@
 // TODO(shaobo.yan@intel.com) : Try this test on GTX1080 and cannot reproduce the failure.
 // Suspect it is due to dawn doesn't handle sync between two dispatch and disable this case.
 // Will double check root cause after got GTX1660.
-TEST_P(DynamicBufferOffsetTests, InheritDynamicOffestsComputePipeline) {
+TEST_P(DynamicBufferOffsetTests, InheritDynamicOffsetsComputePipeline) {
     DAWN_SUPPRESS_TEST_IF(IsWindows());
     wgpu::ComputePipeline pipeline = CreateComputePipeline();
     wgpu::ComputePipeline testPipeline = CreateComputePipeline(true);
@@ -377,7 +349,7 @@
 }
 
 // Setting multiple dynamic offsets for the same bindgroup in one render pass.
-TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffestsMultipleTimesRenderPipeline) {
+TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffsetsMultipleTimesRenderPipeline) {
     // Using default pipeline and setting dynamic offsets
     wgpu::RenderPipeline pipeline = CreateRenderPipeline();
 
diff --git a/src/tests/end2end/GpuMemorySynchronizationTests.cpp b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
index d125857..bafab67 100644
--- a/src/tests/end2end/GpuMemorySynchronizationTests.cpp
+++ b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
@@ -519,15 +519,11 @@
         };
         [[group(0), binding(1)]] var<storage, read_write> ibContents : IBContents;
 
-        // TODO(crbug.com/tint/386): Use the same struct.
-        [[block]] struct ColorContents1 {
+        [[block]] struct ColorContents {
             color : f32;
         };
-        [[block]] struct ColorContents2 {
-            color : f32;
-        };
-        [[group(0), binding(2)]] var<storage, read_write> uniformContents : ColorContents1;
-        [[group(0), binding(3)]] var<storage, read_write> storageContents : ColorContents2;
+        [[group(0), binding(2)]] var<storage, read_write> uniformContents : ColorContents;
+        [[group(0), binding(3)]] var<storage, read_write> storageContents : ColorContents;
 
         [[stage(compute), workgroup_size(1)]] fn main() {
             vbContents.pos[0] = vec4<f32>(-1.0, 1.0, 0.0, 1.0);
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index 2f2ad52..105a754 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -53,20 +53,15 @@
         // Common shader code to use these buffers in shaders, assuming they are in bindgroup index
         // 0.
         mShaderInterface = R"(
-            // TODO(crbug.com/tint/386): Use the same struct.
-            [[block]] struct DataBuffer1 {
-                data : [[stride(4)]] array<f32>;
-            };
-
-            [[block]] struct DataBuffer2 {
+            [[block]] struct DataBuffer {
                 data : [[stride(4)]] array<f32>;
             };
 
             // The length should be 1 because the buffer is 4-byte long.
-            [[group(0), binding(0)]] var<storage, read> buffer1 : DataBuffer1;
+            [[group(0), binding(0)]] var<storage, read> buffer1 : DataBuffer;
 
             // The length should be 64 because the buffer is 256 bytes long.
-            [[group(0), binding(1)]] var<storage, read> buffer2 : DataBuffer2;
+            [[group(0), binding(1)]] var<storage, read> buffer2 : DataBuffer;
 
             // The length should be (512 - 16*4) / 8 = 56 because the buffer is 512 bytes long
             // and the structure is 8 bytes big.
