tint/hlsl: fix frexp always returning positive values for fractional part

Bug: tint:1876
Change-Id: Ic56b37918fd1a2a42442b517985a49f10d85159d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/124501
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index cc8ad64..4910f81 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -2045,7 +2045,7 @@
             }
 
             line(b) << member_type << " exp;";
-            line(b) << member_type << " fract = frexp(" << in << ", exp);";
+            line(b) << member_type << " fract = sign(" << in << ") * frexp(" << in << ", exp);";
             {
                 auto l = line(b);
                 if (!EmitType(l, builtin->ReturnType(), builtin::AddressSpace::kUndefined,
diff --git a/src/tint/writer/hlsl/generator_impl_builtin_test.cc b/src/tint/writer/hlsl/generator_impl_builtin_test.cc
index f473ac8..d552671 100644
--- a/src/tint/writer/hlsl/generator_impl_builtin_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_builtin_test.cc
@@ -606,7 +606,7 @@
 };
 frexp_result_f32 tint_frexp(float param_0) {
   float exp;
-  float fract = frexp(param_0, exp);
+  float fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f32 result = {fract, int(exp)};
   return result;
 }
@@ -635,7 +635,7 @@
 };
 frexp_result_f16 tint_frexp(float16_t param_0) {
   float16_t exp;
-  float16_t fract = frexp(param_0, exp);
+  float16_t fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f16 result = {fract, int(exp)};
   return result;
 }
@@ -662,7 +662,7 @@
 };
 frexp_result_vec3_f32 tint_frexp(float3 param_0) {
   float3 exp;
-  float3 fract = frexp(param_0, exp);
+  float3 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec3_f32 result = {fract, int3(exp)};
   return result;
 }
