diff options
| author | Yong He <yonghe@outlook.com> | 2024-05-14 18:01:31 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-14 18:01:31 -0700 |
| commit | 4edc72e4dea47cf549b4e28940e3509a5ab61439 (patch) | |
| tree | 10475236b4a0e1f8a7a0bafdaa05a09d26f9412f /source/slang/hlsl.meta.slang | |
| parent | d76bed6c1b03e5d7ef19c947fdd5fcaf33b595f7 (diff) | |
Remove use of `G0` and `__target_intrinsic` in stdlib. (#4170)
* Remove use of `G0` and `__target_intrinsic` in stdlib.
* Fix.
* Fix calling intrinsic in global scope.
Diffstat (limited to 'source/slang/hlsl.meta.slang')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 92b68c3e6..f318eb79e 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -9894,15 +9894,32 @@ vector<T,N> fmax3(vector<T,N> x, vector<T,N> y, vector<T,N> z) // minimum __generic<T : __BuiltinIntegerType> -__target_intrinsic(hlsl) -__target_intrinsic(glsl) -__target_intrinsic(metal) -__target_intrinsic(cuda, "$P_min($0, $1)") -__target_intrinsic(cpp, "$P_min($0, $1)") -__target_intrinsic(spirv, "OpExtInst resultType resultId glsl450 fus(FMin, UMin, SMin) _0 _1") [__readNone] [require(cpp_cuda_glsl_hlsl_metal_spirv, sm_2_0_GLSL_140)] -T min(T x, T y); +T min(T x, T y) +{ + __target_switch + { + case hlsl: + case glsl: + case metal: + __intrinsic_asm "min"; + case cuda: + case cpp: + __intrinsic_asm "$P_min($0, $1)"; + case spirv: + { + if (__isSignedInt<T>()) + return spirv_asm { + result:$$T = OpExtInst glsl450 SMin $x $y + }; + else + return spirv_asm { + result:$$T = OpExtInst glsl450 UMin $x $y + }; + } + } +} __generic<T : __BuiltinIntegerType, let N : int> [__readNone] |
