Implemement const-eval for some pack routines.

This CL adds const-eval for pack2x16snorm, pack2x16unorm,
pack4x8snorm and pack4x8unorm.

Bug: tint:1581
Change-Id: I58d8f02da32a6a173ca54ee5110ca7be39e2c52f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/108466
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def
index 0789c7c..729787a 100644
--- a/src/tint/intrinsics.def
+++ b/src/tint/intrinsics.def
@@ -508,10 +508,10 @@
 fn modf<N: num, T: f32_f16>(vec<N, T>) -> __modf_result_vec<N, T>
 fn normalize<N: num, T: f32_f16>(vec<N, T>) -> vec<N, T>
 fn pack2x16float(vec2<f32>) -> u32
-fn pack2x16snorm(vec2<f32>) -> u32
-fn pack2x16unorm(vec2<f32>) -> u32
-fn pack4x8snorm(vec4<f32>) -> u32
-fn pack4x8unorm(vec4<f32>) -> u32
+@const fn pack2x16snorm(vec2<f32>) -> u32
+@const fn pack2x16unorm(vec2<f32>) -> u32
+@const fn pack4x8snorm(vec4<f32>) -> u32
+@const fn pack4x8unorm(vec4<f32>) -> u32
 fn pow<T: f32_f16>(T, T) -> T
 fn pow<N: num, T: f32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
 @const fn quantizeToF16(f32) -> f32
diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc
index afb9f5d..dc026d5 100644
--- a/src/tint/resolver/const_eval.cc
+++ b/src/tint/resolver/const_eval.cc
@@ -37,6 +37,7 @@
 #include "src/tint/sem/type_initializer.h"
 #include "src/tint/sem/u32.h"
 #include "src/tint/sem/vector.h"
+#include "src/tint/utils/bitcast.h"
 #include "src/tint/utils/compiler_macros.h"
 #include "src/tint/utils/map.h"
 #include "src/tint/utils/scoped_assignment.h"
@@ -793,6 +794,20 @@
     return r;
 }
 
