summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorkaizhangNV <149626564+kaizhangNV@users.noreply.github.com>2024-11-05 07:32:49 -0600
committerGitHub <noreply@github.com>2024-11-05 21:32:49 +0800
commit53dd5928c35d5a5cb1f7d2a563348fd1fa87d672 (patch)
tree861ecbb07d61ed85c4e9d9e0e5387eb386560b3e /source
parent7c2ff54758d26b73074fd14143ecd843ba685e0d (diff)
Fixing the wrong implementation of some math intrinsic (#5491)
* Fixing the wrong implementation of some math intrinsic Close the issue #5282 The root cause of the issue is that log10 is not supported in wgsl. So add the implementation. Also ldexp in wgsl doesn't support float type exponent, so fix the implementation of the intrinsic. * re-enable the tests
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang12
1 files changed, 8 insertions, 4 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 525b666ab..6ac0b7fb9 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -9498,7 +9498,8 @@ T ldexp(T x, T exp)
__target_switch
{
case hlsl: __intrinsic_asm "ldexp";
- case wgsl: __intrinsic_asm "ldexp";
+ // In WGSL spec, ldexp can only take integer as the exponent.
+ case wgsl: __intrinsic_asm "($0 * exp2($1))";
default:
return x * exp2(exp);
}
@@ -9512,7 +9513,8 @@ vector<T, N> ldexp(vector<T, N> x, vector<T, N> exp)
__target_switch
{
case hlsl: __intrinsic_asm "ldexp";
- case wgsl: __intrinsic_asm "ldexp";
+ // In WGSL spec, ldexp can only take integer as the exponent.
+ case wgsl: __intrinsic_asm "($0 * exp2($1))";
default:
return x * exp2(exp);
}
@@ -9737,13 +9739,14 @@ matrix<T, N, M> log(matrix<T, N, M> x)
/// @category math
__generic<T : __BuiltinFloatingPointType>
[__readNone]
-[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)]
+[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
T log10(T x)
{
__target_switch
{
case hlsl: __intrinsic_asm "log10";
case metal: __intrinsic_asm "log10";
+ case wgsl: __intrinsic_asm "(log( $0 ) * $S0( 0.43429448190325182765112891891661) )";
case glsl: __intrinsic_asm "(log( $0 ) * $S0( 0.43429448190325182765112891891661) )";
case cuda: __intrinsic_asm "$P_log10($0)";
case cpp: __intrinsic_asm "$P_log10($0)";
@@ -9760,13 +9763,14 @@ T log10(T x)
__generic<T : __BuiltinFloatingPointType, let N : int>
[__readNone]
-[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)]
+[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
vector<T,N> log10(vector<T,N> x)
{
__target_switch
{
case hlsl: __intrinsic_asm "log10";
case metal: __intrinsic_asm "log10";
+ case wgsl: __intrinsic_asm "(log( $0 ) * $S0(0.43429448190325182765112891891661) )";
case glsl: __intrinsic_asm "(log( $0 ) * $S0(0.43429448190325182765112891891661) )";
case spirv:
{