Tint: Add `dual_source_blending` as a valid WGSL extension

This patch adds `dual_source_blending` as a valid WGSL extension
and an alias of `chromium_internal_dual_source_blending` and replaces
`chromium_internal_dual_source_blending` with `dual_source_blending`
in tests when possible.

Bug: chromium:341973423
Change-Id: I724555d2ecab5de7214599e55d97aafd9b6ae559
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/190101
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index 99ed6a7..35e773d 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -1800,6 +1800,7 @@
     if (mEnabledFeatures.IsEnabled(Feature::DualSourceBlending)) {
         mWGSLAllowedFeatures.extensions.insert(
             tint::wgsl::Extension::kChromiumInternalDualSourceBlending);
+        mWGSLAllowedFeatures.extensions.insert(tint::wgsl::Extension::kDualSourceBlending);
     }
     if (mEnabledFeatures.IsEnabled(Feature::PixelLocalStorageNonCoherent) ||
         mEnabledFeatures.IsEnabled(Feature::PixelLocalStorageCoherent)) {
diff --git a/src/dawn/tests/end2end/DualSourceBlendTests.cpp b/src/dawn/tests/end2end/DualSourceBlendTests.cpp
index b3f71c6..38e1a2a 100644
--- a/src/dawn/tests/end2end/DualSourceBlendTests.cpp
+++ b/src/dawn/tests/end2end/DualSourceBlendTests.cpp
@@ -205,7 +205,7 @@
 
     void RunTest(TestParams params) {
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
-                enable chromium_internal_dual_source_blending;
+                enable dual_source_blending;
 
                 struct TestData {
                     color : vec4f,
diff --git a/src/dawn/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/dawn/tests/unittests/validation/RenderPipelineValidationTests.cpp
index 4dfe84e..fb26be8 100644
--- a/src/dawn/tests/unittests/validation/RenderPipelineValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/RenderPipelineValidationTests.cpp
@@ -2582,7 +2582,7 @@
         RenderPipelineValidationTest::SetUp();
 
         fsModuleWithBlendSrc1 = utils::CreateShaderModule(device, R"(
-        enable chromium_internal_dual_source_blending;
+        enable dual_source_blending;
         struct FragOut {
             @location(0) @blend_src(0) color : vec4f,
             @location(0) @blend_src(1) blend : vec4f,
@@ -2671,7 +2671,7 @@
     for (uint32_t location = 1; location < limits.limits.maxColorAttachments; location++) {
         std::ostringstream sstream;
         sstream << R"(
-                enable chromium_internal_dual_source_blending;
+                enable dual_source_blending;
 
                 struct TestData {
                     color : vec4f,
@@ -2775,7 +2775,7 @@
                                           wgpu::BlendFactor::OneMinusSrc1Alpha};
 
     wgpu::ShaderModule fsModuleWithBlendSrc1NoAlpha = utils::CreateShaderModule(device, R"(
-        enable chromium_internal_dual_source_blending;
+        enable dual_source_blending;
         struct FragOut {
             @location(0) @blend_src(0) color : vec2f,
             @location(0) @blend_src(1) blend : vec2f,
diff --git a/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp b/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
index 5fdecba..1e363f5 100644
--- a/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
@@ -784,10 +784,10 @@
 
 constexpr struct WGSLExtensionInfo kExtensions[] = {
     {"f16", false, "shader-f16"},
+    {"dual_source_blending", true, "dual-source-blending"},
     {"chromium_experimental_subgroups", true, "chromium-experimental-subgroups"},
     {"chromium_experimental_pixel_local", true, "pixel-local-storage-coherent"},
     {"chromium_disable_uniformity_analysis", true, nullptr},
-    {"chromium_internal_dual_source_blending", true, "dual-source-blending"},
     {"chromium_internal_graphite", true, nullptr},
     {"chromium_experimental_framebuffer_fetch", true, "framebuffer-fetch"},
 
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 4f9d148..a9118b3 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -195,6 +195,7 @@
 "dpdy"
 "dpdyCoarse"
 "dpdyFine"
+"dual_source_blending"
 "else"
 "enable"
 "error"
diff --git a/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc b/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc
index 4046eb6..1cbcee4 100644
--- a/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc
@@ -281,6 +281,7 @@
                 wgsl::Extension::kChromiumInternalDualSourceBlending,
                 wgsl::Extension::kChromiumInternalGraphite,
                 wgsl::Extension::kF16,
+                wgsl::Extension::kDualSourceBlending,
             })) {
         return false;
     }
@@ -379,7 +380,8 @@
         requires_f16_extension_ = true;
     }
 
-    if (enable->HasExtension(wgsl::Extension::kChromiumInternalDualSourceBlending)) {
+    if (enable->HasExtension(wgsl::Extension::kChromiumInternalDualSourceBlending) ||
+        enable->HasExtension(wgsl::Extension::kDualSourceBlending)) {
         requires_dual_source_blending_extension_ = true;
     }
 }
diff --git a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
index 28a5f6f..2345c72 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
@@ -399,6 +399,7 @@
                 wgsl::Extension::kChromiumInternalDualSourceBlending,
                 wgsl::Extension::kChromiumInternalGraphite,
                 wgsl::Extension::kF16,
+                wgsl::Extension::kDualSourceBlending,
             })) {
         return false;
     }
diff --git a/src/tint/lang/msl/writer/ast_printer/ast_printer.cc b/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
index 7a514a6..6fb4080 100644
--- a/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
@@ -288,6 +288,7 @@
                 wgsl::Extension::kChromiumInternalGraphite,
                 wgsl::Extension::kChromiumInternalRelaxedUniformLayout,
                 wgsl::Extension::kF16,
+                wgsl::Extension::kDualSourceBlending,
             })) {
         return false;
     }
