[tint][transform] Update CanonicalizeEntryPointIO tests
Now that the WGSL parser supports @color, we can test this.
Bug: tint:2085
Change-Id: Ia33e292624c059f96454ae1651aa22edd79dbbce
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/160100
Reviewed-by: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
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 dd75db3..f30d07f 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
@@ -70,28 +70,35 @@
TEST_F(CanonicalizeEntryPointIOTest, Parameters_Spirv) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@fragment
fn frag_main(@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
- @builtin(position) coord : vec4<f32>) {
- var col : f32 = (coord.x * loc1);
+ @builtin(position) coord : vec4<f32>,
+ @color(3) color : vec4<f32>) {
+ var col : f32 = (coord.x * loc1) + color.g;
}
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@location(1) @internal(disable_validation__ignore_address_space) var<__in> loc1_1 : f32;
@location(2) @interpolate(flat) @internal(disable_validation__ignore_address_space) var<__in> loc2_1 : vec4<u32>;
@builtin(position) @internal(disable_validation__ignore_address_space) var<__in> coord_1 : vec4<f32>;
-fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>) {
- var col : f32 = (coord.x * loc1);
+@color(3) @internal(disable_validation__ignore_address_space) var<__in> color_1 : vec4<f32>;
+
+fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>, color : vec4<f32>) {
+ var col : f32 = ((coord.x * loc1) + color.g);
}
@fragment
fn frag_main() {
- frag_main_inner(loc1_1, loc2_1, coord_1);
+ frag_main_inner(loc1_1, loc2_1, coord_1, color_1);
}
)";
@@ -104,29 +111,36 @@
TEST_F(CanonicalizeEntryPointIOTest, Parameters_Msl) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@fragment
fn frag_main(@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
- @builtin(position) coord : vec4<f32>) {
- var col : f32 = (coord.x * loc1);
+ @builtin(position) coord : vec4<f32>,
+ @color(3) color : vec4<f32>) {
+ var col : f32 = (coord.x * loc1) + color.g;
}
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct tint_symbol_1 {
+ @color(3)
+ color : vec4<f32>,
@location(1)
loc1 : f32,
@location(2) @interpolate(flat)
loc2 : vec4<u32>,
}
-fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>) {
- var col : f32 = (coord.x * loc1);
+fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>, color : vec4<f32>) {
+ var col : f32 = ((coord.x * loc1) + color.g);
}
@fragment
fn frag_main(@builtin(position) coord : vec4<f32>, tint_symbol : tint_symbol_1) {
- frag_main_inner(tint_symbol.loc1, tint_symbol.loc2, coord);
+ frag_main_inner(tint_symbol.loc1, tint_symbol.loc2, coord, tint_symbol.color);
}
)";
@@ -139,16 +153,23 @@
TEST_F(CanonicalizeEntryPointIOTest, Parameters_Hlsl) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@fragment
fn frag_main(@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
- @builtin(position) coord : vec4<f32>) {
- var col : f32 = (coord.x * loc1);
+ @builtin(position) coord : vec4<f32>,
+ @color(3) color : vec4<f32>) {
+ var col : f32 = (coord.x * loc1) + color.g;
}
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct tint_symbol_1 {
+ @color(3)
+ color : vec4<f32>,
@location(1)
loc1 : f32,
@location(2) @interpolate(flat)
@@ -157,13 +178,13 @@
coord : vec4<f32>,
}
-fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>) {
- var col : f32 = (coord.x * loc1);
+fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>, color : vec4<f32>) {
+ var col : f32 = ((coord.x * loc1) + color.g);
}
@fragment
fn frag_main(tint_symbol : tint_symbol_1) {
- frag_main_inner(tint_symbol.loc1, tint_symbol.loc2, tint_symbol.coord);
+ frag_main_inner(tint_symbol.loc1, tint_symbol.loc2, tint_symbol.coord, tint_symbol.color);
}
)";
@@ -246,6 +267,8 @@
TEST_F(CanonicalizeEntryPointIOTest, StructParameters_Spirv) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct FragBuiltins {
@builtin(position) coord : vec4<f32>,
};
@@ -253,16 +276,24 @@
@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
};
+struct FragColors {
+ @color(3) col3 : vec4<f32>,
+ @color(1) col1 : vec4<u32>,
+ @color(2) col2 : vec4<i32>,
+};
@fragment
fn frag_main(@location(0) loc0 : f32,
locations : FragLocations,
- builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+ builtins : FragBuiltins,
+ colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@location(0) @internal(disable_validation__ignore_address_space) var<__in> loc0_1 : f32;
@location(1) @internal(disable_validation__ignore_address_space) var<__in> loc1_1 : f32;
@@ -271,6 +302,12 @@
@builtin(position) @internal(disable_validation__ignore_address_space) var<__in> coord_1 : vec4<f32>;
+@color(3) @internal(disable_validation__ignore_address_space) var<__in> col3_1 : vec4<f32>;
+
+@color(1) @interpolate(flat) @internal(disable_validation__ignore_address_space) var<__in> col1_1 : vec4<u32>;
+
+@color(2) @interpolate(flat) @internal(disable_validation__ignore_address_space) var<__in> col2_1 : vec4<i32>;
+
struct FragBuiltins {
coord : vec4<f32>,
}
@@ -280,13 +317,19 @@
loc2 : vec4<u32>,
}
-fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+struct FragColors {
+ col3 : vec4<f32>,
+ col1 : vec4<u32>,
+ col2 : vec4<i32>,
+}
+
+fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins, colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
@fragment
fn frag_main() {
- frag_main_inner(loc0_1, FragLocations(loc1_1, loc2_1), FragBuiltins(coord_1));
+ frag_main_inner(loc0_1, FragLocations(loc1_1, loc2_1), FragBuiltins(coord_1), FragColors(col3_1, col1_1, col2_1));
}
)";
@@ -299,11 +342,14 @@
TEST_F(CanonicalizeEntryPointIOTest, StructParameters_Spirv_OutOfOrder) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@fragment
fn frag_main(@location(0) loc0 : f32,
locations : FragLocations,
- builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+ builtins : FragBuiltins,
+ colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
struct FragBuiltins {
@@ -313,9 +359,16 @@
@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
};
+struct FragColors {
+ @color(3) col3 : vec4<f32>,
+ @color(1) col1 : vec4<u32>,
+ @color(2) col2 : vec4<i32>,
+};
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@location(0) @internal(disable_validation__ignore_address_space) var<__in> loc0_1 : f32;
@location(1) @internal(disable_validation__ignore_address_space) var<__in> loc1_1 : f32;
@@ -324,13 +377,19 @@
@builtin(position) @internal(disable_validation__ignore_address_space) var<__in> coord_1 : vec4<f32>;
-fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+@color(3) @internal(disable_validation__ignore_address_space) var<__in> col3_1 : vec4<f32>;
+
+@color(1) @interpolate(flat) @internal(disable_validation__ignore_address_space) var<__in> col1_1 : vec4<u32>;
+
+@color(2) @interpolate(flat) @internal(disable_validation__ignore_address_space) var<__in> col2_1 : vec4<i32>;
+
+fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins, colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
@fragment
fn frag_main() {
- frag_main_inner(loc0_1, FragLocations(loc1_1, loc2_1), FragBuiltins(coord_1));
+ frag_main_inner(loc0_1, FragLocations(loc1_1, loc2_1), FragBuiltins(coord_1), FragColors(col3_1, col1_1, col2_1));
}
struct FragBuiltins {
@@ -341,6 +400,12 @@
loc1 : f32,
loc2 : vec4<u32>,
}
+
+struct FragColors {
+ col3 : vec4<f32>,
+ col1 : vec4<u32>,
+ col2 : vec4<i32>,
+}
)";
DataMap data;
@@ -352,6 +417,8 @@
TEST_F(CanonicalizeEntryPointIOTest, StructParameters_kMsl) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct FragBuiltins {
@builtin(position) coord : vec4<f32>,
};
@@ -359,16 +426,24 @@
@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
};
+struct FragColors {
+ @color(3) col3 : vec4<f32>,
+ @color(1) col1 : vec4<u32>,
+ @color(2) col2 : vec4<i32>,
+};
@fragment
fn frag_main(@location(0) loc0 : f32,
locations : FragLocations,
- builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+ builtins : FragBuiltins,
+ colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct FragBuiltins {
coord : vec4<f32>,
}
@@ -378,7 +453,19 @@
loc2 : vec4<u32>,
}
+struct FragColors {
+ col3 : vec4<f32>,
+ col1 : vec4<u32>,
+ col2 : vec4<i32>,
+}
+
struct tint_symbol_1 {
+ @color(1)
+ col1 : vec4<u32>,
+ @color(2)
+ col2 : vec4<i32>,
+ @color(3)
+ col3 : vec4<f32>,
@location(0)
loc0 : f32,
@location(1)
@@ -387,13 +474,13 @@
loc2 : vec4<u32>,
}
-fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins, colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
@fragment
fn frag_main(@builtin(position) coord : vec4<f32>, tint_symbol : tint_symbol_1) {
- frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(coord));
+ frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(coord), FragColors(tint_symbol.col3, tint_symbol.col1, tint_symbol.col2));
}
)";
@@ -406,11 +493,14 @@
TEST_F(CanonicalizeEntryPointIOTest, StructParameters_kMsl_OutOfOrder) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@fragment
fn frag_main(@location(0) loc0 : f32,
locations : FragLocations,
- builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+ builtins : FragBuiltins,
+ colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
struct FragBuiltins {
@@ -420,10 +510,23 @@
@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
};
+struct FragColors {
+ @color(3) col3 : vec4<f32>,
+ @color(1) col1 : vec4<u32>,
+ @color(2) col2 : vec4<i32>,
+};
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct tint_symbol_1 {
+ @color(1)
+ col1 : vec4<u32>,
+ @color(2)
+ col2 : vec4<i32>,
+ @color(3)
+ col3 : vec4<f32>,
@location(0)
loc0 : f32,
@location(1)
@@ -432,13 +535,13 @@
loc2 : vec4<u32>,
}
-fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins, colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
@fragment
fn frag_main(@builtin(position) coord : vec4<f32>, tint_symbol : tint_symbol_1) {
- frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(coord));
+ frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(coord), FragColors(tint_symbol.col3, tint_symbol.col1, tint_symbol.col2));
}
struct FragBuiltins {
@@ -449,6 +552,12 @@
loc1 : f32,
loc2 : vec4<u32>,
}
+
+struct FragColors {
+ col3 : vec4<f32>,
+ col1 : vec4<u32>,
+ col2 : vec4<i32>,
+}
)";
DataMap data;
@@ -460,6 +569,8 @@
TEST_F(CanonicalizeEntryPointIOTest, StructParameters_Hlsl) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct FragBuiltins {
@builtin(position) coord : vec4<f32>,
};
@@ -467,16 +578,24 @@
@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
};
+struct FragColors {
+ @color(3) col3 : vec4<f32>,
+ @color(1) col1 : vec4<u32>,
+ @color(2) col2 : vec4<i32>,
+};
@fragment
fn frag_main(@location(0) loc0 : f32,
locations : FragLocations,
- builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+ builtins : FragBuiltins,
+ colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct FragBuiltins {
coord : vec4<f32>,
}
@@ -486,7 +605,19 @@
loc2 : vec4<u32>,
}
+struct FragColors {
+ col3 : vec4<f32>,
+ col1 : vec4<u32>,
+ col2 : vec4<i32>,
+}
+
struct tint_symbol_1 {
+ @color(1)
+ col1 : vec4<u32>,
+ @color(2)
+ col2 : vec4<i32>,
+ @color(3)
+ col3 : vec4<f32>,
@location(0)
loc0 : f32,
@location(1)
@@ -497,13 +628,13 @@
coord : vec4<f32>,
}
-fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins, colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
@fragment
fn frag_main(tint_symbol : tint_symbol_1) {
- frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(tint_symbol.coord));
+ frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(tint_symbol.coord), FragColors(tint_symbol.col3, tint_symbol.col1, tint_symbol.col2));
}
)";
@@ -516,11 +647,14 @@
TEST_F(CanonicalizeEntryPointIOTest, StructParameters_Hlsl_OutOfOrder) {
auto* src = R"(
+enable chromium_experimental_framebuffer_fetch;
+
@fragment
fn frag_main(@location(0) loc0 : f32,
locations : FragLocations,
- builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+ builtins : FragBuiltins,
+ colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
struct FragBuiltins {
@@ -530,10 +664,23 @@
@location(1) loc1 : f32,
@location(2) @interpolate(flat) loc2 : vec4<u32>,
};
+struct FragColors {
+ @color(3) col3 : vec4<f32>,
+ @color(1) col1 : vec4<u32>,
+ @color(2) col2 : vec4<i32>,
+};
)";
auto* expect = R"(
+enable chromium_experimental_framebuffer_fetch;
+
struct tint_symbol_1 {
+ @color(1)
+ col1 : vec4<u32>,
+ @color(2)
+ col2 : vec4<i32>,
+ @color(3)
+ col3 : vec4<f32>,
@location(0)
loc0 : f32,
@location(1)
@@ -544,13 +691,13 @@
coord : vec4<f32>,
}
-fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
- var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
+fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins, colors : FragColors) {
+ var col : f32 = (((builtins.coord.x * locations.loc1) + loc0) + colors.col3.g);
}
@fragment
fn frag_main(tint_symbol : tint_symbol_1) {
- frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(tint_symbol.coord));
+ frag_main_inner(tint_symbol.loc0, FragLocations(tint_symbol.loc1, tint_symbol.loc2), FragBuiltins(tint_symbol.coord), FragColors(tint_symbol.col3, tint_symbol.col1, tint_symbol.col2));
}
struct FragBuiltins {
@@ -561,6 +708,12 @@
loc1 : f32,
loc2 : vec4<u32>,
}
+
+struct FragColors {
+ col3 : vec4<f32>,
+ col1 : vec4<u32>,
+ col2 : vec4<i32>,
+}
)";
DataMap data;