[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;