+template <typename NumberT>
+utils::Result<NumberT> ConstEval::Clamp(NumberT e, NumberT low, NumberT high) {
+    return NumberT{std::min(std::max(e, low), high)};
+}
+
+auto ConstEval::ClampFunc(const sem::Type* elem_ty) {
+    return [=](auto e, auto low, auto high) -> ImplResult {
+        if (auto r = Clamp(e, low, high)) {
+            return CreateElement(builder, elem_ty, r.Get());
+        }
+        return utils::Failure;
+    };
+}
+
 auto ConstEval::AddFunc(const sem::Type* elem_ty) {
     return [=](auto a1, auto a2) -> ImplResult {
         if (auto r = Add(a1, a2)) {
@@ -1727,11 +1742,7 @@
                                    const Source&) {
     auto transform = [&](const sem::Constant* c0, const sem::Constant* c1,
                          const sem::Constant* c2) {
-        auto create = [&](auto e, auto low, auto high) {
-            return CreateElement(builder, c0->Type(),
-                                 decltype(e)(std::min(std::max(e, low), high)));
-        };
-        return Dispatch_fia_fiu32_f16(create, c0, c1, c2);
+        return Dispatch_fia_fiu32_f16(ClampFunc(c0->Type()), c0, c1, c2);
     };
     return TransformElements(builder, ty, transform, args[0], args[1], args[2]);
 }
@@ -1979,6 +1990,78 @@
     return TransformElements(builder, ty, transform, args[0], args[1]);
 }
 
+ConstEval::Result ConstEval::pack2x16snorm(const sem::Type* ty,
+                                           utils::VectorRef<const sem::Constant*> args,
+                                           const Source&) {
+    auto calc = [&](f32 val) -> u32 {
+        auto clamped = Clamp(val, f32(-1.0f), f32(1.0f)).Get();
+        return u32(utils::Bitcast<uint16_t>(
+            static_cast<int16_t>(std::floor(0.5f + (32767.0f * clamped)))));
+    };
+
+    auto* e = args[0];
+    auto e0 = calc(e->Index(0)->As<f32>());
+    auto e1 = calc(e->Index(1)->As<f32>());
+
+    u32 ret = u32((e0 & 0x0000'ffff) | (e1 << 16));
+    return CreateElement(builder, ty, ret);
+}
+
+ConstEval::Result ConstEval::pack2x16unorm(const sem::Type* ty,
+                                           utils::VectorRef<const sem::Constant*> args,
+                                           const Source&) {
+    auto calc = [&](f32 val) -> u32 {
+        auto clamped = Clamp(val, f32(0.0f), f32(1.0f)).Get();
+        return u32{std::floor(0.5f + (65535.0f * clamped))};
+    };
+
+    auto* e = args[0];
+    auto e0 = calc(e->Index(0)->As<f32>());
+    auto e1 = calc(e->Index(1)->As<f32>());
+
+    u32 ret = u32((e0 & 0x0000'ffff) | (e1 << 16));
+    return CreateElement(builder, ty, ret);
+}
+
+ConstEval::Result ConstEval::pack4x8snorm(const sem::Type* ty,
+                                          utils::VectorRef<const sem::Constant*> args,
+                                          const Source&) {
+    auto calc = [&](f32 val) -> u32 {
+        auto clamped = Clamp(val, f32(-1.0f), f32(1.0f)).Get();
+        return u32(
+            utils::Bitcast<uint8_t>(static_cast<int8_t>(std::floor(0.5f + (127.0f * clamped)))));
+    };
+
+    auto* e = args[0];
+    auto e0 = calc(e->Index(0)->As<f32>());
+    auto e1 = calc(e->Index(1)->As<f32>());
+    auto e2 = calc(e->Index(2)->As<f32>());
+    auto e3 = calc(e->Index(3)->As<f32>());
+
+    uint32_t mask = 0x0000'00ff;
+    u32 ret = u32((e0 & mask) | ((e1 & mask) << 8) | ((e2 & mask) << 16) | ((e3 & mask) << 24));
+    return CreateElement(builder, ty, ret);
+}
+
+ConstEval::Result ConstEval::pack4x8unorm(const sem::Type* ty,
+                                          utils::VectorRef<const sem::Constant*> args,
+                                          const Source&) {
+    auto calc = [&](f32 val) -> u32 {
+        auto clamped = Clamp(val, f32(0.0f), f32(1.0f)).Get();
+        return u32{std::floor(0.5f + (255.0f * clamped))};
+    };
+
+    auto* e = args[0];
+    auto e0 = calc(e->Index(0)->As<f32>());
+    auto e1 = calc(e->Index(1)->As<f32>());
+    auto e2 = calc(e->Index(2)->As<f32>());
+    auto e3 = calc(e->Index(3)->As<f32>());
+
+    uint32_t mask = 0x0000'00ff;
+    u32 ret = u32((e0 & mask) | ((e1 & mask) << 8) | ((e2 & mask) << 16) | ((e3 & mask) << 24));
+    return CreateElement(builder, ty, ret);
+}
+
 ConstEval::Result ConstEval::reverseBits(const sem::Type* ty,
                                          utils::VectorRef<const sem::Constant*> args,
                                          const Source&) {
diff --git a/src/tint/resolver/const_eval.h b/src/tint/resolver/const_eval.h
index f309150..34adc06 100644
--- a/src/tint/resolver/const_eval.h
+++ b/src/tint/resolver/const_eval.h
@@ -548,6 +548,42 @@
                       utils::VectorRef<const sem::Constant*> args,
                       const Source& source);
 
+    /// pack2x16snorm builtin
+    /// @param ty the expression type
+    /// @param args the input arguments
+    /// @param source the source location of the conversion
+    /// @return the result value, or null if the value cannot be calculated
+    Result pack2x16snorm(const sem::Type* ty,
+                         utils::VectorRef<const sem::Constant*> args,
+                         const Source& source);
+
+    /// pack2x16unorm builtin
+    /// @param ty the expression type
+    /// @param args the input arguments
+    /// @param source the source location of the conversion
+    /// @return the result value, or null if the value cannot be calculated
+    Result pack2x16unorm(const sem::Type* ty,
+                         utils::VectorRef<const sem::Constant*> args,
+                         const Source& source);
+
+    /// pack4x8snorm builtin
+    /// @param ty the expression type
+    /// @param args the input arguments
+    /// @param source the source location of the conversion
+    /// @return the result value, or null if the value cannot be calculated
+    Result pack4x8snorm(const sem::Type* ty,
+                        utils::VectorRef<const sem::Constant*> args,
+                        const Source& source);
+
+    /// pack4x8unorm builtin
+    /// @param ty the expression type
+    /// @param args the input arguments
+    /// @param source the source location of the conversion
+    /// @return the result value, or null if the value cannot be calculated
+    Result pack4x8unorm(const sem::Type* ty,
+                        utils::VectorRef<const sem::Constant*> args,
+                        const Source& source);
+
     /// reverseBits builtin
     /// @param ty the expression type
     /// @param args the input arguments
@@ -677,6 +713,14 @@
                                 NumberT b3,
                                 NumberT b4);
 
+    /// Clamps e between low and high
+    /// @param e the number to clamp
+    /// @param low the lower bound
+    /// @param high the upper bound
+    /// @returns the result number on success, or logs an error and returns Failure
+    template <typename NumberT>
+    utils::Result<NumberT> Clamp(NumberT e, NumberT low, NumberT high);
+
     /// Returns a callable that calls Add, and creates a Constant with its result of type `elem_ty`
     /// if successful, or returns Failure otherwise.
     /// @param elem_ty the element type of the Constant to create on success
@@ -707,6 +751,12 @@
     /// @returns the callable function
     auto Dot4Func(const sem::Type* elem_ty);
 
+    /// Returns a callable that calls Clamp, and creates a Constant with its result of type
+    /// `elem_ty` if successful, or returns Failure otherwise.
+    /// @param elem_ty the element type of the Constant to create on success
+    /// @returns the callable function
+    auto ClampFunc(const sem::Type* elem_ty);
+
     ProgramBuilder& builder;
     const Source* current_source = nullptr;
 };
diff --git a/src/tint/resolver/const_eval_builtin_test.cc b/src/tint/resolver/const_eval_builtin_test.cc
index 3dc395b..42297d6 100644
--- a/src/tint/resolver/const_eval_builtin_test.cc
+++ b/src/tint/resolver/const_eval_builtin_test.cc
@@ -1093,6 +1093,73 @@
                              std::make_tuple(1000, 1000),         //
                              std::make_tuple(u32::Highest(), u32::Highest())));
 
+std::vector<Case> Pack4x8snormCases() {
+    return {
+        C({Vec(f32(0), f32(0), f32(0), f32(0))}, Val(u32(0x0000'0000))),
+        C({Vec(f32(0), f32(0), f32(0), f32(-1))}, Val(u32(0x8100'0000))),
+        C({Vec(f32(0), f32(0), f32(0), f32(1))}, Val(u32(0x7f00'0000))),
+        C({Vec(f32(0), f32(0), f32(-1), f32(0))}, Val(u32(0x0081'0000))),
+        C({Vec(f32(0), f32(1), f32(0), f32(0))}, Val(u32(0x0000'7f00))),
+        C({Vec(f32(-1), f32(0), f32(0), f32(0))}, Val(u32(0x0000'0081))),
+        C({Vec(f32(1), f32(-1), f32(1), f32(-1))}, Val(u32(0x817f'817f))),
+        C({Vec(f32::Highest(), f32(-0.5), f32(0.5), f32::Lowest())}, Val(u32(0x8140'c17f))),
+    };
+}
+INSTANTIATE_TEST_SUITE_P(  //
+    Pack4x8snorm,
+    ResolverConstEvalBuiltinTest,
+    testing::Combine(testing::Values(sem::BuiltinType::kPack4X8Snorm),
+                     testing::ValuesIn(Pack4x8snormCases())));
+
+std::vector<Case> Pack4x8unormCases() {
+    return {
+        C({Vec(f32(0), f32(0), f32(0), f32(0))}, Val(u32(0x0000'0000))),
+        C({Vec(f32(0), f32(0), f32(0), f32(1))}, Val(u32(0xff00'0000))),
+        C({Vec(f32(0), f32(0), f32(1), f32(0))}, Val(u32(0x00ff'0000))),
+        C({Vec(f32(0), f32(1), f32(0), f32(0))}, Val(u32(0x0000'ff00))),
+        C({Vec(f32(1), f32(0), f32(0), f32(0))}, Val(u32(0x0000'00ff))),
+        C({Vec(f32(1), f32(0), f32(1), f32(0))}, Val(u32(0x00ff'00ff))),
+        C({Vec(f32::Highest(), f32(0), f32(0.5), f32::Lowest())}, Val(u32(0x0080'00ff))),
+    };
+}
+INSTANTIATE_TEST_SUITE_P(  //
+    Pack4x8unorm,
+    ResolverConstEvalBuiltinTest,
+    testing::Combine(testing::Values(sem::BuiltinType::kPack4X8Unorm),
+                     testing::ValuesIn(Pack4x8unormCases())));
+
+std::vector<Case> Pack2x16snormCases() {
+    return {
+        C({Vec(f32(0), f32(0))}, Val(u32(0x0000'0000))),
+        C({Vec(f32(0), f32(-1))}, Val(u32(0x8001'0000))),
+        C({Vec(f32(0), f32(1))}, Val(u32(0x7fff'0000))),
+        C({Vec(f32(-1), f32(0))}, Val(u32(0x0000'8001))),
+        C({Vec(f32(1), f32(0))}, Val(u32(0x0000'7fff))),
+        C({Vec(f32(1), f32(-1))}, Val(u32(0x8001'7fff))),
+        C({Vec(f32::Highest(), f32::Lowest())}, Val(u32(0x8001'7fff))),
+        C({Vec(f32(-0.5), f32(0.5))}, Val(u32(0x4000'c001))),
+    };
+}
+INSTANTIATE_TEST_SUITE_P(  //
+    Pack2x16snorm,
+    ResolverConstEvalBuiltinTest,
+    testing::Combine(testing::Values(sem::BuiltinType::kPack2X16Snorm),
+                     testing::ValuesIn(Pack2x16snormCases())));
+
+std::vector<Case> Pack2x16unormCases() {
+    return {
+        C({Vec(f32(0), f32(1))}, Val(u32(0xffff'0000))),
+        C({Vec(f32(1), f32(0))}, Val(u32(0x0000'ffff))),
+        C({Vec(f32(0.5), f32(0))}, Val(u32(0x0000'8000))),
+        C({Vec(f32::Highest(), f32::Lowest())}, Val(u32(0x0000'ffff))),
+    };
+}
+INSTANTIATE_TEST_SUITE_P(  //
+    Pack2x16unorm,
+    ResolverConstEvalBuiltinTest,
+    testing::Combine(testing::Values(sem::BuiltinType::kPack2X16Unorm),
+                     testing::ValuesIn(Pack2x16unormCases())));
+
 template <typename T>
 std::vector<Case> ReverseBitsCases() {
     using B = BitValues<T>;
diff --git a/src/tint/resolver/intrinsic_table.inl b/src/tint/resolver/intrinsic_table.inl
index 23b1bb9..def10be 100644
--- a/src/tint/resolver/intrinsic_table.inl
+++ b/src/tint/resolver/intrinsic_table.inl
@@ -13946,7 +13946,7 @@
     /* parameters */ &kParameters[878],
     /* return matcher indices */ &kMatcherIndices[95],
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
-    /* const eval */ nullptr,
+    /* const eval */ &ConstEval::pack4x8unorm,
   },
   {
     /* [468] */
@@ -13958,7 +13958,7 @@
     /* parameters */ &kParameters[877],
     /* return matcher indices */ &kMatcherIndices[95],
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
-    /* const eval */ nullptr,
+    /* const eval */ &ConstEval::pack4x8snorm,
   },
   {
     /* [469] */
@@ -13970,7 +13970,7 @@
     /* parameters */ &kParameters[868],
     /* return matcher indices */ &kMatcherIndices[95],
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
-    /* const eval */ nullptr,
+    /* const eval */ &ConstEval::pack2x16unorm,
   },
   {
     /* [470] */
@@ -13982,7 +13982,7 @@
     /* parameters */ &kParameters[867],
     /* return matcher indices */ &kMatcherIndices[95],
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
-    /* const eval */ nullptr,
+    /* const eval */ &ConstEval::pack2x16snorm,
   },
   {
     /* [471] */
diff --git a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.dxc.hlsl
index 97b0f20..0e999a4 100644
--- a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.dxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack2x16snorm(float2 param_0) {
-  int2 i = int2(round(clamp(param_0, -1.0, 1.0) * 32767.0)) & 0xffff;
-  return asuint(i.x | i.y << 16);
-}
-
 void pack2x16snorm_6c169b() {
-  uint res = tint_pack2x16snorm((1.0f).xx);
+  uint res = 2147450879u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.fxc.hlsl
index 97b0f20..0e999a4 100644
--- a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.fxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack2x16snorm(float2 param_0) {
-  int2 i = int2(round(clamp(param_0, -1.0, 1.0) * 32767.0)) & 0xffff;
-  return asuint(i.x | i.y << 16);
-}
-
 void pack2x16snorm_6c169b() {
-  uint res = tint_pack2x16snorm((1.0f).xx);
+  uint res = 2147450879u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.glsl
index b7a10f9..6bd01fc 100644
--- a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void pack2x16snorm_6c169b() {
-  uint res = packSnorm2x16(vec2(1.0f));
+  uint res = 2147450879u;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void pack2x16snorm_6c169b() {
-  uint res = packSnorm2x16(vec2(1.0f));
+  uint res = 2147450879u;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void pack2x16snorm_6c169b() {
-  uint res = packSnorm2x16(vec2(1.0f));
+  uint res = 2147450879u;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.msl b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.msl
index 87aa18e..c79bd58 100644
--- a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pack2x16snorm_6c169b() {
-  uint res = pack_float_to_snorm2x16(float2(1.0f));
+  uint res = 2147450879u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.spvasm
index 05e4bea..e228cf7 100644
--- a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -32,38 +31,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %uint = OpTypeInt 32 0
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %18 = OpConstantComposite %v2float %float_1 %float_1
+%uint_2147450879 = OpConstant %uint 2147450879
 %_ptr_Function_uint = OpTypePointer Function %uint
-         %21 = OpConstantNull %uint
-         %22 = OpTypeFunction %v4float
+         %17 = OpConstantNull %uint
+         %18 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %pack2x16snorm_6c169b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_uint Function %21
-         %13 = OpExtInst %uint %15 PackSnorm2x16 %18
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_uint Function %17
+               OpStore %res %uint_2147450879
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %pack2x16snorm_6c169b
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %pack2x16snorm_6c169b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %pack2x16snorm_6c169b
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %pack2x16snorm_6c169b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %pack2x16snorm_6c169b
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %pack2x16snorm_6c169b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.dxc.hlsl
index 400d4ed..19cd7ce 100644
--- a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.dxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack2x16unorm(float2 param_0) {
-  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
-  return (i.x | i.y << 16);
-}
-
 void pack2x16unorm_0f08e4() {
-  uint res = tint_pack2x16unorm((1.0f).xx);
+  uint res = 4294967295u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.fxc.hlsl
index 400d4ed..19cd7ce 100644
--- a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.fxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack2x16unorm(float2 param_0) {
-  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
-  return (i.x | i.y << 16);
-}
-
 void pack2x16unorm_0f08e4() {
-  uint res = tint_pack2x16unorm((1.0f).xx);
+  uint res = 4294967295u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.glsl
index c1d22aa..5cce930 100644
--- a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void pack2x16unorm_0f08e4() {
-  uint res = packUnorm2x16(vec2(1.0f));
+  uint res = 4294967295u;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void pack2x16unorm_0f08e4() {
-  uint res = packUnorm2x16(vec2(1.0f));
+  uint res = 4294967295u;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void pack2x16unorm_0f08e4() {
-  uint res = packUnorm2x16(vec2(1.0f));
+  uint res = 4294967295u;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.msl b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.msl
index 1d2e143..a14b346 100644
--- a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pack2x16unorm_0f08e4() {
-  uint res = pack_float_to_unorm2x16(float2(1.0f));
+  uint res = 4294967295u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.spvasm
index cd23181..6dbf08f 100644
--- a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -32,38 +31,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %uint = OpTypeInt 32 0
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %18 = OpConstantComposite %v2float %float_1 %float_1
+%uint_4294967295 = OpConstant %uint 4294967295
 %_ptr_Function_uint = OpTypePointer Function %uint
-         %21 = OpConstantNull %uint
-         %22 = OpTypeFunction %v4float
+         %17 = OpConstantNull %uint
+         %18 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %pack2x16unorm_0f08e4 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_uint Function %21
-         %13 = OpExtInst %uint %15 PackUnorm2x16 %18
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_uint Function %17
+               OpStore %res %uint_4294967295
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %pack2x16unorm_0f08e4
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %pack2x16unorm_0f08e4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %pack2x16unorm_0f08e4
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %pack2x16unorm_0f08e4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %pack2x16unorm_0f08e4
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %pack2x16unorm_0f08e4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.dxc.hlsl
index c1480e7..78a722c 100644
--- a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.dxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack4x8snorm(float4 param_0) {
-  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
-  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
 void pack4x8snorm_4d22e7() {
-  uint res = tint_pack4x8snorm((1.0f).xxxx);
+  uint res = 2139062143u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.fxc.hlsl
index c1480e7..78a722c 100644
--- a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.fxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack4x8snorm(float4 param_0) {
-  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
-  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
 void pack4x8snorm_4d22e7() {
-  uint res = tint_pack4x8snorm((1.0f).xxxx);
+  uint res = 2139062143u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.glsl
index 30deb26..b36fc11 100644
--- a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void pack4x8snorm_4d22e7() {
-  uint res = packSnorm4x8(vec4(1.0f));
+  uint res = 2139062143u;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void pack4x8snorm_4d22e7() {
-  uint res = packSnorm4x8(vec4(1.0f));
+  uint res = 2139062143u;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void pack4x8snorm_4d22e7() {
-  uint res = packSnorm4x8(vec4(1.0f));
+  uint res = 2139062143u;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.msl b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.msl
index fb2a04b..df8cf27 100644
--- a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pack4x8snorm_4d22e7() {
-  uint res = pack_float_to_snorm4x8(float4(1.0f));
+  uint res = 2139062143u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.spvasm
index cae0cc4..f7d4e8c 100644
--- a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -32,37 +31,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %uint = OpTypeInt 32 0
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%uint_2139062143 = OpConstant %uint 2139062143
 %_ptr_Function_uint = OpTypePointer Function %uint
-         %20 = OpConstantNull %uint
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %uint
+         %18 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %pack4x8snorm_4d22e7 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_uint Function %20
-         %13 = OpExtInst %uint %15 PackSnorm4x8 %17
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_uint Function %17
+               OpStore %res %uint_2139062143
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %pack4x8snorm_4d22e7
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %pack4x8snorm_4d22e7
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %pack4x8snorm_4d22e7
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %pack4x8snorm_4d22e7
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %pack4x8snorm_4d22e7
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %pack4x8snorm_4d22e7
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.dxc.hlsl
index 34537aa..3d39cf4 100644
--- a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.dxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack4x8unorm(float4 param_0) {
-  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
-  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
 void pack4x8unorm_95c456() {
-  uint res = tint_pack4x8unorm((1.0f).xxxx);
+  uint res = 4294967295u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.fxc.hlsl
index 34537aa..3d39cf4 100644
--- a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.fxc.hlsl
@@ -1,10 +1,5 @@
-uint tint_pack4x8unorm(float4 param_0) {
-  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
-  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
 void pack4x8unorm_95c456() {
-  uint res = tint_pack4x8unorm((1.0f).xxxx);
+  uint res = 4294967295u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.glsl
index 826c904..bab2370 100644
--- a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void pack4x8unorm_95c456() {
-  uint res = packUnorm4x8(vec4(1.0f));
+  uint res = 4294967295u;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void pack4x8unorm_95c456() {
-  uint res = packUnorm4x8(vec4(1.0f));
+  uint res = 4294967295u;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void pack4x8unorm_95c456() {
-  uint res = packUnorm4x8(vec4(1.0f));
+  uint res = 4294967295u;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.msl b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.msl
index 96f61ca..f280a43 100644
--- a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pack4x8unorm_95c456() {
-  uint res = pack_float_to_unorm4x8(float4(1.0f));
+  uint res = 4294967295u;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.spvasm
index 410e72e..a90f29f 100644
--- a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -32,37 +31,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %uint = OpTypeInt 32 0
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%uint_4294967295 = OpConstant %uint 4294967295
 %_ptr_Function_uint = OpTypePointer Function %uint
-         %20 = OpConstantNull %uint
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %uint
+         %18 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %pack4x8unorm_95c456 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_uint Function %20
-         %13 = OpExtInst %uint %15 PackUnorm4x8 %17
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_uint Function %17
+               OpStore %res %uint_4294967295
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %pack4x8unorm_95c456
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %pack4x8unorm_95c456
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %pack4x8unorm_95c456
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %pack4x8unorm_95c456
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %pack4x8unorm_95c456
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %pack4x8unorm_95c456
                OpReturn
                OpFunctionEnd
diff --git a/webgpu-cts/expectations.txt b/webgpu-cts/expectations.txt
index 1f541d7..448cede 100644
--- a/webgpu-cts/expectations.txt
+++ b/webgpu-cts/expectations.txt
@@ -812,54 +812,6 @@
 crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16float:pack:inputSource="const" [ Failure ]
 crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16float:pack:inputSource="const" [ Failure ]
 crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16float:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack2x16unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8snorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation intel-gen-9 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
-crbug.com/dawn/0000 [ dawn-no-backend-validation nvidia-0x2184 target-cpu-64 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,pack4x8unorm:pack:inputSource="const" [ Failure ]
 crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 monterey target-cpu-64 webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,reflect:f32_vec2:inputSource="const" [ Failure ]
 crbug.com/dawn/0000 [ dawn-backend-validation intel-gen-9 target-cpu-64 ubuntu webgpu-adapter-default ] webgpu:shader,execution,expression,call,builtin,reflect:f32_vec2:inputSource="const" [ Failure ]
 crbug.com/dawn/0000 [ dawn-backend-validation nvidia-0x2184 target-cpu-32 webgpu-adapter-default win10 ] webgpu:shader,execution,expression,call,builtin,reflect:f32_vec2:inputSource="const" [ Failure ]