[wgsl-reader] Add support for sample index/mask builtins

Bug: tint:372
Change-Id: I2cbadf31f350c49ae0689d8b05f3f7a92d074efd
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/40560
Commit-Queue: James Price <jrprice@google.com>
Auto-Submit: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 708157b..957cf1a 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -128,6 +128,15 @@
   if (str == "global_invocation_id") {
     return ast::Builtin::kGlobalInvocationId;
   }
+  if (str == "sample_index") {
+    return ast::Builtin::kSampleIndex;
+  }
+  if (str == "sample_mask_in") {
+    return ast::Builtin::kSampleMaskIn;
+  }
+  if (str == "sample_mask_out") {
+    return ast::Builtin::kSampleMaskOut;
+  }
   return ast::Builtin::kNone;
 }
 
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
index 9cf65ab..d1d076f 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -112,22 +112,24 @@
 INSTANTIATE_TEST_SUITE_P(
     ParserImplTest,
     BuiltinTest,
-    testing::Values(BuiltinData{"position", ast::Builtin::kPosition},
-                    BuiltinData{"vertex_idx", ast::Builtin::kVertexIndex},
-                    BuiltinData{"vertex_index", ast::Builtin::kVertexIndex},
-                    BuiltinData{"instance_idx", ast::Builtin::kInstanceIndex},
-                    BuiltinData{"instance_index", ast::Builtin::kInstanceIndex},
-                    BuiltinData{"front_facing", ast::Builtin::kFrontFacing},
-                    BuiltinData{"frag_coord", ast::Builtin::kFragCoord},
-                    BuiltinData{"frag_depth", ast::Builtin::kFragDepth},
-                    BuiltinData{"local_invocation_id",
-                                ast::Builtin::kLocalInvocationId},
-                    BuiltinData{"local_invocation_idx",
-                                ast::Builtin::kLocalInvocationIndex},
-                    BuiltinData{"local_invocation_index",
-                                ast::Builtin::kLocalInvocationIndex},
-                    BuiltinData{"global_invocation_id",
-                                ast::Builtin::kGlobalInvocationId}));
+    testing::Values(
+        BuiltinData{"position", ast::Builtin::kPosition},
+        BuiltinData{"vertex_idx", ast::Builtin::kVertexIndex},
+        BuiltinData{"vertex_index", ast::Builtin::kVertexIndex},
+        BuiltinData{"instance_idx", ast::Builtin::kInstanceIndex},
+        BuiltinData{"instance_index", ast::Builtin::kInstanceIndex},
+        BuiltinData{"front_facing", ast::Builtin::kFrontFacing},
+        BuiltinData{"frag_coord", ast::Builtin::kFragCoord},
+        BuiltinData{"frag_depth", ast::Builtin::kFragDepth},
+        BuiltinData{"local_invocation_id", ast::Builtin::kLocalInvocationId},
+        BuiltinData{"local_invocation_idx",
+                    ast::Builtin::kLocalInvocationIndex},
+        BuiltinData{"local_invocation_index",
+                    ast::Builtin::kLocalInvocationIndex},
+        BuiltinData{"global_invocation_id", ast::Builtin::kGlobalInvocationId},
+        BuiltinData{"sample_index", ast::Builtin::kSampleIndex},
+        BuiltinData{"sample_mask_in", ast::Builtin::kSampleMaskIn},
+        BuiltinData{"sample_mask_out", ast::Builtin::kSampleMaskOut}));
 
 TEST_F(ParserImplTest, VariableDecoration_Builtin_MissingLeftParen) {
   auto p = parser("builtin position)");