diff --git a/src/tint/lang/spirv/writer/ast_printer/builder.cc b/src/tint/lang/spirv/writer/ast_printer/builder.cc
index 8df49c8..563ac13 100644
--- a/src/tint/lang/spirv/writer/ast_printer/builder.cc
+++ b/src/tint/lang/spirv/writer/ast_printer/builder.cc
@@ -284,6 +284,7 @@
                 wgsl::Extension::kChromiumInternalGraphite,
                 wgsl::Extension::kChromiumInternalInputAttachments,
                 wgsl::Extension::kF16,
+                wgsl::Extension::kDualSourceBlending,
             })) {
         return false;
     }
diff --git a/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io_test.cc b/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io_test.cc
index ec83e9e..1bd2d64 100644
--- a/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io_test.cc
+++ b/src/tint/lang/wgsl/ast/transform/canonicalize_entry_point_io_test.cc
@@ -4131,7 +4131,7 @@
 
 TEST_F(CanonicalizeEntryPointIOTest, Return_Struct_Index_Attribute_Spirv) {
     auto* src = R"(
-enable chromium_internal_dual_source_blending;
+enable dual_source_blending;
 
 struct FragOutput {
   @location(0) @blend_src(0) color : vec4<f32>,
@@ -4152,7 +4152,7 @@
 )";
 
     auto* expect = R"(
-enable chromium_internal_dual_source_blending;
+enable dual_source_blending;
 
 @location(0) @blend_src(0) @internal(disable_validation__ignore_address_space) var<__out> color_1 : vec4<f32>;
 
@@ -4197,7 +4197,7 @@
 
 TEST_F(CanonicalizeEntryPointIOTest, Return_Struct_Index_Attribute_Msl) {
     auto* src = R"(
-enable chromium_internal_dual_source_blending;
+enable dual_source_blending;
 
 struct FragOutput {
   @location(0) @blend_src(0) color : vec4<f32>,
@@ -4218,7 +4218,7 @@
 )";
 
     auto* expect = R"(
-enable chromium_internal_dual_source_blending;
+enable dual_source_blending;
 
 struct FragOutput {
   color : vec4<f32>,
@@ -4268,7 +4268,7 @@
 
 TEST_F(CanonicalizeEntryPointIOTest, Return_Struct_Index_Attribute_Hlsl) {
     auto* src = R"(
-enable chromium_internal_dual_source_blending;
+enable dual_source_blending;
 
 struct FragOutput {
   @location(0) @blend_src(0) color : vec4<f32>,
@@ -4289,7 +4289,7 @@
 )";
 
     auto* expect = R"(
-enable chromium_internal_dual_source_blending;
+enable dual_source_blending;
 
 struct FragOutput {
   color : vec4<f32>,
diff --git a/src/tint/lang/wgsl/extension.cc b/src/tint/lang/wgsl/extension.cc
index e6790ec..395a0a4 100644
--- a/src/tint/lang/wgsl/extension.cc
+++ b/src/tint/lang/wgsl/extension.cc
@@ -69,6 +69,9 @@
     if (str == "chromium_internal_relaxed_uniform_layout") {
         return Extension::kChromiumInternalRelaxedUniformLayout;
     }
+    if (str == "dual_source_blending") {
+        return Extension::kDualSourceBlending;
+    }
     if (str == "f16") {
         return Extension::kF16;
     }
@@ -97,6 +100,8 @@
             return "chromium_internal_input_attachments";
         case Extension::kChromiumInternalRelaxedUniformLayout:
             return "chromium_internal_relaxed_uniform_layout";
+        case Extension::kDualSourceBlending:
+            return "dual_source_blending";
         case Extension::kF16:
             return "f16";
     }
diff --git a/src/tint/lang/wgsl/extension.h b/src/tint/lang/wgsl/extension.h
index ed1ee13..dbf3ff7 100644
--- a/src/tint/lang/wgsl/extension.h
+++ b/src/tint/lang/wgsl/extension.h
@@ -55,6 +55,7 @@
     kChromiumInternalGraphite,
     kChromiumInternalInputAttachments,
     kChromiumInternalRelaxedUniformLayout,
+    kDualSourceBlending,
     kF16,
 };
 
@@ -85,6 +86,7 @@
     "chromium_internal_graphite",
     "chromium_internal_input_attachments",
     "chromium_internal_relaxed_uniform_layout",
+    "dual_source_blending",
     "f16",
 };
 
@@ -99,6 +101,7 @@
     Extension::kChromiumInternalGraphite,
     Extension::kChromiumInternalInputAttachments,
     Extension::kChromiumInternalRelaxedUniformLayout,
+    Extension::kDualSourceBlending,
     Extension::kF16,
 };
 
diff --git a/src/tint/lang/wgsl/extension_bench.cc b/src/tint/lang/wgsl/extension_bench.cc
index 7e209ff..18731c7 100644
--- a/src/tint/lang/wgsl/extension_bench.cc
+++ b/src/tint/lang/wgsl/extension_bench.cc
@@ -108,13 +108,20 @@
         "chromiuminternal_relaxed_uniform_layut",
         "cXroDium_internal_rJJlaed_uniform_layout",
         "chromium_int8nal_relaed_uniform_layut",
-        "k",
-        "16",
-        "J1",
+        "dul_okrc_blen11ing",
+        "dua_source_blending",
+        "duJl_source_blendig",
+        "dual_source_blending",
+        "dual_source_clending",
+        "dual_sOurce_blending",
+        "dualKKs__urce_blttvnding",
+        "xx8",
+        "__F",
+        "f1q",
         "f16",
-        "c16",
-        "fO6",
-        "_KKttvv",
+        "331O",
+        "ftt6QQ",
+        "666",
     };
     for (auto _ : state) {
         for (auto* str : kStrings) {
diff --git a/src/tint/lang/wgsl/extension_test.cc b/src/tint/lang/wgsl/extension_test.cc
index 9e6c182..0237bd5 100644
--- a/src/tint/lang/wgsl/extension_test.cc
+++ b/src/tint/lang/wgsl/extension_test.cc
@@ -66,6 +66,7 @@
     {"chromium_internal_graphite", Extension::kChromiumInternalGraphite},
     {"chromium_internal_input_attachments", Extension::kChromiumInternalInputAttachments},
     {"chromium_internal_relaxed_uniform_layout", Extension::kChromiumInternalRelaxedUniformLayout},
+    {"dual_source_blending", Extension::kDualSourceBlending},
     {"f16", Extension::kF16},
 };
 
@@ -97,9 +98,12 @@
     {"chromium_internl_relaxyd_uniform_layout", Extension::kUndefined},
     {"chromnnum_internrr77_Gelaxell_uniform_layout", Extension::kUndefined},
     {"chromium_intern4l_relaxe00_uniform_layout", Extension::kUndefined},
-    {"5", Extension::kUndefined},
-    {"u16", Extension::kUndefined},
-    {"f", Extension::kUndefined},
+    {"dua_ource_bledoong", Extension::kUndefined},
+    {"dualsorce_blendzzng", Extension::kUndefined},
+    {"ua_sopiirce_bl11nding", Extension::kUndefined},
+    {"f1XX", Extension::kUndefined},
+    {"55199II", Extension::kUndefined},
+    {"frSSHHa", Extension::kUndefined},
 };
 
 using ExtensionParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/lang/wgsl/inspector/inspector_test.cc b/src/tint/lang/wgsl/inspector/inspector_test.cc
