diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2024-05-02 09:59:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-02 09:59:45 -0700 |
| commit | 679a457940027420817a85070b3fdb9bfc0cca2e (patch) | |
| tree | 51463c1f19035108e4e1b3a76354b27beae07669 /source/slang/hlsl.meta.slang | |
| parent | d53d793db6f4d82358ada700e1bd98b497384cdc (diff) | |
Implement SPIR-V target for GLSL functions (#4083)
Fixes #4051
This commit implements SPIR-V target for GLSL functions.
It also fixes a few problesm of GLSL targetting implemention too.
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 2250ed6d4..7cafe764f 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -5741,7 +5741,15 @@ __generic<T : __BuiltinFloatingPointType> [require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] T distance(T x, T y) { - return length(x - y); + __target_switch + { + case glsl: __intrinsic_asm "distance"; + case spirv: return spirv_asm { + OpExtInst $$T result glsl450 Distance $x $y + }; + default: + return length(x - y); + } } // Vector dot product @@ -6028,9 +6036,7 @@ T exp2(T x) __target_switch { case glsl: - if (__isHalf<T>()) - __intrinsic_asm "exp2($0)"; - __intrinsic_asm "exp2(float($0))"; + __intrinsic_asm "exp2($0)"; case spirv: if (__isHalf<T>()) { @@ -6060,6 +6066,8 @@ vector<T,N> exp2(vector<T,N> x) { __target_switch { + case glsl: + __intrinsic_asm "exp2($0)"; case hlsl: __intrinsic_asm "exp2"; case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Exp2 $x @@ -7878,7 +7886,15 @@ __generic<T : __BuiltinFloatingPointType> [require(cpp_cuda_glsl_hlsl_spirv, sm_2_0_GLSL_140)] T length(T x) { - return abs(x); + __target_switch + { + case glsl: __intrinsic_asm "length"; + case spirv: return spirv_asm { + OpExtInst $$T result glsl450 Length $x + }; + default: + return abs(x); + } } // Linear interpolation |
