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) {