index 1a7c557..3dd5661 100644
--- a/src/tint/lang/wgsl/inspector/inspector_test.cc
+++ b/src/tint/lang/wgsl/inspector/inspector_test.cc
@@ -4049,7 +4049,7 @@
 }
 
 TEST_F(InspectorGetBlendSrcTest, Basic) {
-    Enable(wgsl::Extension::kChromiumInternalDualSourceBlending);
+    Enable(wgsl::Extension::kDualSourceBlending);
 
     Structure("out_struct",
               Vector{
diff --git a/src/tint/lang/wgsl/ir_roundtrip_test.cc b/src/tint/lang/wgsl/ir_roundtrip_test.cc
index df1f324..35308c6 100644
--- a/src/tint/lang/wgsl/ir_roundtrip_test.cc
+++ b/src/tint/lang/wgsl/ir_roundtrip_test.cc
@@ -260,7 +260,7 @@
 
 TEST_F(IRToProgramRoundtripTest, StructDecl_MemberIndex) {
     RUN_TEST(R"(
-enable chromium_internal_dual_source_blending;
+enable dual_source_blending;
 
 struct S {
   a : i32,
diff --git a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
index 34d0d00..3051677 100644
--- a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
@@ -177,7 +177,7 @@
     // Error when unknown extension found
     EXPECT_TRUE(p->has_error());
     EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'f16')");
+Possible values: 'dual_source_blending', 'f16')");
     auto program = p->program();
     auto& ast = program.AST();
     EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -191,7 +191,7 @@
     EXPECT_TRUE(p->has_error());
     EXPECT_EQ(p->error(), R"(1:8: expected extension
 Did you mean 'f16'?
-Possible values: 'f16')");
+Possible values: 'dual_source_blending', 'f16')");
     auto program = p->program();
     auto& ast = program.AST();
     EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -205,7 +205,7 @@
     // Error when unknown extension found
     EXPECT_TRUE(p->has_error());
     EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_pixel_local', 'chromium_experimental_push_constant', 'chromium_experimental_subgroups', 'chromium_internal_dual_source_blending', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'chromium_internal_relaxed_uniform_layout', 'f16')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_pixel_local', 'chromium_experimental_push_constant', 'chromium_experimental_subgroups', 'chromium_internal_dual_source_blending', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'chromium_internal_relaxed_uniform_layout', 'dual_source_blending', 'f16')");
     auto program = p->program();
     auto& ast = program.AST();
     EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -253,7 +253,7 @@
         p->translation_unit();
         EXPECT_TRUE(p->has_error());
         EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'f16')");
+Possible values: 'dual_source_blending', 'f16')");
         auto program = p->program();
         auto& ast = program.AST();
         EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -264,7 +264,7 @@
         p->translation_unit();
         EXPECT_TRUE(p->has_error());
         EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'f16')");
