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 | |
| 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.
| -rw-r--r-- | source/slang/hlsl.meta.slang | 40 | ||||
| -rw-r--r-- | tools/slang-test/slang-test-main.cpp | 6 |
2 files changed, 38 insertions, 8 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 +} diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index cac694f77..47a87ddc2 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -968,6 +968,7 @@ static PassThroughFlags _getPassThroughFlagsForTarget(SlangCompileTarget target) case SLANG_HOST_CPP_SOURCE: case SLANG_CUDA_SOURCE: case SLANG_METAL: + case SLANG_WGSL: { return 0; } @@ -993,11 +994,6 @@ static PassThroughFlags _getPassThroughFlagsForTarget(SlangCompileTarget target) return PassThroughFlag::Metal; } - case SLANG_WGSL: - { - return PassThroughFlag::WGSL; - } - case SLANG_SHADER_HOST_CALLABLE: case SLANG_HOST_HOST_CALLABLE: |
