Skip to content

Commit

Permalink
[WGSL] Disallow NaN as a constant value
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=264333
rdar://118055576

Reviewed by Mike Wyrzykowski.

The constant value conversion/validation was missing a check for NaNs, which are
not valid constant values.

* Source/WebGPU/WGSL/ConstantValue.h:
(WGSL::convertFloat):
* Source/WebGPU/WGSL/tests/valid/overload.wgsl:

Canonical link: https://commits.webkit.org/270326@main
  • Loading branch information
tadeuzagallo committed Nov 7, 2023
1 parent ee38052 commit e449510
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 33 deletions.
2 changes: 2 additions & 0 deletions Source/WebGPU/WGSL/ConstantValue.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ std::optional<To> convertFloat(From value)
return std::nullopt;
if (value < std::numeric_limits<To>::lowest())
return std::nullopt;
if (std::isnan(value))
return std::nullopt;
if (std::abs(value) < std::numeric_limits<To>::min())
return { 0 };

Expand Down
66 changes: 33 additions & 33 deletions Source/WebGPU/WGSL/tests/valid/overload.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -745,10 +745,10 @@ fn testTrigonometric()
fn testTrigonometricHyperbolic()
{
{
_ = acosh(0.0);
_ = acosh(vec2(0.0, 0.0));
_ = acosh(vec3(0.0, 0.0, 0.0));
_ = acosh(vec4(0.0, 0.0, 0.0, 0.0));
_ = acosh(1.0);
_ = acosh(vec2(1.0, 1.0));
_ = acosh(vec3(1.0, 1.0, 1.0));
_ = acosh(vec4(1.0, 1.0, 1.0, 1.0));
}

{
Expand Down Expand Up @@ -1511,14 +1511,14 @@ fn testLog()
_ = log(vec2(2f));
}
{
_ = log(vec3(-2));
_ = log(vec3(-2.0));
_ = log(vec3(-2f));
_ = log(vec3(2));
_ = log(vec3(2.0));
_ = log(vec3(2f));
}
{
_ = log(vec4(-2));
_ = log(vec4(-2.0));
_ = log(vec4(-2f));
_ = log(vec4(2));
_ = log(vec4(2.0));
_ = log(vec4(2f));
}
}

Expand All @@ -1538,14 +1538,14 @@ fn testLog2() {
_ = log2(vec2(2f));
}
{
_ = log2(vec3(-2));
_ = log2(vec3(-2.0));
_ = log2(vec3(-2f));
_ = log2(vec3(2));
_ = log2(vec3(2.0));
_ = log2(vec3(2f));
}
{
_ = log2(vec4(-2));
_ = log2(vec4(-2.0));
_ = log2(vec4(-2f));
_ = log2(vec4(2));
_ = log2(vec4(2.0));
_ = log2(vec4(2f));
}
}

Expand Down Expand Up @@ -1673,8 +1673,8 @@ fn testNormalize()
{
// [T < Float, N].(Vector[T, N]) => Vector[T, N],
{
_ = normalize(vec2(0));
_ = normalize(vec2(0.0));
_ = normalize(vec2(1));
_ = normalize(vec2(1.0));
_ = normalize(vec2(1f));
}
{
Expand Down Expand Up @@ -1975,19 +1975,19 @@ fn testSmoothstep()
}
// [T < Float, N].(Vector[T, N], Vector[T, N], Vector[T, N]) => Vector[T, N],
{
_ = smoothstep(vec2(0), vec2(0), vec2(0));
_ = smoothstep(vec2(0), vec2(0), vec2(0.0));
_ = smoothstep(vec2(0), vec2(0), vec2(0f));
_ = smoothstep(vec2(2), vec2(1), vec2(1));
_ = smoothstep(vec2(2), vec2(1), vec2(1.0));
_ = smoothstep(vec2(2), vec2(1), vec2(1f));
}
{
_ = smoothstep(vec3(0), vec3(0), vec3(0));
_ = smoothstep(vec3(0), vec3(0), vec3(0.0));
_ = smoothstep(vec3(0), vec3(0), vec3(0f));
_ = smoothstep(vec3(2), vec3(1), vec3(1));
_ = smoothstep(vec3(2), vec3(1), vec3(1.0));
_ = smoothstep(vec3(2), vec3(1), vec3(1f));
}
{
_ = smoothstep(vec4(0), vec4(0), vec4(0));
_ = smoothstep(vec4(0), vec4(0), vec4(0.0));
_ = smoothstep(vec4(0), vec4(0), vec4(0f));
_ = smoothstep(vec4(2), vec4(1), vec4(1));
_ = smoothstep(vec4(2), vec4(1), vec4(1.0));
_ = smoothstep(vec4(2), vec4(1), vec4(1f));
}
}

Expand All @@ -2008,14 +2008,14 @@ fn testSqrt()
_ = sqrt(vec2(1f));
}
{
_ = sqrt(vec3(-1));
_ = sqrt(vec3(-1.0));
_ = sqrt(vec3(-1f));
_ = sqrt(vec3(1));
_ = sqrt(vec3(1.0));
_ = sqrt(vec3(1f));
}
{
_ = sqrt(vec4(-1));
_ = sqrt(vec4(-1.0));
_ = sqrt(vec4(-1f));
_ = sqrt(vec4(1));
_ = sqrt(vec4(1.0));
_ = sqrt(vec4(1f));
}
}

Expand Down

0 comments on commit e449510

Please sign in to comment.