diff --git a/src/dawn_native/Format.cpp b/src/dawn_native/Format.cpp
index 44ae1d8..0f904bd 100644
--- a/src/dawn_native/Format.cpp
+++ b/src/dawn_native/Format.cpp
@@ -112,18 +112,18 @@
 
         // 1 byte color formats
         AddColorFormat(dawn::TextureFormat::R8Unorm, true, 1);
-        AddColorFormat(dawn::TextureFormat::R8Snorm, true, 1);
+        AddColorFormat(dawn::TextureFormat::R8Snorm, false, 1);
         AddColorFormat(dawn::TextureFormat::R8Uint, true, 1);
         AddColorFormat(dawn::TextureFormat::R8Sint, true, 1);
 
         // 2 bytes color formats
         AddColorFormat(dawn::TextureFormat::R16Unorm, true, 2);
-        AddColorFormat(dawn::TextureFormat::R16Snorm, true, 2);
+        AddColorFormat(dawn::TextureFormat::R16Snorm, false, 2);
         AddColorFormat(dawn::TextureFormat::R16Uint, true, 2);
         AddColorFormat(dawn::TextureFormat::R16Sint, true, 2);
         AddColorFormat(dawn::TextureFormat::R16Float, true, 2);
         AddColorFormat(dawn::TextureFormat::RG8Unorm, true, 2);
-        AddColorFormat(dawn::TextureFormat::RG8Snorm, true, 2);
+        AddColorFormat(dawn::TextureFormat::RG8Snorm, false, 2);
         AddColorFormat(dawn::TextureFormat::RG8Uint, true, 2);
         AddColorFormat(dawn::TextureFormat::RG8Sint, true, 2);
 
@@ -132,13 +132,13 @@
         AddColorFormat(dawn::TextureFormat::R32Sint, true, 4);
         AddColorFormat(dawn::TextureFormat::R32Float, true, 4);
         AddColorFormat(dawn::TextureFormat::RG16Unorm, true, 4);
-        AddColorFormat(dawn::TextureFormat::RG16Snorm, true, 4);
+        AddColorFormat(dawn::TextureFormat::RG16Snorm, false, 4);
         AddColorFormat(dawn::TextureFormat::RG16Uint, true, 4);
         AddColorFormat(dawn::TextureFormat::RG16Sint, true, 4);
         AddColorFormat(dawn::TextureFormat::RG16Float, true, 4);
         AddColorFormat(dawn::TextureFormat::RGBA8Unorm, true, 4);
         AddColorFormat(dawn::TextureFormat::RGBA8UnormSrgb, true, 4);
-        AddColorFormat(dawn::TextureFormat::RGBA8Snorm, true, 4);
+        AddColorFormat(dawn::TextureFormat::RGBA8Snorm, false, 4);
         AddColorFormat(dawn::TextureFormat::RGBA8Uint, true, 4);
         AddColorFormat(dawn::TextureFormat::RGBA8Sint, true, 4);
         AddColorFormat(dawn::TextureFormat::BGRA8Unorm, true, 4);
@@ -152,7 +152,7 @@
         AddColorFormat(dawn::TextureFormat::RG32Sint, true, 8);
         AddColorFormat(dawn::TextureFormat::RG32Float, true, 8);
         AddColorFormat(dawn::TextureFormat::RGBA16Unorm, true, 8);
-        AddColorFormat(dawn::TextureFormat::RGBA16Snorm, true, 8);
+        AddColorFormat(dawn::TextureFormat::RGBA16Snorm, false, 8);
         AddColorFormat(dawn::TextureFormat::RGBA16Uint, true, 8);
         AddColorFormat(dawn::TextureFormat::RGBA16Sint, true, 8);
         AddColorFormat(dawn::TextureFormat::RGBA16Float, true, 8);
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 0abc0a3..fb69740 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -394,11 +394,7 @@
         std::vector<float> uncompressedData = {0.0f, 1.0f / maxValue, 1.0f, -1.0f};
 
         DoFloatFormatSamplingTest(formatInfo, textureData, uncompressedData, 0.0001f / maxValue);
