diff options
| -rw-r--r-- | source/slang/hlsl.meta.slang | 20 | ||||
| -rw-r--r-- | tests/expected-failure-github.txt | 1 |
2 files changed, 18 insertions, 3 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 6a3ae63ec..e00108e96 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -10628,7 +10628,15 @@ bool isinf(T x) case spirv: return spirv_asm { result:$$bool = OpIsInf $x}; case wgsl: - __intrinsic_asm "($0 > 0x1.fffffep+127f) || ($0 < -0x1.fffffep+127f)"; + static_assert(T is float, "isnan is implemented only for float type"); + if (let f = x as float) + { + let bits = asuint(f); + let exp = (bits >> 23) & 0xffu; + let frac = bits & 0x7fffffu; + return exp == 0xffu && frac == 0u; + } + return false; } } @@ -10684,7 +10692,15 @@ bool isnan(T x) case spirv: return spirv_asm { result:$$bool = OpIsNan $x}; case wgsl: - __intrinsic_asm "$0 != $0"; + static_assert(T is float, "isnan is implemented only for float type"); + if (let f = x as float) + { + let bits = asuint(f); + let exp = (bits >> 23) & 0xffu; + let frac = bits & 0x7fffffu; + return exp == 0xffu && frac != 0u; + } + return false; } } diff --git a/tests/expected-failure-github.txt b/tests/expected-failure-github.txt index 78ae5cf92..0489cafaf 100644 --- a/tests/expected-failure-github.txt +++ b/tests/expected-failure-github.txt @@ -14,4 +14,3 @@ tests/language-feature/shader-params/interface-shader-param-ordinary.slang.4 syn tests/glsl-intrinsic/shader-subgroup/shader-subgroup-builtin-variables.slang.8 (mtl) tests/glsl-intrinsic/shader-subgroup/shader-subgroup-builtin-variables-2.slang.3 (mtl) tests/compute/cbuffer-legalize.slang.2 syn (mtl) -tests/hlsl-intrinsic/classify-float.slang.5 syn (wgpu) |
