Enable use_tint_generator w/ test suppressions for SPIR-V based backends

This runs dawn_end2end_tests both with/without use_tint_generator on
Vulkan, OpenGL, and OpenGL ES backends. This is a temporary solution
until we add an dawn_end2end_use_tint_generator_tests suite in the
bot configuration after all backends can support use_tint_generator or
have the appropriate test suppressions.

Bug: dawn:571
Change-Id: I44ab0ba7261160e34dbad512d98602427dc7e966
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/35044
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 4de63a5..e47b054 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -456,6 +456,19 @@
             if (params[i].backendType == adapterProperties.backendType &&
                 adapterProperties.selected) {
                 testParams.push_back(AdapterTestParam(params[i], adapterProperties));
+
+                // HACK: This is a hack to get Tint generator enabled on all tests
+                // without adding a new test suite in Chromium's infra config but skipping
+                // that suite on all unsupported platforms. Once we have basic functionality and
+                // test skips on all backends, we can remove this and use a test suite with
+                // use_tint_generator in the command line args instead.
+                if (params[i].backendType == wgpu::BackendType::Vulkan ||
+                    params[i].backendType == wgpu::BackendType::OpenGL ||
+                    params[i].backendType == wgpu::BackendType::OpenGLES) {
+                    BackendTestConfig configWithTint = params[i];
+                    configWithTint.forceEnabledWorkarounds.push_back("use_tint_generator");
+                    testParams.push_back(AdapterTestParam(configWithTint, adapterProperties));
+                }
             }
         }
     }
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index b2fa09e..692994e 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -157,6 +157,10 @@
 // It contains a transformation matrix for the VS and the fragment color for the FS.
 // These must result in different register offsets in the native APIs.
 TEST_P(BindGroupTests, ReusedUBO) {
+    // TODO(crbug.com/dawn/571): Fix failures using Tint.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                      (IsVulkan() || IsOpenGL() || IsOpenGLES()));
+
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
     wgpu::ShaderModule vsModule =
@@ -229,6 +233,10 @@
 // shader. In D3D12 for example, these different types of bindings end up in different namespaces,
 // but the register offsets used must match between the shader module and descriptor range.
 TEST_P(BindGroupTests, UBOSamplerAndTexture) {
+    // TODO(crbug.com/dawn/571): Fix failures using Tint.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                      (IsVulkan() || IsOpenGL() || IsOpenGLES()));
+
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
     wgpu::ShaderModule vsModule =
@@ -327,6 +335,12 @@
 }
 
 TEST_P(BindGroupTests, MultipleBindLayouts) {
+    // TODO(crbug.com/tint/403):
+    // error: line 74: Expected Result Type to be a scalar type
+    // %44 = OpVectorExtractDynamic %v2float %30 %uint_0_0
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                      (IsVulkan() || IsOpenGL() || IsOpenGLES()));
+
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
     wgpu::ShaderModule vsModule =
@@ -1095,6 +1109,11 @@
 // used correctly. The test loads a different value from each binding, and writes 1 to a storage
 // buffer if all values are correct.
 TEST_P(BindGroupTests, ReallyLargeBindGroup) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     DAWN_SKIP_TEST_IF(IsOpenGLES());
     std::string interface = "#version 450\n";
     std::string body;
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index 6bd82a8..244d83f 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -975,6 +975,9 @@
 // Test that the buffer will be lazy initialized correctly when its first use is to be bound as a
 // uniform buffer.
 TEST_P(BufferZeroInitTest, BoundAsUniformBuffer) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     const char* computeShader = R"(
         #version 450
         layout(set = 0, binding = 0, std140) uniform UBO {
@@ -1011,6 +1014,9 @@
 // Test that the buffer will be lazy initialized correctly when its first use is to be bound as a
 // read-only storage buffer.
 TEST_P(BufferZeroInitTest, BoundAsReadonlyStorageBuffer) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     const char* computeShader = R"(
         #version 450
         layout(set = 0, binding = 0, std140) readonly buffer SSBO {
@@ -1047,6 +1053,9 @@
 // Test that the buffer will be lazy initialized correctly when its first use is to be bound as a
 // storage buffer.
 TEST_P(BufferZeroInitTest, BoundAsStorageBuffer) {
+    // TODO(crbug.com/tint/375): Implement barriers in Tint.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     const char* computeShader = R"(
         #version 450
         layout(set = 0, binding = 0, std140) buffer SSBO {
@@ -1092,6 +1101,9 @@
 
 // Test the buffer will be lazily initialized correctly when its first use is in SetVertexBuffer.
 TEST_P(BufferZeroInitTest, SetVertexBuffer) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Bind the whole buffer as a vertex buffer.
     {
         constexpr uint64_t kVertexBufferOffset = 0u;
@@ -1107,6 +1119,9 @@
 
 // Test the buffer will be lazily initialized correctly when its first use is in SetIndexBuffer.
 TEST_P(BufferZeroInitTest, SetIndexBuffer) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Bind the whole buffer as an index buffer.
     {
         constexpr uint64_t kIndexBufferOffset = 0u;
@@ -1123,6 +1138,9 @@
 // Test the buffer will be lazily initialized correctly when its first use is an indirect buffer for
 // DrawIndirect.
 TEST_P(BufferZeroInitTest, IndirectBufferForDrawIndirect) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Bind the whole buffer as an indirect buffer.
     {
         constexpr uint64_t kOffset = 0u;
@@ -1139,6 +1157,9 @@
 // Test the buffer will be lazily initialized correctly when its first use is an indirect buffer for
 // DrawIndexedIndirect.
 TEST_P(BufferZeroInitTest, IndirectBufferForDrawIndexedIndirect) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Bind the whole buffer as an indirect buffer.
     {
         constexpr uint64_t kOffset = 0u;
@@ -1155,6 +1176,9 @@
 // Test the buffer will be lazily initialized correctly when its first use is an indirect buffer for
 // DispatchIndirect.
 TEST_P(BufferZeroInitTest, IndirectBufferForDispatchIndirect) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Bind the whole buffer as an indirect buffer.
     {
         constexpr uint64_t kOffset = 0u;
diff --git a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
index 2b03157..5c8de73 100644
--- a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
+++ b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
@@ -118,6 +118,9 @@
 
 // Test that a trivial compute-shader memcpy implementation works.
 TEST_P(ComputeCopyStorageBufferTests, UnsizedArrayOfBasic) {
+    // TODO(crbug.com/tint/400)
+    // Tint transform failure: error: invalid 0 size for array or vector
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
     BasicTest(R"(
         #version 450
         #define kInstances 4
diff --git a/src/tests/end2end/ComputeSharedMemoryTests.cpp b/src/tests/end2end/ComputeSharedMemoryTests.cpp
index aee0e50..527f28d 100644
--- a/src/tests/end2end/ComputeSharedMemoryTests.cpp
+++ b/src/tests/end2end/ComputeSharedMemoryTests.cpp
@@ -70,6 +70,9 @@
 
 // Basic shared memory test
 TEST_P(ComputeSharedMemoryTests, Basic) {
+    // TODO(crbug.com/tint/375): Implement barriers in Tint.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     BasicTest(R"(
         #version 450
         const uint kTileSize = 4;
diff --git a/src/tests/end2end/CreateReadyPipelineTests.cpp b/src/tests/end2end/CreateReadyPipelineTests.cpp
index 95131e4..6311b46 100644
--- a/src/tests/end2end/CreateReadyPipelineTests.cpp
+++ b/src/tests/end2end/CreateReadyPipelineTests.cpp
@@ -135,6 +135,9 @@
 
 // Verify the basic use of CreateReadyRenderPipeline() works on all backends.
 TEST_P(CreateReadyPipelineTest, BasicUseOfCreateReadyRenderPipeline) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     constexpr wgpu::TextureFormat kRenderAttachmentFormat = wgpu::TextureFormat::RGBA8Unorm;
 
     const char* vertexShader = R"(
@@ -212,6 +215,9 @@
 TEST_P(CreateReadyPipelineTest, CreateRenderPipelineFailed) {
     DAWN_SKIP_TEST_IF(HasToggleEnabled("skip_validation"));
 
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     constexpr wgpu::TextureFormat kRenderAttachmentFormat = wgpu::TextureFormat::Depth32Float;
 
     const char* vertexShader = R"(
@@ -289,6 +295,9 @@
 // Verify there is no error when the device is released before the callback of
 // CreateReadyRenderPipeline() is called.
 TEST_P(CreateReadyPipelineTest, ReleaseDeviceBeforeCallbackOfCreateReadyRenderPipeline) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     const char* vertexShader = R"(
         #version 450
         void main() {
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index 5591cf1..3ab4fd1 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -27,6 +27,10 @@
     void SetUp() override {
         DawnTest::SetUp();
 
+        // TODO(crbug.com/tint/329): SPIR-V output missing DepthReplacing execution mode.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                          (IsVulkan() || IsOpenGL() || IsOpenGLES()));
+
         // Draw a square in the bottom left quarter of the screen.
         mVertexModule = utils::CreateShaderModuleFromWGSL(device, R"(
             [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
diff --git a/src/tests/end2end/DepthStencilSamplingTests.cpp b/src/tests/end2end/DepthStencilSamplingTests.cpp
index 21b2504..37c1f37 100644
--- a/src/tests/end2end/DepthStencilSamplingTests.cpp
+++ b/src/tests/end2end/DepthStencilSamplingTests.cpp
@@ -58,6 +58,9 @@
     void SetUp() override {
         DawnTest::SetUp();
 
+        // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
         wgpu::BufferDescriptor uniformBufferDesc;
         uniformBufferDesc.usage = wgpu::BufferUsage::Uniform | wgpu::BufferUsage::CopyDst;
         uniformBufferDesc.size = sizeof(float);
diff --git a/src/tests/end2end/DrawTests.cpp b/src/tests/end2end/DrawTests.cpp
index 585291a..bb4a0e8 100644
--- a/src/tests/end2end/DrawTests.cpp
+++ b/src/tests/end2end/DrawTests.cpp
@@ -106,8 +106,5 @@
                       D3D12Backend(),
                       MetalBackend(),
                       OpenGLBackend(),
-                      OpenGLBackend({"use_tint_generator"}),
                       OpenGLESBackend(),
-                      OpenGLESBackend({"use_tint_generator"}),
-                      VulkanBackend(),
-                      VulkanBackend({"use_tint_generator"}));
+                      VulkanBackend());
diff --git a/src/tests/end2end/GpuMemorySynchronizationTests.cpp b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
index b208810..75ad6f6 100644
--- a/src/tests/end2end/GpuMemorySynchronizationTests.cpp
+++ b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
@@ -21,6 +21,13 @@
 
 class GpuMemorySyncTests : public DawnTest {
   protected:
+    void SetUp() override {
+        DawnTest::SetUp();
+
+        // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+    }
+
     wgpu::Buffer CreateBuffer() {
         wgpu::BufferDescriptor srcDesc;
         srcDesc.size = 4;
@@ -240,6 +247,13 @@
 
 class StorageToUniformSyncTests : public DawnTest {
   protected:
+    void SetUp() override {
+        DawnTest::SetUp();
+
+        // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+    }
+
     void CreateBuffer() {
         wgpu::BufferDescriptor bufferDesc;
         bufferDesc.size = sizeof(float);
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index c3e766d..3766320 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -315,6 +315,10 @@
 
 // Test multisampled rendering with depth test works correctly.
 TEST_P(MultisampledRenderingTest, MultisampledRenderingWithDepthTest) {
+    // TODO(crbug.com/tint/329): SPIR-V output missing DepthReplacing execution mode.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                      (IsVulkan() || IsOpenGL() || IsOpenGLES()));
+
     constexpr bool kTestDepth = true;
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     wgpu::RenderPipeline pipeline = CreateRenderPipelineWithOneOutputForTest(kTestDepth);
@@ -670,6 +674,10 @@
     // TODO(dawn:491): Find out why this test doesn't work on Windows Intel Vulkan.
     DAWN_SKIP_TEST_IF(IsWindows() && IsIntel() && IsVulkan());
 
+    // TODO(crbug.com/tint/329): SPIR-V output missing DepthReplacing execution mode.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                      (IsVulkan() || IsOpenGL() || IsOpenGLES()));
+
     constexpr bool kTestDepth = true;
     // The second sample is included in the first render pass and it's covered by the triangle.
     constexpr uint32_t kSampleMaskGreen = kSecondSampleMaskBit;
@@ -730,6 +738,9 @@
 // Test using one multisampled color attachment with resolve target can render correctly
 // with non-default sample mask and shader-output mask.
 TEST_P(MultisampledRenderingTest, ResolveInto2DTextureWithSampleMaskAndShaderOutputMask) {
+    // TODO(crbug.com/tint/372): Support sample mask builtin.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     constexpr bool kTestDepth = false;
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
 
@@ -773,6 +784,9 @@
 // Test doing MSAA resolve into multiple resolve targets works correctly with a non-default
 // shader-output mask.
 TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargetsWithShaderOutputMask) {
+    // TODO(crbug.com/tint/372): Support sample mask builtin.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     wgpu::TextureView multisampledColorView2 =
         CreateTextureForRenderAttachment(kColorFormat, kSampleCount).CreateView();
     wgpu::Texture resolveTexture2 = CreateTextureForRenderAttachment(kColorFormat, 1);
@@ -926,6 +940,10 @@
     // algorithm.
     DAWN_SKIP_TEST_IF(IsSwiftshader());
 
+    // TODO(crbug.com/tint/329): SPIR-V output missing DepthReplacing execution mode.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                      (IsVulkan() || IsOpenGL() || IsOpenGLES()));
+
     constexpr bool kTestDepth = true;
     constexpr uint32_t kSampleMask = 0xFFFFFFFF;
 
diff --git a/src/tests/end2end/MultisampledSamplingTests.cpp b/src/tests/end2end/MultisampledSamplingTests.cpp
index 9a220ac..b0081a8 100644
--- a/src/tests/end2end/MultisampledSamplingTests.cpp
+++ b/src/tests/end2end/MultisampledSamplingTests.cpp
@@ -49,6 +49,10 @@
 
     void SetUp() override {
         DawnTest::SetUp();
+
+        // TODO(crbug.com/tint/329): SPIR-V output missing DepthReplacing execution mode.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator") &&
+                          (IsVulkan() || IsOpenGL() || IsOpenGLES()));
         {
             utils::ComboRenderPipelineDescriptor desc(device);
 
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index 44eaa4c..ee28a4f 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -23,6 +23,9 @@
     void SetUp() {
         DawnTest::SetUp();
 
+        // TODO(crbug.com/tint/252): Implement arrayLength.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
         // Create buffers of various size to check the length() implementation
         wgpu::BufferDescriptor bufferDesc;
         bufferDesc.size = 4;
diff --git a/src/tests/end2end/PrimitiveTopologyTests.cpp b/src/tests/end2end/PrimitiveTopologyTests.cpp
index 1028895..2766a4e 100644
--- a/src/tests/end2end/PrimitiveTopologyTests.cpp
+++ b/src/tests/end2end/PrimitiveTopologyTests.cpp
@@ -151,6 +151,9 @@
     void SetUp() override {
         DawnTest::SetUp();
 
+        // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
         vsModule = utils::CreateShaderModule(device, utils::SingleShaderStage::Vertex, R"(
diff --git a/src/tests/end2end/ShaderFloat16Tests.cpp b/src/tests/end2end/ShaderFloat16Tests.cpp
index c920f99..8972616 100644
--- a/src/tests/end2end/ShaderFloat16Tests.cpp
+++ b/src/tests/end2end/ShaderFloat16Tests.cpp
@@ -39,6 +39,8 @@
 TEST_P(ShaderFloat16Tests, Basic16BitFloatFeaturesTest) {
     DAWN_SKIP_TEST_IF(!IsShaderFloat16Supported());
     DAWN_SKIP_TEST_IF(IsD3D12() && IsIntel());  // Flaky crashes. crbug.com/dawn/586
+    // TODO(crbug.com/tint/404): Implement float16 in Tint.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
 
     uint16_t uniformData[] = {Float32ToFloat16(1.23), Float32ToFloat16(0.0)};  // 0.0 is a padding.
     wgpu::Buffer uniformBuffer = utils::CreateBufferFromData(
diff --git a/src/tests/end2end/StorageTextureTests.cpp b/src/tests/end2end/StorageTextureTests.cpp
index 985bf68..70aaffe 100644
--- a/src/tests/end2end/StorageTextureTests.cpp
+++ b/src/tests/end2end/StorageTextureTests.cpp
@@ -711,6 +711,9 @@
 
 // Test that read-only storage textures are supported in compute shader.
 TEST_P(StorageTextureTests, ReadonlyStorageTextureInComputeShader) {
+    // TODO(crbug.com/tint/401): SPIR-V reader parses readonly storage textures as read/write.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     for (wgpu::TextureFormat format : utils::kAllTextureFormats) {
         if (!utils::TextureFormatSupportsStorageTexture(format)) {
             continue;
@@ -748,6 +751,9 @@
 
 // Test that read-only storage textures are supported in vertex shader.
 TEST_P(StorageTextureTests, ReadonlyStorageTextureInVertexShader) {
+    // TODO(crbug.com/tint/401): SPIR-V reader parses readonly storage textures as read/write.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     for (wgpu::TextureFormat format : utils::kAllTextureFormats) {
         if (!utils::TextureFormatSupportsStorageTexture(format)) {
             continue;
@@ -791,6 +797,9 @@
 
 // Test that read-only storage textures are supported in fragment shader.
 TEST_P(StorageTextureTests, ReadonlyStorageTextureInFragmentShader) {
+    // TODO(crbug.com/tint/401): SPIR-V reader parses readonly storage textures as read/write.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     for (wgpu::TextureFormat format : utils::kAllTextureFormats) {
         if (!utils::TextureFormatSupportsStorageTexture(format)) {
             continue;
@@ -826,6 +835,9 @@
 
 // Test that write-only storage textures are supported in compute shader.
 TEST_P(StorageTextureTests, WriteonlyStorageTextureInComputeShader) {
+    // TODO(https://github.com/gpuweb/gpuweb/issues/1107): texture size queries unspecified
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // TODO(crbug.com/dawn/581): this test requires glClearTexSubImage(), unsupported on GLES.
     DAWN_SKIP_TEST_IF(IsOpenGLES());
 
@@ -856,6 +868,9 @@
 // Test that reading from one read-only storage texture then writing into another write-only storage
 // texture in one dispatch are supported in compute shader.
 TEST_P(StorageTextureTests, ReadWriteDifferentStorageTextureInOneDispatchInComputeShader) {
+    // TODO(https://github.com/gpuweb/gpuweb/issues/1107): texture size queries unspecified
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // TODO(crbug.com/dawn/581): this test requires glClearTexSubImage(), unsupported on GLES.
     DAWN_SKIP_TEST_IF(IsOpenGLES());
     for (wgpu::TextureFormat format : utils::kAllTextureFormats) {
@@ -890,6 +905,9 @@
 
 // Test that write-only storage textures are supported in fragment shader.
 TEST_P(StorageTextureTests, WriteonlyStorageTextureInFragmentShader) {
+    // TODO(https://github.com/gpuweb/gpuweb/issues/1107): texture size queries unspecified
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // TODO(crbug.com/dawn/581): this test requires glClearTexSubImage(), unsupported on GLES.
     DAWN_SKIP_TEST_IF(IsOpenGLES());
     for (wgpu::TextureFormat format : utils::kAllTextureFormats) {
@@ -919,6 +937,9 @@
 
 // Verify 2D array read-only storage texture works correctly.
 TEST_P(StorageTextureTests, Readonly2DArrayStorageTexture) {
+    // TODO(crbug.com/tint/401): SPIR-V reader parses readonly storage textures as read/write.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     constexpr uint32_t kArrayLayerCount = 3u;
 
     constexpr wgpu::TextureFormat kTextureFormat = wgpu::TextureFormat::R32Uint;
@@ -951,6 +972,9 @@
 
 // Verify 2D array write-only storage texture works correctly.
 TEST_P(StorageTextureTests, Writeonly2DArrayStorageTexture) {
+    // TODO(https://github.com/gpuweb/gpuweb/issues/1107): texture size queries unspecified
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // TODO(crbug.com/dawn/581): this test requires glClearTexSubImage(), unsupported on GLES.
     DAWN_SKIP_TEST_IF(IsOpenGLES());
     constexpr uint32_t kArrayLayerCount = 3u;
@@ -973,6 +997,11 @@
 // Test that multiple dispatches to increment values by ping-ponging between a read-only storage
 // texture and a write-only storage texture are synchronized in one pass.
 TEST_P(StorageTextureTests, ReadonlyAndWriteonlyStorageTexturePingPong) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureStore
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // TODO(crbug.com/dawn/581): this test requires glClearTexSubImage(), unsupported on GLES.
     DAWN_SKIP_TEST_IF(IsOpenGLES());
     constexpr wgpu::TextureFormat kTextureFormat = wgpu::TextureFormat::R32Uint;
@@ -1050,6 +1079,11 @@
 // Test that multiple dispatches to increment values by ping-ponging between a sampled texture and
 // a write-only storage texture are synchronized in one pass.
 TEST_P(StorageTextureTests, SampledAndWriteonlyStorageTexturePingPong) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // TODO(crbug.com/dawn/581): this test requires glClearTexSubImage(), unsupported on GLES.
     DAWN_SKIP_TEST_IF(IsOpenGLES());
     constexpr wgpu::TextureFormat kTextureFormat = wgpu::TextureFormat::R32Uint;
@@ -1177,6 +1211,9 @@
 // Verify that the texture is correctly cleared to 0 before its first usage as a read-only storage
 // texture in a render pass.
 TEST_P(StorageTextureZeroInitTests, ReadonlyStorageTextureClearsToZeroInRenderPass) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     wgpu::Texture readonlyStorageTexture =
         CreateTexture(wgpu::TextureFormat::R32Uint, wgpu::TextureUsage::Storage);
 
@@ -1203,6 +1240,11 @@
 // Verify that the texture is correctly cleared to 0 before its first usage as a read-only storage
 // texture in a compute pass.
 TEST_P(StorageTextureZeroInitTests, ReadonlyStorageTextureClearsToZeroInComputePass) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureStore
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     wgpu::Texture readonlyStorageTexture =
         CreateTexture(wgpu::TextureFormat::R32Uint, wgpu::TextureUsage::Storage);
 
@@ -1230,6 +1272,9 @@
 // Verify that the texture is correctly cleared to 0 before its first usage as a write-only storage
 // storage texture in a render pass.
 TEST_P(StorageTextureZeroInitTests, WriteonlyStorageTextureClearsToZeroInRenderPass) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Prepare the write-only storage texture.
     constexpr uint32_t kTexelSizeR32Uint = 4u;
     wgpu::Texture writeonlyStorageTexture = CreateTexture(
@@ -1243,6 +1288,11 @@
 // Verify that the texture is correctly cleared to 0 before its first usage as a write-only storage
 // texture in a compute pass.
 TEST_P(StorageTextureZeroInitTests, WriteonlyStorageTextureClearsToZeroInComputePass) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureStore
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Prepare the write-only storage texture.
     constexpr uint32_t kTexelSizeR32Uint = 4u;
     wgpu::Texture writeonlyStorageTexture = CreateTexture(
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 352d970..ae751f2 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -844,6 +844,11 @@
 
 // This tests the clearing of sampled textures in render pass
 TEST_P(TextureZeroInitTest, RenderPassSampledTextureClear) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Create needed resources
     wgpu::TextureDescriptor descriptor =
         CreateTextureDescriptor(1, 1, wgpu::TextureUsage::Sampled, kColorFormat);
@@ -891,6 +896,11 @@
 
 // This tests the clearing of sampled textures during compute pass
 TEST_P(TextureZeroInitTest, ComputePassSampledTextureClear) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Create needed resources
     wgpu::TextureDescriptor descriptor =
         CreateTextureDescriptor(1, 1, wgpu::TextureUsage::Sampled, kColorFormat);
@@ -1049,6 +1059,11 @@
 // Then expect the render texture to not store the data from sample texture
 // because it will be lazy cleared by the EXPECT_TEXTURE_RGBA8_EQ call.
 TEST_P(TextureZeroInitTest, RenderPassStoreOpClear) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     // Create needed resources
     wgpu::TextureDescriptor descriptor = CreateTextureDescriptor(
         1, 1, wgpu::TextureUsage::Sampled | wgpu::TextureUsage::CopyDst, kColorFormat);
@@ -1195,6 +1210,11 @@
 // Test that if one mip of a texture is initialized and another is uninitialized, lazy clearing the
 // uninitialized mip does not clear the initialized mip.
 TEST_P(TextureZeroInitTest, PreservesInitializedMip) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     wgpu::TextureDescriptor sampleTextureDescriptor = CreateTextureDescriptor(
         2, 1,
         wgpu::TextureUsage::CopySrc | wgpu::TextureUsage::CopyDst | wgpu::TextureUsage::Sampled,
@@ -1274,6 +1294,11 @@
 // Test that if one layer of a texture is initialized and another is uninitialized, lazy clearing
 // the uninitialized layer does not clear the initialized layer.
 TEST_P(TextureZeroInitTest, PreservesInitializedArrayLayer) {
+    // TODO(crbug.com/tint/399)
+    // Tint SPIRV reader failure:
+    // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     wgpu::TextureDescriptor sampleTextureDescriptor = CreateTextureDescriptor(
         1, 2,
         wgpu::TextureUsage::CopySrc | wgpu::TextureUsage::CopyDst | wgpu::TextureUsage::Sampled,
@@ -1651,6 +1676,12 @@
   protected:
     void SetUp() override {
         DawnTest::SetUp();
+
+        // TODO(crbug.com/tint/399)
+        // Tint SPIRV reader failure:
+        // Type Determination: v-0006: identifier must be declared before use: textureLoadLevel
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
         DAWN_SKIP_TEST_IF(UsesWire());
         DAWN_SKIP_TEST_IF(!IsBCFormatSupported());
         // TODO: find out why this test is flaky on Windows Intel Vulkan bots.
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index a4e773a..d3731eb 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -375,6 +375,11 @@
     void DoVertexFormatTest(wgpu::VertexFormat format,
                             std::vector<VertexType> vertex,
                             std::vector<ExpectedType> expectedData) {
+        // TODO(crbug.com/tint/402): Unimplemented min / max
+        DAWN_SKIP_TEST_IF(
+            (IsFloatFormat(format) || IsHalfFormat(format) || IsNormalizedFormat(format)) &&
+            HasToggleEnabled("use_tint_generator"));
+
         wgpu::RenderPipeline pipeline = MakeTestPipeline(format, expectedData);
         wgpu::Buffer vertexBuffer = utils::CreateBufferFromData(
             device, vertex.data(), vertex.size() * sizeof(VertexType), wgpu::BufferUsage::Vertex);
diff --git a/src/tests/end2end/VertexStateTests.cpp b/src/tests/end2end/VertexStateTests.cpp
index 1c92f34..4b2df8e 100644
--- a/src/tests/end2end/VertexStateTests.cpp
+++ b/src/tests/end2end/VertexStateTests.cpp
@@ -524,6 +524,9 @@
 
 // Test that overlapping vertex attributes are permitted and load data correctly
 TEST_P(VertexStateTest, OverlappingVertexAttributes) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 3, 3);
 
     utils::ComboVertexStateDescriptor vertexState =
@@ -617,6 +620,9 @@
 
 // Test that vertex input is not required in render pipeline descriptor.
 TEST_P(OptionalVertexStateTest, Basic) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 3, 3);
 
     wgpu::ShaderModule vsModule =
diff --git a/src/tests/end2end/ViewportOrientationTests.cpp b/src/tests/end2end/ViewportOrientationTests.cpp
index 4f591e9..4485d4a 100644
--- a/src/tests/end2end/ViewportOrientationTests.cpp
+++ b/src/tests/end2end/ViewportOrientationTests.cpp
@@ -21,6 +21,9 @@
 
 // Test that the pixel in viewport coordinate (-1, -1) matches texel (0, 0)
 TEST_P(ViewportOrientationTests, OriginAt0x0) {
+    // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+    DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 2, 2);
 
     wgpu::ShaderModule vsModule =
diff --git a/src/tests/end2end/ViewportTests.cpp b/src/tests/end2end/ViewportTests.cpp
index 528439c..3dd6032 100644
--- a/src/tests/end2end/ViewportTests.cpp
+++ b/src/tests/end2end/ViewportTests.cpp
@@ -22,6 +22,9 @@
     void SetUp() override {
         DawnTest::SetUp();
 
+        // TODO(crbug.com/tint/398): GLSL builtins don't work with SPIR-V reader.
+        DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
+
         mQuadVS =
             utils::CreateShaderModule(device, utils::SingleShaderStage::Vertex, R"(#version 450
             const vec2 pos[6] = vec2[6](vec2(-1.0f,  1.0f),