[fuzz] Skip PixelLocal with multiple entry points

This is done in the HLSL writer fuzzer, as PixelLocal is not fuzzed
individually.

Bug: 348869931
Change-Id: Ifded4c2d4f55409d9ce2ebaa02447c0688177af2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/195937
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/hlsl/writer/writer_ast_fuzz.cc b/src/tint/lang/hlsl/writer/writer_ast_fuzz.cc
index 2c360d3..3ae746c 100644
--- a/src/tint/lang/hlsl/writer/writer_ast_fuzz.cc
+++ b/src/tint/lang/hlsl/writer/writer_ast_fuzz.cc
@@ -43,8 +43,33 @@
 namespace tint::hlsl::writer {
 namespace {
 
-void ASTFuzzer(const tint::Program& program, const fuzz::wgsl::Context& context, Options options) {
+bool CanRun(const Program& program) {
     if (program.AST().HasOverrides()) {
+        return false;
+    }
+
+    // The PixelLocal transform assumes only a single entry point, so check for multiple entry
+    // points if chromium_experimental_pixel_local is enabled.
+    uint32_t num_entry_points = 0;
+    for (auto* fn : program.AST().Functions()) {
+        if (fn->PipelineStage() != ast::PipelineStage::kNone) {
+            num_entry_points++;
+        }
+    }
+    for (auto* enable : program.AST().Enables()) {
+        if (enable->HasExtension(tint::wgsl::Extension::kChromiumExperimentalPixelLocal)) {
+            if (num_entry_points > 1) {
+                return false;
+            }
+            break;
+        }
+    }
+
+    return true;
+}
+
+void ASTFuzzer(const tint::Program& program, const fuzz::wgsl::Context& context, Options options) {
+    if (!CanRun(program)) {
         return;
     }