+Possible values: 'dual_source_blending', 'f16')");
         auto program = p->program();
         auto& ast = program.AST();
         EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -276,7 +276,7 @@
         EXPECT_TRUE(p->has_error());
         EXPECT_EQ(p->error(), R"(1:8: expected extension
 Did you mean 'f16'?
-Possible values: 'f16')");
+Possible values: 'dual_source_blending', 'f16')");
         auto program = p->program();
         auto& ast = program.AST();
         EXPECT_EQ(ast.Enables().Length(), 0u);
diff --git a/src/tint/lang/wgsl/resolver/attribute_validation_test.cc b/src/tint/lang/wgsl/resolver/attribute_validation_test.cc
index 809c8e3..f7b37a4 100644
--- a/src/tint/lang/wgsl/resolver/attribute_validation_test.cc
+++ b/src/tint/lang/wgsl/resolver/attribute_validation_test.cc
@@ -271,7 +271,7 @@
                 Enable(wgsl::Extension::kChromiumExperimentalFramebufferFetch);
                 break;
             case AttributeKind::kBlendSrc:
-                Enable(wgsl::Extension::kChromiumInternalDualSourceBlending);
+                Enable(wgsl::Extension::kDualSourceBlending);
                 break;
             case AttributeKind::kInputAttachmentIndex:
                 Enable(wgsl::Extension::kChromiumInternalInputAttachments);
