summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorJay Kwak <82421531+jkwak-work@users.noreply.github.com>2024-09-19 17:30:04 -0700
committerGitHub <noreply@github.com>2024-09-19 17:30:04 -0700
commit067795689035e97c27239da48ed5c61b26e88301 (patch)
treea036f92f0bc3e64eb85dc493c1201f8d79a6090e /source
parent26ca9c5b0657489f82a221c62903cbc802aaa6a0 (diff)
Re-enable slang-test for WGSL (#5120)
My previous commit disabled the WGSL test by a mistake. This commit fixes the mistake and run the slang-test for WGSL tests. frexp and modf were still not working for the vector types.
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang40
1 files changed, 37 insertions, 3 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 64bb6376d..7b3113fce 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -8686,6 +8686,7 @@ vector<T, N> fract(vector<T, N> x)
// Split float into mantissa and exponent
__generic<T : __BuiltinFloatingPointType>
[__readNone]
+[ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
T frexp(T x, out int exp)
{
@@ -8708,14 +8709,16 @@ T frexp(T x, out int exp)
__generic<T : __BuiltinFloatingPointType>
[__readNone]
+[ForceInline]
[require(wgsl)]
void __wgsl_frexp(T x, out T fract, out int exp)
{
- __intrinsic_asm "{ var s = frexp($0); $1 = s.fract; $2 = s.exp; }";
+ __intrinsic_asm "{ var s = frexp($0); (*($1)) = s.fract; (*($2)) = s.exp; }";
}
__generic<T : __BuiltinFloatingPointType, let N : int>
[__readNone]
+[ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
vector<T, N> frexp(vector<T, N> x, out vector<int, N> exp)
{
@@ -8727,13 +8730,27 @@ vector<T, N> frexp(vector<T, N> x, out vector<int, N> exp)
case spirv: return spirv_asm {
result:$$vector<T, N> = OpExtInst glsl450 Frexp $x &exp
};
+ case wgsl:
+ vector<T,N> fract;
+ __wgsl_frexp<T>(x, fract, exp);
+ return fract;
default:
VECTOR_MAP_BINARY(T, N, frexp, x, exp);
}
}
+__generic<T : __BuiltinFloatingPointType, let N : int>
+[__readNone]
+[ForceInline]
+[require(wgsl)]
+void __wgsl_frexp(vector<T, N> x, out vector<T, N> fract, out vector<int, N> exp)
+{
+ __intrinsic_asm "{ var s = frexp($0); (*($1)) = s.fract; (*($2)) = s.exp; }";
+}
+
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L : int>
[__readNone]
+[ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
matrix<T, N, M> frexp(matrix<T, N, M> x, out matrix<int, N, M, L> exp)
{
@@ -11099,6 +11116,7 @@ vector<T,N> fmedian3(vector<T,N> x, vector<T,N> y, vector<T,N> z)
// split into integer and fractional parts (both with same sign)
__generic<T : __BuiltinFloatingPointType>
[__readNone]
+[ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
T modf(T x, out T ip)
{
@@ -11121,14 +11139,16 @@ T modf(T x, out T ip)
__generic<T : __BuiltinFloatingPointType>
[__readNone]
+[ForceInline]
[require(wgsl)]
void __wgsl_modf(T x, out T fract, out T whole)
{
- __intrinsic_asm "{ var s = modf($0); $1 = s.fract; $2 = s.whole; }";
+ __intrinsic_asm "{ var s = modf($0); (*($1)) = s.fract; (*($2)) = s.whole; }";
}
__generic<T : __BuiltinFloatingPointType, let N : int>
[__readNone]
+[ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
vector<T,N> modf(vector<T,N> x, out vector<T,N> ip)
{
@@ -11140,13 +11160,27 @@ vector<T,N> modf(vector<T,N> x, out vector<T,N> ip)
case spirv: return spirv_asm {
result:$$vector<T,N> = OpExtInst glsl450 Modf $x &ip
};
+ case wgsl:
+ vector<T,N> fract;
+ __wgsl_modf<T>(x, fract, ip);
+ return fract;
default:
VECTOR_MAP_BINARY(T, N, modf, x, ip);
}
}
+__generic<T : __BuiltinFloatingPointType, let N : int>
+[__readNone]
+[ForceInline]
+[require(wgsl)]
+void __wgsl_modf(vector<T,N> x, out vector<T,N> fract, out vector<T,N> whole)
+{
+ __intrinsic_asm "{ var s = modf($0); (*($1)) = s.fract; (*($2)) = s.whole; }";
+}
+
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L : int>
[__readNone]
+[ForceInline]
[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)]
matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M,L> ip)
{
@@ -20624,4 +20658,4 @@ extension<T, L : IBufferDataLayout> RWStructuredBuffer<T, L> : IRWArray<T>
extension<T, L : IBufferDataLayout> RasterizerOrderedStructuredBuffer<T, L> : IRWArray<T>
{
int getCount() { uint count; uint stride; this.GetDimensions(count, stride); return count; }
-} \ No newline at end of file
+}