summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-05-14 18:01:31 -0700
committerGitHub <noreply@github.com>2024-05-14 18:01:31 -0700
commit4edc72e4dea47cf549b4e28940e3509a5ab61439 (patch)
tree10475236b4a0e1f8a7a0bafdaa05a09d26f9412f /source/slang/hlsl.meta.slang
parentd76bed6c1b03e5d7ef19c947fdd5fcaf33b595f7 (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.slang31
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]