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/ast/disable_validation_decoration.cc b/src/ast/disable_validation_decoration.cc
index 28adae4..0a7fda3 100644
--- a/src/ast/disable_validation_decoration.cc
+++ b/src/ast/disable_validation_decoration.cc
@@ -38,6 +38,8 @@
       return "disable_validation__ignore_storage_class";
     case DisabledValidation::kEntryPointParameter:
       return "disable_validation__entry_point_parameter";
+    case DisabledValidation::kIgnoreAtomicFunctionParameter:
+      return "disable_validation__ignore_atomic_function_parameter";
   }
   return "<invalid>";
 }
diff --git a/src/ast/disable_validation_decoration.h b/src/ast/disable_validation_decoration.h
index e2b7bb9..d1c33c6 100644
--- a/src/ast/disable_validation_decoration.h
+++ b/src/ast/disable_validation_decoration.h
@@ -37,6 +37,9 @@
   /// When applied to an entry-point function parameter, the validator will not
   /// check for entry IO decorations.
   kEntryPointParameter,
+  /// When applied to a function parameter, the validator will not
+  /// check if parameter type is atomic-free
+  kIgnoreAtomicFunctionParameter,
 };
 
 /// An internal decoration used to tell the validator to ignore specific
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;
diff --git a/src/transform/decompose_memory_access.cc b/src/transform/decompose_memory_access.cc
index 7f81894..7be526a 100644
--- a/src/transform/decompose_memory_access.cc
+++ b/src/transform/decompose_memory_access.cc
@@ -475,6 +475,10 @@
     return utils::GetOrCreate(
         load_funcs, LoadStoreKey{storage_class, buf_ty, el_ty}, [&] {
           auto* buf_ast_ty = CreateASTTypeFor(&ctx, buf_ty);
+          auto* disable_validation =
+              ctx.dst->ASTNodes().Create<ast::DisableValidationDecoration>(
+                  ctx.dst->ID(),
+                  ast::DisabledValidation::kIgnoreAtomicFunctionParameter);
 
           ast::VariableList params = {
               // Note: The buffer parameter requires the StorageClass in
@@ -483,7 +487,7 @@
               ctx.dst->create<ast::Variable>(
                   ctx.dst->Sym("buffer"), storage_class,
                   var_user->Variable()->Access(), buf_ast_ty, true, nullptr,
-                  ast::DecorationList{}),
+                  ast::DecorationList{disable_validation}),
               ctx.dst->Param("offset", ctx.dst->ty.u32()),
           };
 
@@ -560,13 +564,18 @@
         store_funcs, LoadStoreKey{storage_class, buf_ty, el_ty}, [&] {
           auto* buf_ast_ty = CreateASTTypeFor(&ctx, buf_ty);
           auto* el_ast_ty = CreateASTTypeFor(&ctx, el_ty);
+          auto* disable_validation =
+              ctx.dst->ASTNodes().Create<ast::DisableValidationDecoration>(
+                  ctx.dst->ID(),
+                  ast::DisabledValidation::kIgnoreAtomicFunctionParameter);
           ast::VariableList params{
               // Note: The buffer parameter requires the StorageClass in
               // order for HLSL to emit this as a ByteAddressBuffer.
+
               ctx.dst->create<ast::Variable>(
                   ctx.dst->Sym("buffer"), storage_class,
                   var_user->Variable()->Access(), buf_ast_ty, true, nullptr,
-                  ast::DecorationList{}),
+                  ast::DecorationList{disable_validation}),
               ctx.dst->Param("offset", ctx.dst->ty.u32()),
               ctx.dst->Param("value", el_ast_ty),
           };
@@ -650,7 +659,10 @@
     auto op = intrinsic->Type();
     return utils::GetOrCreate(atomic_funcs, AtomicKey{buf_ty, el_ty, op}, [&] {
       auto* buf_ast_ty = CreateASTTypeFor(&ctx, buf_ty);
-
+      auto* disable_validation =
+          ctx.dst->ASTNodes().Create<ast::DisableValidationDecoration>(
+              ctx.dst->ID(),
+              ast::DisabledValidation::kIgnoreAtomicFunctionParameter);
       // The first parameter to all WGSL atomics is the expression to the
       // atomic. This is replaced with two parameters: the buffer and offset.
 
@@ -660,7 +672,7 @@
           ctx.dst->create<ast::Variable>(
               ctx.dst->Sym("buffer"), ast::StorageClass::kStorage,
               var_user->Variable()->Access(), buf_ast_ty, true, nullptr,
-              ast::DecorationList{}),
+              ast::DecorationList{disable_validation}),
           ctx.dst->Param("offset", ctx.dst->ty.u32()),
       };
 
diff --git a/src/transform/decompose_memory_access_test.cc b/src/transform/decompose_memory_access_test.cc
index 5d5d91b..a3c7113 100644
--- a/src/transform/decompose_memory_access_test.cc
+++ b/src/transform/decompose_memory_access_test.cc
@@ -107,78 +107,78 @@
 };
 
 [[internal(intrinsic_load_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32) -> i32
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> i32
 
 [[internal(intrinsic_load_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_1(buffer : SB, offset : u32) -> u32
+fn tint_symbol_1([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> u32
 
 [[internal(intrinsic_load_storage_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_2(buffer : SB, offset : u32) -> f32
+fn tint_symbol_2([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> f32
 
 [[internal(intrinsic_load_storage_vec2_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_3(buffer : SB, offset : u32) -> vec2<i32>
+fn tint_symbol_3([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec2<i32>
 
 [[internal(intrinsic_load_storage_vec2_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_4(buffer : SB, offset : u32) -> vec2<u32>
+fn tint_symbol_4([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec2<u32>
 
 [[internal(intrinsic_load_storage_vec2_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_5(buffer : SB, offset : u32) -> vec2<f32>
+fn tint_symbol_5([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec2<f32>
 
 [[internal(intrinsic_load_storage_vec3_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_6(buffer : SB, offset : u32) -> vec3<i32>
+fn tint_symbol_6([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec3<i32>
 
 [[internal(intrinsic_load_storage_vec3_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_7(buffer : SB, offset : u32) -> vec3<u32>
+fn tint_symbol_7([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec3<u32>
 
 [[internal(intrinsic_load_storage_vec3_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_8(buffer : SB, offset : u32) -> vec3<f32>
+fn tint_symbol_8([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec3<f32>
 
 [[internal(intrinsic_load_storage_vec4_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_9(buffer : SB, offset : u32) -> vec4<i32>
+fn tint_symbol_9([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec4<i32>
 
 [[internal(intrinsic_load_storage_vec4_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_10(buffer : SB, offset : u32) -> vec4<u32>
+fn tint_symbol_10([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec4<u32>
 
 [[internal(intrinsic_load_storage_vec4_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_11(buffer : SB, offset : u32) -> vec4<f32>
+fn tint_symbol_11([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec4<f32>
 
-fn tint_symbol_12(buffer : SB, offset : u32) -> mat2x2<f32> {
+fn tint_symbol_12([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat2x2<f32> {
   return mat2x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)));
 }
 
-fn tint_symbol_13(buffer : SB, offset : u32) -> mat2x3<f32> {
+fn tint_symbol_13([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat2x3<f32> {
   return mat2x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_14(buffer : SB, offset : u32) -> mat2x4<f32> {
+fn tint_symbol_14([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat2x4<f32> {
   return mat2x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_15(buffer : SB, offset : u32) -> mat3x2<f32> {
+fn tint_symbol_15([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat3x2<f32> {
   return mat3x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)), tint_symbol_5(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_16(buffer : SB, offset : u32) -> mat3x3<f32> {
+fn tint_symbol_16([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat3x3<f32> {
   return mat3x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 32u)));
 }
 
-fn tint_symbol_17(buffer : SB, offset : u32) -> mat3x4<f32> {
+fn tint_symbol_17([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat3x4<f32> {
   return mat3x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)), tint_symbol_11(buffer, (offset + 32u)));
 }
 
-fn tint_symbol_18(buffer : SB, offset : u32) -> mat4x2<f32> {
+fn tint_symbol_18([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat4x2<f32> {
   return mat4x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)), tint_symbol_5(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 24u)));
 }
 
-fn tint_symbol_19(buffer : SB, offset : u32) -> mat4x3<f32> {
+fn tint_symbol_19([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat4x3<f32> {
   return mat4x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 32u)), tint_symbol_8(buffer, (offset + 48u)));
 }
 
-fn tint_symbol_20(buffer : SB, offset : u32) -> mat4x4<f32> {
+fn tint_symbol_20([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat4x4<f32> {
   return mat4x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)), tint_symbol_11(buffer, (offset + 32u)), tint_symbol_11(buffer, (offset + 48u)));
 }
 
-fn tint_symbol_21(buffer : SB, offset : u32) -> array<vec3<f32>, 2> {
+fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> array<vec3<f32>, 2> {
   return array<vec3<f32>, 2>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)));
 }
 
@@ -301,78 +301,78 @@
 };
 
 [[internal(intrinsic_load_uniform_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : UB, offset : u32) -> i32
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> i32
 
 [[internal(intrinsic_load_uniform_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_1(buffer : UB, offset : u32) -> u32
+fn tint_symbol_1([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> u32
 
 [[internal(intrinsic_load_uniform_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_2(buffer : UB, offset : u32) -> f32
+fn tint_symbol_2([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> f32
 
 [[internal(intrinsic_load_uniform_vec2_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_3(buffer : UB, offset : u32) -> vec2<i32>
+fn tint_symbol_3([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec2<i32>
 
 [[internal(intrinsic_load_uniform_vec2_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_4(buffer : UB, offset : u32) -> vec2<u32>
+fn tint_symbol_4([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec2<u32>
 
 [[internal(intrinsic_load_uniform_vec2_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_5(buffer : UB, offset : u32) -> vec2<f32>
+fn tint_symbol_5([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec2<f32>
 
 [[internal(intrinsic_load_uniform_vec3_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_6(buffer : UB, offset : u32) -> vec3<i32>
+fn tint_symbol_6([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec3<i32>
 
 [[internal(intrinsic_load_uniform_vec3_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_7(buffer : UB, offset : u32) -> vec3<u32>
+fn tint_symbol_7([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec3<u32>
 
 [[internal(intrinsic_load_uniform_vec3_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_8(buffer : UB, offset : u32) -> vec3<f32>
+fn tint_symbol_8([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec3<f32>
 
 [[internal(intrinsic_load_uniform_vec4_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_9(buffer : UB, offset : u32) -> vec4<i32>
+fn tint_symbol_9([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec4<i32>
 
 [[internal(intrinsic_load_uniform_vec4_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_10(buffer : UB, offset : u32) -> vec4<u32>
+fn tint_symbol_10([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec4<u32>
 
 [[internal(intrinsic_load_uniform_vec4_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_11(buffer : UB, offset : u32) -> vec4<f32>
+fn tint_symbol_11([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> vec4<f32>
 
-fn tint_symbol_12(buffer : UB, offset : u32) -> mat2x2<f32> {
+fn tint_symbol_12([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat2x2<f32> {
   return mat2x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)));
 }
 
-fn tint_symbol_13(buffer : UB, offset : u32) -> mat2x3<f32> {
+fn tint_symbol_13([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat2x3<f32> {
   return mat2x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_14(buffer : UB, offset : u32) -> mat2x4<f32> {
+fn tint_symbol_14([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat2x4<f32> {
   return mat2x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_15(buffer : UB, offset : u32) -> mat3x2<f32> {
+fn tint_symbol_15([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat3x2<f32> {
   return mat3x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)), tint_symbol_5(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_16(buffer : UB, offset : u32) -> mat3x3<f32> {
+fn tint_symbol_16([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat3x3<f32> {
   return mat3x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 32u)));
 }
 
-fn tint_symbol_17(buffer : UB, offset : u32) -> mat3x4<f32> {
+fn tint_symbol_17([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat3x4<f32> {
   return mat3x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)), tint_symbol_11(buffer, (offset + 32u)));
 }
 
-fn tint_symbol_18(buffer : UB, offset : u32) -> mat4x2<f32> {
+fn tint_symbol_18([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat4x2<f32> {
   return mat4x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)), tint_symbol_5(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 24u)));
 }
 
-fn tint_symbol_19(buffer : UB, offset : u32) -> mat4x3<f32> {
+fn tint_symbol_19([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat4x3<f32> {
   return mat4x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 32u)), tint_symbol_8(buffer, (offset + 48u)));
 }
 
-fn tint_symbol_20(buffer : UB, offset : u32) -> mat4x4<f32> {
+fn tint_symbol_20([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> mat4x4<f32> {
   return mat4x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)), tint_symbol_11(buffer, (offset + 32u)), tint_symbol_11(buffer, (offset + 48u)));
 }
 
-fn tint_symbol_21(buffer : UB, offset : u32) -> array<vec3<f32>, 2> {
+fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : UB, offset : u32) -> array<vec3<f32>, 2> {
   return array<vec3<f32>, 2>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)));
 }
 
@@ -495,96 +495,96 @@
 };
 
 [[internal(intrinsic_store_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32, value : i32)
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : i32)
 
 [[internal(intrinsic_store_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_1(buffer : SB, offset : u32, value : u32)
+fn tint_symbol_1([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : u32)
 
 [[internal(intrinsic_store_storage_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_2(buffer : SB, offset : u32, value : f32)
+fn tint_symbol_2([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : f32)
 
 [[internal(intrinsic_store_storage_vec2_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_3(buffer : SB, offset : u32, value : vec2<i32>)
+fn tint_symbol_3([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec2<i32>)
 
 [[internal(intrinsic_store_storage_vec2_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_4(buffer : SB, offset : u32, value : vec2<u32>)
+fn tint_symbol_4([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec2<u32>)
 
 [[internal(intrinsic_store_storage_vec2_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_5(buffer : SB, offset : u32, value : vec2<f32>)
+fn tint_symbol_5([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec2<f32>)
 
 [[internal(intrinsic_store_storage_vec3_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_6(buffer : SB, offset : u32, value : vec3<i32>)
+fn tint_symbol_6([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec3<i32>)
 
 [[internal(intrinsic_store_storage_vec3_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_7(buffer : SB, offset : u32, value : vec3<u32>)
+fn tint_symbol_7([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec3<u32>)
 
 [[internal(intrinsic_store_storage_vec3_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_8(buffer : SB, offset : u32, value : vec3<f32>)
+fn tint_symbol_8([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec3<f32>)
 
 [[internal(intrinsic_store_storage_vec4_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_9(buffer : SB, offset : u32, value : vec4<i32>)
+fn tint_symbol_9([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec4<i32>)
 
 [[internal(intrinsic_store_storage_vec4_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_10(buffer : SB, offset : u32, value : vec4<u32>)
+fn tint_symbol_10([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec4<u32>)
 
 [[internal(intrinsic_store_storage_vec4_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_11(buffer : SB, offset : u32, value : vec4<f32>)
+fn tint_symbol_11([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec4<f32>)
 
-fn tint_symbol_12(buffer : SB, offset : u32, value : mat2x2<f32>) {
+fn tint_symbol_12([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat2x2<f32>) {
   tint_symbol_5(buffer, (offset + 0u), value[0u]);
   tint_symbol_5(buffer, (offset + 8u), value[1u]);
 }
 
-fn tint_symbol_13(buffer : SB, offset : u32, value : mat2x3<f32>) {
+fn tint_symbol_13([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat2x3<f32>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
 }
 
-fn tint_symbol_14(buffer : SB, offset : u32, value : mat2x4<f32>) {
+fn tint_symbol_14([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat2x4<f32>) {
   tint_symbol_11(buffer, (offset + 0u), value[0u]);
   tint_symbol_11(buffer, (offset + 16u), value[1u]);
 }
 
-fn tint_symbol_15(buffer : SB, offset : u32, value : mat3x2<f32>) {
+fn tint_symbol_15([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat3x2<f32>) {
   tint_symbol_5(buffer, (offset + 0u), value[0u]);
   tint_symbol_5(buffer, (offset + 8u), value[1u]);
   tint_symbol_5(buffer, (offset + 16u), value[2u]);
 }
 
-fn tint_symbol_16(buffer : SB, offset : u32, value : mat3x3<f32>) {
+fn tint_symbol_16([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat3x3<f32>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
   tint_symbol_8(buffer, (offset + 32u), value[2u]);
 }
 
-fn tint_symbol_17(buffer : SB, offset : u32, value : mat3x4<f32>) {
+fn tint_symbol_17([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat3x4<f32>) {
   tint_symbol_11(buffer, (offset + 0u), value[0u]);
   tint_symbol_11(buffer, (offset + 16u), value[1u]);
   tint_symbol_11(buffer, (offset + 32u), value[2u]);
 }
 
-fn tint_symbol_18(buffer : SB, offset : u32, value : mat4x2<f32>) {
+fn tint_symbol_18([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat4x2<f32>) {
   tint_symbol_5(buffer, (offset + 0u), value[0u]);
   tint_symbol_5(buffer, (offset + 8u), value[1u]);
   tint_symbol_5(buffer, (offset + 16u), value[2u]);
   tint_symbol_5(buffer, (offset + 24u), value[3u]);
 }
 
-fn tint_symbol_19(buffer : SB, offset : u32, value : mat4x3<f32>) {
+fn tint_symbol_19([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat4x3<f32>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
   tint_symbol_8(buffer, (offset + 32u), value[2u]);
   tint_symbol_8(buffer, (offset + 48u), value[3u]);
 }
 
-fn tint_symbol_20(buffer : SB, offset : u32, value : mat4x4<f32>) {
+fn tint_symbol_20([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat4x4<f32>) {
   tint_symbol_11(buffer, (offset + 0u), value[0u]);
   tint_symbol_11(buffer, (offset + 16u), value[1u]);
   tint_symbol_11(buffer, (offset + 32u), value[2u]);
   tint_symbol_11(buffer, (offset + 48u), value[3u]);
 }
 
-fn tint_symbol_21(buffer : SB, offset : u32, value : array<vec3<f32>, 2>) {
+fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : array<vec3<f32>, 2>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
 }
@@ -687,82 +687,82 @@
 };
 
 [[internal(intrinsic_load_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32) -> i32
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> i32
 
 [[internal(intrinsic_load_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_1(buffer : SB, offset : u32) -> u32
+fn tint_symbol_1([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> u32
 
 [[internal(intrinsic_load_storage_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_2(buffer : SB, offset : u32) -> f32
+fn tint_symbol_2([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> f32
 
 [[internal(intrinsic_load_storage_vec2_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_3(buffer : SB, offset : u32) -> vec2<i32>
+fn tint_symbol_3([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec2<i32>
 
 [[internal(intrinsic_load_storage_vec2_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_4(buffer : SB, offset : u32) -> vec2<u32>
+fn tint_symbol_4([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec2<u32>
 
 [[internal(intrinsic_load_storage_vec2_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_5(buffer : SB, offset : u32) -> vec2<f32>
+fn tint_symbol_5([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec2<f32>
 
 [[internal(intrinsic_load_storage_vec3_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_6(buffer : SB, offset : u32) -> vec3<i32>
+fn tint_symbol_6([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec3<i32>
 
 [[internal(intrinsic_load_storage_vec3_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_7(buffer : SB, offset : u32) -> vec3<u32>
+fn tint_symbol_7([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec3<u32>
 
 [[internal(intrinsic_load_storage_vec3_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_8(buffer : SB, offset : u32) -> vec3<f32>
+fn tint_symbol_8([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec3<f32>
 
 [[internal(intrinsic_load_storage_vec4_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_9(buffer : SB, offset : u32) -> vec4<i32>
+fn tint_symbol_9([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec4<i32>
 
 [[internal(intrinsic_load_storage_vec4_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_10(buffer : SB, offset : u32) -> vec4<u32>
+fn tint_symbol_10([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec4<u32>
 
 [[internal(intrinsic_load_storage_vec4_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_11(buffer : SB, offset : u32) -> vec4<f32>
+fn tint_symbol_11([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> vec4<f32>
 
-fn tint_symbol_12(buffer : SB, offset : u32) -> mat2x2<f32> {
+fn tint_symbol_12([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat2x2<f32> {
   return mat2x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)));
 }
 
-fn tint_symbol_13(buffer : SB, offset : u32) -> mat2x3<f32> {
+fn tint_symbol_13([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat2x3<f32> {
   return mat2x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_14(buffer : SB, offset : u32) -> mat2x4<f32> {
+fn tint_symbol_14([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat2x4<f32> {
   return mat2x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_15(buffer : SB, offset : u32) -> mat3x2<f32> {
+fn tint_symbol_15([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat3x2<f32> {
   return mat3x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)), tint_symbol_5(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_16(buffer : SB, offset : u32) -> mat3x3<f32> {
+fn tint_symbol_16([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat3x3<f32> {
   return mat3x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 32u)));
 }
 
-fn tint_symbol_17(buffer : SB, offset : u32) -> mat3x4<f32> {
+fn tint_symbol_17([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat3x4<f32> {
   return mat3x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)), tint_symbol_11(buffer, (offset + 32u)));
 }
 
-fn tint_symbol_18(buffer : SB, offset : u32) -> mat4x2<f32> {
+fn tint_symbol_18([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat4x2<f32> {
   return mat4x2<f32>(tint_symbol_5(buffer, (offset + 0u)), tint_symbol_5(buffer, (offset + 8u)), tint_symbol_5(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 24u)));
 }
 
-fn tint_symbol_19(buffer : SB, offset : u32) -> mat4x3<f32> {
+fn tint_symbol_19([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat4x3<f32> {
   return mat4x3<f32>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)), tint_symbol_8(buffer, (offset + 32u)), tint_symbol_8(buffer, (offset + 48u)));
 }
 
-fn tint_symbol_20(buffer : SB, offset : u32) -> mat4x4<f32> {
+fn tint_symbol_20([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> mat4x4<f32> {
   return mat4x4<f32>(tint_symbol_11(buffer, (offset + 0u)), tint_symbol_11(buffer, (offset + 16u)), tint_symbol_11(buffer, (offset + 32u)), tint_symbol_11(buffer, (offset + 48u)));
 }
 
-fn tint_symbol_21(buffer : SB, offset : u32) -> array<vec3<f32>, 2> {
+fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> array<vec3<f32>, 2> {
   return array<vec3<f32>, 2>(tint_symbol_8(buffer, (offset + 0u)), tint_symbol_8(buffer, (offset + 16u)));
 }
 
-fn tint_symbol_22(buffer : SB, offset : u32) -> SB {
+fn tint_symbol_22([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> SB {
   return SB(tint_symbol(buffer, (offset + 0u)), tint_symbol_1(buffer, (offset + 4u)), tint_symbol_2(buffer, (offset + 8u)), tint_symbol_3(buffer, (offset + 16u)), tint_symbol_4(buffer, (offset + 24u)), tint_symbol_5(buffer, (offset + 32u)), tint_symbol_6(buffer, (offset + 48u)), tint_symbol_7(buffer, (offset + 64u)), tint_symbol_8(buffer, (offset + 80u)), tint_symbol_9(buffer, (offset + 96u)), tint_symbol_10(buffer, (offset + 112u)), tint_symbol_11(buffer, (offset + 128u)), tint_symbol_12(buffer, (offset + 144u)), tint_symbol_13(buffer, (offset + 160u)), tint_symbol_14(buffer, (offset + 192u)), tint_symbol_15(buffer, (offset + 224u)), tint_symbol_16(buffer, (offset + 256u)), tint_symbol_17(buffer, (offset + 304u)), tint_symbol_18(buffer, (offset + 352u)), tint_symbol_19(buffer, (offset + 384u)), tint_symbol_20(buffer, (offset + 448u)), tint_symbol_21(buffer, (offset + 512u)));
 }
 
@@ -843,101 +843,101 @@
 };
 
 [[internal(intrinsic_store_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32, value : i32)
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : i32)
 
 [[internal(intrinsic_store_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_1(buffer : SB, offset : u32, value : u32)
+fn tint_symbol_1([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : u32)
 
 [[internal(intrinsic_store_storage_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_2(buffer : SB, offset : u32, value : f32)
+fn tint_symbol_2([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : f32)
 
 [[internal(intrinsic_store_storage_vec2_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_3(buffer : SB, offset : u32, value : vec2<i32>)
+fn tint_symbol_3([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec2<i32>)
 
 [[internal(intrinsic_store_storage_vec2_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_4(buffer : SB, offset : u32, value : vec2<u32>)
+fn tint_symbol_4([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec2<u32>)
 
 [[internal(intrinsic_store_storage_vec2_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_5(buffer : SB, offset : u32, value : vec2<f32>)
+fn tint_symbol_5([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec2<f32>)
 
 [[internal(intrinsic_store_storage_vec3_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_6(buffer : SB, offset : u32, value : vec3<i32>)
+fn tint_symbol_6([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec3<i32>)
 
 [[internal(intrinsic_store_storage_vec3_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_7(buffer : SB, offset : u32, value : vec3<u32>)
+fn tint_symbol_7([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec3<u32>)
 
 [[internal(intrinsic_store_storage_vec3_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_8(buffer : SB, offset : u32, value : vec3<f32>)
+fn tint_symbol_8([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec3<f32>)
 
 [[internal(intrinsic_store_storage_vec4_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_9(buffer : SB, offset : u32, value : vec4<i32>)
+fn tint_symbol_9([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec4<i32>)
 
 [[internal(intrinsic_store_storage_vec4_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_10(buffer : SB, offset : u32, value : vec4<u32>)
+fn tint_symbol_10([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec4<u32>)
 
 [[internal(intrinsic_store_storage_vec4_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_11(buffer : SB, offset : u32, value : vec4<f32>)
+fn tint_symbol_11([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : vec4<f32>)
 
-fn tint_symbol_12(buffer : SB, offset : u32, value : mat2x2<f32>) {
+fn tint_symbol_12([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat2x2<f32>) {
   tint_symbol_5(buffer, (offset + 0u), value[0u]);
   tint_symbol_5(buffer, (offset + 8u), value[1u]);
 }
 
-fn tint_symbol_13(buffer : SB, offset : u32, value : mat2x3<f32>) {
+fn tint_symbol_13([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat2x3<f32>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
 }
 
-fn tint_symbol_14(buffer : SB, offset : u32, value : mat2x4<f32>) {
+fn tint_symbol_14([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat2x4<f32>) {
   tint_symbol_11(buffer, (offset + 0u), value[0u]);
   tint_symbol_11(buffer, (offset + 16u), value[1u]);
 }
 
-fn tint_symbol_15(buffer : SB, offset : u32, value : mat3x2<f32>) {
+fn tint_symbol_15([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat3x2<f32>) {
   tint_symbol_5(buffer, (offset + 0u), value[0u]);
   tint_symbol_5(buffer, (offset + 8u), value[1u]);
   tint_symbol_5(buffer, (offset + 16u), value[2u]);
 }
 
-fn tint_symbol_16(buffer : SB, offset : u32, value : mat3x3<f32>) {
+fn tint_symbol_16([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat3x3<f32>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
   tint_symbol_8(buffer, (offset + 32u), value[2u]);
 }
 
-fn tint_symbol_17(buffer : SB, offset : u32, value : mat3x4<f32>) {
+fn tint_symbol_17([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat3x4<f32>) {
   tint_symbol_11(buffer, (offset + 0u), value[0u]);
   tint_symbol_11(buffer, (offset + 16u), value[1u]);
   tint_symbol_11(buffer, (offset + 32u), value[2u]);
 }
 
-fn tint_symbol_18(buffer : SB, offset : u32, value : mat4x2<f32>) {
+fn tint_symbol_18([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat4x2<f32>) {
   tint_symbol_5(buffer, (offset + 0u), value[0u]);
   tint_symbol_5(buffer, (offset + 8u), value[1u]);
   tint_symbol_5(buffer, (offset + 16u), value[2u]);
   tint_symbol_5(buffer, (offset + 24u), value[3u]);
 }
 
-fn tint_symbol_19(buffer : SB, offset : u32, value : mat4x3<f32>) {
+fn tint_symbol_19([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat4x3<f32>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
   tint_symbol_8(buffer, (offset + 32u), value[2u]);
   tint_symbol_8(buffer, (offset + 48u), value[3u]);
 }
 
-fn tint_symbol_20(buffer : SB, offset : u32, value : mat4x4<f32>) {
+fn tint_symbol_20([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : mat4x4<f32>) {
   tint_symbol_11(buffer, (offset + 0u), value[0u]);
   tint_symbol_11(buffer, (offset + 16u), value[1u]);
   tint_symbol_11(buffer, (offset + 32u), value[2u]);
   tint_symbol_11(buffer, (offset + 48u), value[3u]);
 }
 
-fn tint_symbol_21(buffer : SB, offset : u32, value : array<vec3<f32>, 2>) {
+fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : array<vec3<f32>, 2>) {
   tint_symbol_8(buffer, (offset + 0u), value[0u]);
   tint_symbol_8(buffer, (offset + 16u), value[1u]);
 }
 
-fn tint_symbol_22(buffer : SB, offset : u32, value : SB) {
+fn tint_symbol_22([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, value : SB) {
   tint_symbol(buffer, (offset + 0u), value.a);
   tint_symbol_1(buffer, (offset + 4u), value.b);
   tint_symbol_2(buffer, (offset + 8u), value.c);
@@ -1032,7 +1032,7 @@
 };
 
 [[internal(intrinsic_load_storage_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32) -> f32
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> f32
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1100,7 +1100,7 @@
 };
 
 [[internal(intrinsic_load_storage_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32) -> f32
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> f32
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1187,7 +1187,7 @@
 };
 
 [[internal(intrinsic_load_storage_f32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32) -> f32
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> f32
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1251,64 +1251,64 @@
 };
 
 [[internal(intrinsic_atomic_store_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol(buffer : SB, offset : u32, param_1 : i32)
+fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32)
 
 [[internal(intrinsic_atomic_load_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_1(buffer : SB, offset : u32) -> i32
+fn tint_symbol_1([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> i32
 
 [[internal(intrinsic_atomic_add_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_2(buffer : SB, offset : u32, param_1 : i32) -> i32
+fn tint_symbol_2([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32) -> i32
 
 [[internal(intrinsic_atomic_max_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_3(buffer : SB, offset : u32, param_1 : i32) -> i32
+fn tint_symbol_3([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32) -> i32
 
 [[internal(intrinsic_atomic_min_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_4(buffer : SB, offset : u32, param_1 : i32) -> i32
+fn tint_symbol_4([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32) -> i32
 
 [[internal(intrinsic_atomic_and_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_5(buffer : SB, offset : u32, param_1 : i32) -> i32
+fn tint_symbol_5([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32) -> i32
 
 [[internal(intrinsic_atomic_or_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_6(buffer : SB, offset : u32, param_1 : i32) -> i32
+fn tint_symbol_6([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32) -> i32
 
 [[internal(intrinsic_atomic_xor_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_7(buffer : SB, offset : u32, param_1 : i32) -> i32
+fn tint_symbol_7([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32) -> i32
 
 [[internal(intrinsic_atomic_exchange_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_8(buffer : SB, offset : u32, param_1 : i32) -> i32
+fn tint_symbol_8([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32) -> i32
 
 [[internal(intrinsic_atomic_compare_exchange_weak_storage_i32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_9(buffer : SB, offset : u32, param_1 : i32, param_2 : i32) -> vec2<i32>
+fn tint_symbol_9([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : i32, param_2 : i32) -> vec2<i32>
 
 [[internal(intrinsic_atomic_store_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_10(buffer : SB, offset : u32, param_1 : u32)
+fn tint_symbol_10([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32)
 
 [[internal(intrinsic_atomic_load_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_11(buffer : SB, offset : u32) -> u32
+fn tint_symbol_11([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32) -> u32
 
 [[internal(intrinsic_atomic_add_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_12(buffer : SB, offset : u32, param_1 : u32) -> u32
+fn tint_symbol_12([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32) -> u32
 
 [[internal(intrinsic_atomic_max_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_13(buffer : SB, offset : u32, param_1 : u32) -> u32
+fn tint_symbol_13([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32) -> u32
 
 [[internal(intrinsic_atomic_min_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_14(buffer : SB, offset : u32, param_1 : u32) -> u32
+fn tint_symbol_14([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32) -> u32
 
 [[internal(intrinsic_atomic_and_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_15(buffer : SB, offset : u32, param_1 : u32) -> u32
+fn tint_symbol_15([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32) -> u32
 
 [[internal(intrinsic_atomic_or_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_16(buffer : SB, offset : u32, param_1 : u32) -> u32
+fn tint_symbol_16([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32) -> u32
 
 [[internal(intrinsic_atomic_xor_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_17(buffer : SB, offset : u32, param_1 : u32) -> u32
+fn tint_symbol_17([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32) -> u32
 
 [[internal(intrinsic_atomic_exchange_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_18(buffer : SB, offset : u32, param_1 : u32) -> u32
+fn tint_symbol_18([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32) -> u32
 
 [[internal(intrinsic_atomic_compare_exchange_weak_storage_u32), internal(disable_validation__function_has_no_body)]]
-fn tint_symbol_19(buffer : SB, offset : u32, param_1 : u32, param_2 : u32) -> vec2<u32>
+fn tint_symbol_19([[internal(disable_validation__ignore_atomic_function_parameter)]] buffer : SB, offset : u32, param_1 : u32, param_2 : u32) -> vec2<u32>
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;