[glsl] Add fuzzer precondition for read-write storage textures

GLES 3.1 only supports r32f, r32i, and r32ui for read-write storage
textures.

Change-Id: I29c2697c574dbc841050dd5c790b387bc115c7ea
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/213634
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/glsl/writer/writer_fuzz.cc b/src/tint/lang/glsl/writer/writer_fuzz.cc
index 89c2dfa..6f789a9 100644
--- a/src/tint/lang/glsl/writer/writer_fuzz.cc
+++ b/src/tint/lang/glsl/writer/writer_fuzz.cc
@@ -30,6 +30,7 @@
 #include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/input_attachment.h"
 #include "src/tint/lang/core/type/pointer.h"
+#include "src/tint/lang/core/type/storage_texture.h"
 #include "src/tint/lang/glsl/writer/helpers/generate_bindings.h"
 #include "src/tint/lang/glsl/writer/writer.h"
 
@@ -62,6 +63,20 @@
             if (!found) {
                 return false;
             }
+
+            // Check texel formats for read-write storage textures.
+            if (auto* st = ptr->StoreType()->As<core::type::StorageTexture>()) {
+                if (st->Access() == core::Access::kReadWrite) {
+                    switch (st->TexelFormat()) {
+                        case core::TexelFormat::kR32Float:
+                        case core::TexelFormat::kR32Sint:
+                        case core::TexelFormat::kR32Uint:
+                            break;
+                        default:
+                            return false;
+                    }
+                }
+            }
         }
 
         if (ptr->AddressSpace() == core::AddressSpace::kPushConstant) {