-
-        // It is not possible to render minValue because -1.0f is the minimum and corresponds to
-        // -maxValue (minValue is - maxValue -1)
-        textureData[3] = -maxValue;
-        DoFormatRenderingTest(formatInfo, uncompressedData, textureData);
+        // Snorm formats aren't renderable because they are not guaranteed renderable in Vulkan
     }
 
     template <typename T>
@@ -507,49 +503,31 @@
 
 // Test the R8Snorm format
 TEST_P(TextureFormatTest, R8Snorm) {
-    // TODO(cwallez@chromium.org): This fails on the Mesa Intel GL driver, understand why.
-    DAWN_SKIP_TEST_IF(IsOpenGL() && IsLinux() && IsIntel());
-
     DoSnormTest<int8_t>({dawn::TextureFormat::R8Snorm, 1, Float, 1});
 }
 
 // Test the RG8Snorm format
 TEST_P(TextureFormatTest, RG8Snorm) {
-    // TODO(cwallez@chromium.org): This fails on the Mesa Intel GL driver, understand why.
-    DAWN_SKIP_TEST_IF(IsOpenGL() && IsLinux() && IsIntel());
-
     DoSnormTest<int8_t>({dawn::TextureFormat::RG8Snorm, 2, Float, 2});
 }
 
 // Test the RGBA8Snorm format
 TEST_P(TextureFormatTest, RGBA8Snorm) {
-    // TODO(cwallez@chromium.org): This fails on the Mesa Intel GL driver, understand why.
-    DAWN_SKIP_TEST_IF(IsOpenGL() && IsLinux() && IsIntel());
-
     DoSnormTest<int8_t>({dawn::TextureFormat::RGBA8Snorm, 4, Float, 4});
 }
 
 // Test the R16Snorm format
 TEST_P(TextureFormatTest, R16Snorm) {
-    // TODO(cwallez@chromium.org): This fails on the Mesa Intel GL driver, understand why.
-    DAWN_SKIP_TEST_IF(IsOpenGL() && IsLinux() && IsIntel());
-
     DoSnormTest<int16_t>({dawn::TextureFormat::R16Snorm, 2, Float, 1});
 }
 
 // Test the RG16Snorm format
 TEST_P(TextureFormatTest, RG16Snorm) {
-    // TODO(cwallez@chromium.org): This fails on the Mesa Intel GL driver, understand why.
-    DAWN_SKIP_TEST_IF(IsOpenGL() && IsLinux() && IsIntel());
-
     DoSnormTest<int16_t>({dawn::TextureFormat::RG16Snorm, 4, Float, 2});
 }
 
 // Test the RGBA16Snorm format
 TEST_P(TextureFormatTest, RGBA16Snorm) {
-    // TODO(cwallez@chromium.org): This fails on the Mesa Intel GL driver, understand why.
-    DAWN_SKIP_TEST_IF(IsOpenGL() && IsLinux() && IsIntel());
-
     DoSnormTest<int16_t>({dawn::TextureFormat::RGBA16Snorm, 8, Float, 4});
 }
 
diff --git a/src/tests/unittests/validation/TextureValidationTests.cpp b/src/tests/unittests/validation/TextureValidationTests.cpp
index 75874f8..af783ba 100644
--- a/src/tests/unittests/validation/TextureValidationTests.cpp
+++ b/src/tests/unittests/validation/TextureValidationTests.cpp
@@ -245,9 +245,18 @@
     descriptor.format = dawn::TextureFormat::RGBA8Unorm;
     device.CreateTexture(&descriptor);
 
-    // Fails because RG11B10Float is non-renderable
-    descriptor.format = dawn::TextureFormat::RG11B10Float;
-    ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
+    dawn::TextureFormat nonRenderableFormats[] = {
+        dawn::TextureFormat::RG11B10Float, dawn::TextureFormat::R8Snorm,
+        dawn::TextureFormat::RG8Snorm,     dawn::TextureFormat::RGBA8Snorm,
+        dawn::TextureFormat::R16Snorm,     dawn::TextureFormat::RG16Snorm,
+        dawn::TextureFormat::RGBA16Snorm,
+    };
+
+    for (dawn::TextureFormat format : nonRenderableFormats) {
+        // Fails because `format` is non-renderable
+        descriptor.format = format;
+        ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
+    }
 }
 
 // TODO(jiawei.shao@intel.com): add tests to verify we cannot create 1D or 3D textures with
