summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorJay Kwak <82421531+jkwak-work@users.noreply.github.com>2024-05-02 09:59:45 -0700
committerGitHub <noreply@github.com>2024-05-02 09:59:45 -0700
commit679a457940027420817a85070b3fdb9bfc0cca2e (patch)
tree51463c1f19035108e4e1b3a76354b27beae07669 /source/slang/hlsl.meta.slang
parentd53d793db6f4d82358ada700e1bd98b497384cdc (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.slang26
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