@@ -691,7 +691,7 @@
 };
 frexp_result_vec3_f16 tint_frexp(vector<float16_t, 3> param_0) {
   vector<float16_t, 3> exp;
-  vector<float16_t, 3> fract = frexp(param_0, exp);
+  vector<float16_t, 3> fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec3_f16 result = {fract, int3(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.dxc.hlsl b/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.dxc.hlsl
index a848a4f..78f8457 100644
--- a/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_f32 tint_frexp(float param_0) {
   float exp;
-  float fract = frexp(param_0, exp);
+  float fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f32 result = {fract, int(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.fxc.hlsl b/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.fxc.hlsl
index a848a4f..78f8457 100644
--- a/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_f32 tint_frexp(float param_0) {
   float exp;
-  float fract = frexp(param_0, exp);
+  float fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f32 result = {fract, int(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.dxc.hlsl b/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.dxc.hlsl
index fdf14df..05fdf30 100644
--- a/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_f32 tint_frexp(float param_0) {
   float exp;
-  float fract = frexp(param_0, exp);
+  float fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f32 result = {fract, int(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.fxc.hlsl b/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.fxc.hlsl
index fdf14df..05fdf30 100644
--- a/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_f32 tint_frexp(float param_0) {
   float exp;
-  float fract = frexp(param_0, exp);
+  float fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f32 result = {fract, int(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/vector/mixed.wgsl.expected.dxc.hlsl b/test/tint/builtins/frexp/vector/mixed.wgsl.expected.dxc.hlsl
index 1df0445..c5fc8db 100644
--- a/test/tint/builtins/frexp/vector/mixed.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/frexp/vector/mixed.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec2_f32 tint_frexp(float2 param_0) {
   float2 exp;
-  float2 fract = frexp(param_0, exp);
+  float2 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec2_f32 result = {fract, int2(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/vector/mixed.wgsl.expected.fxc.hlsl b/test/tint/builtins/frexp/vector/mixed.wgsl.expected.fxc.hlsl
index 1df0445..c5fc8db 100644
--- a/test/tint/builtins/frexp/vector/mixed.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/frexp/vector/mixed.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec2_f32 tint_frexp(float2 param_0) {
   float2 exp;
-  float2 fract = frexp(param_0, exp);
+  float2 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec2_f32 result = {fract, int2(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/vector/runtime.wgsl.expected.dxc.hlsl b/test/tint/builtins/frexp/vector/runtime.wgsl.expected.dxc.hlsl
index a6b9fed..390557d 100644
--- a/test/tint/builtins/frexp/vector/runtime.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/frexp/vector/runtime.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec2_f32 tint_frexp(float2 param_0) {
   float2 exp;
-  float2 fract = frexp(param_0, exp);
+  float2 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec2_f32 result = {fract, int2(exp)};
   return result;
 }
diff --git a/test/tint/builtins/frexp/vector/runtime.wgsl.expected.fxc.hlsl b/test/tint/builtins/frexp/vector/runtime.wgsl.expected.fxc.hlsl
index a6b9fed..390557d 100644
--- a/test/tint/builtins/frexp/vector/runtime.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/frexp/vector/runtime.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec2_f32 tint_frexp(float2 param_0) {
   float2 exp;
-  float2 fract = frexp(param_0, exp);
+  float2 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec2_f32 result = {fract, int2(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl
index 54c2366..465dc0e 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec4_f16 tint_frexp(vector<float16_t, 4> param_0) {
   vector<float16_t, 4> exp;
-  vector<float16_t, 4> fract = frexp(param_0, exp);
+  vector<float16_t, 4> fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec4_f16 result = {fract, int4(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.dxc.hlsl
index 6d5d462..f4975e6 100644
--- a/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_f32 tint_frexp(float param_0) {
   float exp;
-  float fract = frexp(param_0, exp);
+  float fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f32 result = {fract, int(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.fxc.hlsl
index 6d5d462..f4975e6 100644
--- a/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_f32 tint_frexp(float param_0) {
   float exp;
-  float fract = frexp(param_0, exp);
+  float fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f32 result = {fract, int(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl
index da9aa86..a7cb36b 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_f16 tint_frexp(float16_t param_0) {
   float16_t exp;
-  float16_t fract = frexp(param_0, exp);
+  float16_t fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_f16 result = {fract, int(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl
index 4d1be21..798a819 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec2_f16 tint_frexp(vector<float16_t, 2> param_0) {
   vector<float16_t, 2> exp;
-  vector<float16_t, 2> fract = frexp(param_0, exp);
+  vector<float16_t, 2> fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec2_f16 result = {fract, int2(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.dxc.hlsl
index 9cb9898..2bc5ebb 100644
--- a/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec4_f32 tint_frexp(float4 param_0) {
   float4 exp;
-  float4 fract = frexp(param_0, exp);
+  float4 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec4_f32 result = {fract, int4(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.fxc.hlsl
index 9cb9898..2bc5ebb 100644
--- a/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec4_f32 tint_frexp(float4 param_0) {
   float4 exp;
-  float4 fract = frexp(param_0, exp);
+  float4 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec4_f32 result = {fract, int4(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.dxc.hlsl
index ec63822..14e8902 100644
--- a/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec3_f32 tint_frexp(float3 param_0) {
   float3 exp;
-  float3 fract = frexp(param_0, exp);
+  float3 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec3_f32 result = {fract, int3(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.fxc.hlsl
index ec63822..14e8902 100644
--- a/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec3_f32 tint_frexp(float3 param_0) {
   float3 exp;
-  float3 fract = frexp(param_0, exp);
+  float3 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec3_f32 result = {fract, int3(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl
index 5e7dad6..a9c8585 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec3_f16 tint_frexp(vector<float16_t, 3> param_0) {
   vector<float16_t, 3> exp;
-  vector<float16_t, 3> fract = frexp(param_0, exp);
+  vector<float16_t, 3> fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec3_f16 result = {fract, int3(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.dxc.hlsl
index 7615f1c..84bd5ce 100644
--- a/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec2_f32 tint_frexp(float2 param_0) {
   float2 exp;
-  float2 fract = frexp(param_0, exp);
+  float2 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec2_f32 result = {fract, int2(exp)};
   return result;
 }
diff --git a/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.fxc.hlsl
index 7615f1c..84bd5ce 100644
--- a/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 };
 frexp_result_vec2_f32 tint_frexp(float2 param_0) {
   float2 exp;
-  float2 fract = frexp(param_0, exp);
+  float2 fract = sign(param_0) * frexp(param_0, exp);
   frexp_result_vec2_f32 result = {fract, int2(exp)};
   return result;
 }
diff --git a/webgpu-cts/expectations.txt b/webgpu-cts/expectations.txt
index 784f747..276643a 100644
--- a/webgpu-cts/expectations.txt
+++ b/webgpu-cts/expectations.txt
@@ -480,46 +480,6 @@
 crbug.com/dawn/1677 webgpu:api,validation,resource_usages,texture,in_render_common:subresources,depth_stencil_attachment_and_bind_group:* [ Failure ]
 
 ################################################################################
-# frexp failures on Windows
-################################################################################
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec2_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec3_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="storage_r" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="storage_rw" [ Failure ]
-crbug.com/dawn/1876 [ dawn-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation intel-0x9bc5 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="uniform" [ Failure ]
-crbug.com/dawn/1876 [ dawn-no-backend-validation nvidia-0x2184 win10 ] webgpu:shader,execution,expression,call,builtin,frexp:f32_vec4_fract:inputSource="uniform" [ Failure ]
-
-################################################################################
 # frexp failures on Linux Intel
 ################################################################################
 crbug.com/dawn/1877 [ dawn-backend-validation intel-0x9bc5 ubuntu ] webgpu:shader,execution,expression,call,builtin,frexp:f32_fract:inputSource="storage_r" [ Failure ]