validation: add an internal decoration to allow atomic function parameters

Bug: tint: 927
Change-Id: Ia6f31bdbfa51c92b742faa89089649865bb45ad5
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/56020
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index 0a083b0..d16c958 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -932,8 +932,12 @@
   if (!ValidateVariable(info)) {
     return false;
   }
+
   for (auto* deco : info->declaration->decorations()) {
-    if (!func->IsEntryPoint()) {
+    if (!func->IsEntryPoint() &&
+        !IsValidationDisabled(
+            info->declaration->decorations(),
+            ast::DisabledValidation::kIgnoreAtomicFunctionParameter)) {
       AddError("decoration is not valid for function parameters",
                deco->source());
       return false;
@@ -945,9 +949,12 @@
       }
     } else if (!deco->IsAnyOf<ast::LocationDecoration,
                               ast::InternalDecoration>() &&
-               !IsValidationDisabled(
-                   info->declaration->decorations(),
-                   ast::DisabledValidation::kEntryPointParameter)) {
+               !(IsValidationDisabled(
+                     info->declaration->decorations(),
+                     ast::DisabledValidation::kEntryPointParameter) ||
+                 IsValidationDisabled(info->declaration->decorations(),
+                                      ast::DisabledValidation::
+                                          kIgnoreAtomicFunctionParameter))) {
       AddError("decoration is not valid for function parameters",
                deco->source());
       return false;