diff options
| author | Anders Leino <aleino@nvidia.com> | 2024-11-20 10:41:03 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-20 10:41:03 +0200 |
| commit | ed123a9ca901cdffdeeb61b761eeb8c199a70d04 (patch) | |
| tree | 86c51a27812e58f25786a68b5fd4eb0e93529235 /source | |
| parent | 1e7f5418c293d3a9ca91ae4648ca2d522ec2ebe7 (diff) | |
WGSL: Support isnan, isinf, etc.. (#5609)
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 395ea5012..7dd97a436 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -9445,7 +9445,7 @@ void InterlockedCompareStoreFloatBitwise<T:IAtomicable>(__ref T dest, T compar /// @category math __generic<T : __BuiltinFloatingPointType> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] bool isfinite(T x) { __target_switch @@ -9463,7 +9463,7 @@ bool isfinite(T x) __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] vector<bool, N> isfinite(vector<T, N> x) { __target_switch @@ -9481,7 +9481,7 @@ vector<bool, N> isfinite(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] matrix<bool, N, M> isfinite(matrix<T, N, M> x) { __target_switch @@ -9498,7 +9498,7 @@ matrix<bool, N, M> isfinite(matrix<T, N, M> x) /// @category math __generic<T : __BuiltinFloatingPointType> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] bool isinf(T x) { __target_switch @@ -9512,12 +9512,14 @@ bool isinf(T x) __intrinsic_asm "$P_isinf($0)"; case spirv: return spirv_asm { result:$$bool = OpIsInf $x}; + case wgsl: + __intrinsic_asm "($0 > 0x1.fffffep+127f) || ($0 < -0x1.fffffep+127f)"; } } __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] vector<bool, N> isinf(vector<T, N> x) { __target_switch @@ -9535,7 +9537,7 @@ vector<bool, N> isinf(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] matrix<bool, N, M> isinf(matrix<T, N, M> x) { __target_switch @@ -9552,7 +9554,7 @@ matrix<bool, N, M> isinf(matrix<T, N, M> x) /// @category math __generic<T : __BuiltinFloatingPointType> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] bool isnan(T x) { __target_switch @@ -9566,12 +9568,14 @@ bool isnan(T x) __intrinsic_asm "$P_isnan($0)"; case spirv: return spirv_asm { result:$$bool = OpIsNan $x}; + case wgsl: + __intrinsic_asm "$0 != $0"; } } __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] vector<bool, N> isnan(vector<T, N> x) { __target_switch @@ -9589,7 +9593,7 @@ vector<bool, N> isnan(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] matrix<bool, N, M> isnan(matrix<T, N, M> x) { __target_switch |