diff --git a/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc b/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc
index 55c6704..e747333 100644
--- a/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc
+++ b/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc
@@ -39,8 +39,7 @@
 
 using DualSourceBlendingExtensionTest = ResolverTest;
 
-// Using the @blend_src attribute without chromium_internal_dual_source_blending enabled should
-// fail.
+// Using the @blend_src attribute without dual_source_blending enabled should fail.
 TEST_F(DualSourceBlendingExtensionTest, UseBlendSrcAttribWithoutExtensionError) {
     Structure("Output", Vector{
                             Member("a", ty.vec4<f32>(),
@@ -50,14 +49,12 @@
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(
         r()->error(),
-        R"(12:34 error: use of '@blend_src' requires enabling extension 'chromium_internal_dual_source_blending')");
+        R"(12:34 error: use of '@blend_src' requires enabling extension 'dual_source_blending')");
 }
 
 class DualSourceBlendingExtensionTests : public ResolverTest {
   public:
-    DualSourceBlendingExtensionTests() {
-        Enable(wgsl::Extension::kChromiumInternalDualSourceBlending);
-    }
+    DualSourceBlendingExtensionTests() { Enable(wgsl::Extension::kDualSourceBlending); }
 };
 
 // Using an F32 as an index value should fail.
@@ -260,9 +257,7 @@
 
 class DualSourceBlendingExtensionTestWithParams : public ResolverTestWithParam<int> {
   public:
-    DualSourceBlendingExtensionTestWithParams() {
-        Enable(wgsl::Extension::kChromiumInternalDualSourceBlending);
-    }
+    DualSourceBlendingExtensionTestWithParams() { Enable(wgsl::Extension::kDualSourceBlending); }
 };
 
 // Rendering to multiple render targets while using dual source blending should fail.
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 64118df..45fbe2b 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -2483,10 +2483,11 @@
 bool Validator::BlendSrcAttribute(const ast::BlendSrcAttribute* attr,
                                   ast::PipelineStage stage,
                                   const std::optional<bool> is_input) const {
-    if (!enabled_extensions_.Contains(wgsl::Extension::kChromiumInternalDualSourceBlending)) {
+    if (!enabled_extensions_.Contains(wgsl::Extension::kChromiumInternalDualSourceBlending) &&
+        !enabled_extensions_.Contains(wgsl::Extension::kDualSourceBlending)) {
         AddError(attr->source) << "use of " << style::Attribute("@blend_src")
                                << " requires enabling extension "
-                               << style::Code("chromium_internal_dual_source_blending");
+                               << style::Code("dual_source_blending");
         return false;
     }
 
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index b07d49c..770c6c7 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -70,6 +70,8 @@
 enum extension {
   // WGSL Extension "f16"
   f16
+  // WGSL Extension "dual_source_blending"
+  dual_source_blending
   // A Chromium-specific extension for disabling uniformity analysis.
   chromium_disable_uniformity_analysis
   // A Chromium-specific extension for push constants
@@ -84,6 +86,8 @@
   // A Chromium-specific extension that relaxes memory layout requirements for uniform storage.
   chromium_internal_relaxed_uniform_layout
   // A Chromium-specific extension that enables dual source blending.
+  // TODO(chromium:341973423): Remove `chromium_internal_dual_source_blending` when it is totally
+  // replaced with `dual_source_blending`.
   chromium_internal_dual_source_blending
   // A Chromium-specific extension that enables pixel local storage.
   // Cannot be used with chromium_experimental_framebuffer_fetch
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
index 36a9ba3..e856dd4 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
@@ -1014,7 +1014,7 @@
                     ast_attrs.Push(b.Location(u32(*location)));
                 }
                 if (auto blend_src = ir_attrs.blend_src) {
-                    Enable(wgsl::Extension::kChromiumInternalDualSourceBlending);
+                    Enable(wgsl::Extension::kDualSourceBlending);
                     ast_attrs.Push(b.BlendSrc(u32(*blend_src)));
                 }
                 if (auto builtin = ir_attrs.builtin) {