diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-02-12 10:44:07 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-12 10:44:07 -0500 |
| commit | e1e7a6eec04ee1d04dc7e0d0212208d4c7a9592b (patch) | |
| tree | 18543abbb95cb93accedf4b0ecc894b6a363f11b /source/slang/hlsl.meta.slang | |
| parent | fe9d27af9de047ea75db1334c961bb025fb732f6 (diff) | |
Support for isinf/isfinite/isnan/ldexp (#1219)
* Added support ldexp.
* Added classify-float.slang test
Fixed glsl output.
* Added classify-double.slang
* Added ldexp test to scalar-double.slang
* isnan, isinf, isfinite are macros (on some targets) so remove :: prefix.
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 669fbb440..41a69382d 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -944,9 +944,17 @@ __target_intrinsic(cuda, "($2 = (uint)atomicXor((int*)&$0, $1))") void InterlockedXor(__ref uint dest, uint value, out uint original_value); // Is floating-point value finite? -__generic<T : __BuiltinFloatingPointType> bool isfinite(T x); -__generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isfinite(vector<T,N> x); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isfinite(matrix<T,N,M> x); + +__generic<T : __BuiltinFloatingPointType> +__target_intrinsic(glsl, "(!(isinf($0) || isnan($0)))") +bool isfinite(T x); + +__generic<T : __BuiltinFloatingPointType, let N : int> +__target_intrinsic(glsl, "(!(isinf($0) || isnan($0)))") +vector<bool,N> isfinite(vector<T,N> x); + +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> +matrix<bool,N,M> isfinite(matrix<T,N,M> x); // Is floating-point value infinite? __generic<T : __BuiltinFloatingPointType> bool isinf(T x); @@ -959,9 +967,17 @@ __generic<T : __BuiltinFloatingPointType, let N : int> vector<bool,N> isnan(vect __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<bool,N,M> isnan(matrix<T,N,M> x); // Construct float from mantissa and exponent -__generic<T : __BuiltinFloatingPointType> T ldexp(T x, T exp); -__generic<T : __BuiltinFloatingPointType, let N : int> vector<T,N> ldexp(vector<T,N> x, vector<T,N> exp); -__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> matrix<T,N,M> ldexp(matrix<T,N,M> x, matrix<T,N,M> exp); + +__generic<T : __BuiltinFloatingPointType> +__target_intrinsic(glsl, "($0 * pow(2.0f, $1))") +T ldexp(T x, T exp); + +__generic<T : __BuiltinFloatingPointType, let N : int> +__target_intrinsic(glsl, "($0 * pow(2.0f, $1))") +vector<T,N> ldexp(vector<T,N> x, vector<T,N> exp); + +__generic<T : __BuiltinFloatingPointType, let N : int, let M : int> +matrix<T,N,M> ldexp(matrix<T,N,M> x, matrix<T,N,M> exp); // Vector length __generic<T : __BuiltinFloatingPointType, let N : int> T length(vector<T,N> x); |
