diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2024-09-19 17:30:04 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-19 17:30:04 -0700 |
| commit | 067795689035e97c27239da48ed5c61b26e88301 (patch) | |
| tree | a036f92f0bc3e64eb85dc493c1201f8d79a6090e /source | |
| parent | 26ca9c5b0657489f82a221c62903cbc802aaa6a0 (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.slang | 40 |
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 +} |
