diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2024-09-17 13:51:08 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-17 13:51:08 -0700 |
| commit | 07166468c6fa706b7f35d3422e4966f62e7b86d2 (patch) | |
| tree | a468216dc2414d5a870be9ac1b4446823ee951da /source | |
| parent | 25d155937402120292cff9e6f5a31c1d45a2ecbf (diff) | |
Implement math intrinsics for WGSL (#5078)
* Implement math intrinsics for WGSL
This commit implements math related intrinsics and a few others for
WGSL.
The implementation is based on the following doc,
https://www.w3.org/TR/WGSL
slang-test was looking for the downstream compiler for WGSL even though
it is not used.
This commit adds a minimal change to avoid the crash.
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 473 | ||||
| -rw-r--r-- | source/slang/slang-capabilities.capdef | 10 |
2 files changed, 304 insertions, 179 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index a8241bf73..7c68a641c 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -5445,7 +5445,7 @@ void abort(); __generic<T : __BuiltinIntegerType> [__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 abs(T x) { __target_switch @@ -5458,6 +5458,7 @@ T abs(T x) case spirv: return spirv_asm { result:$$T = OpExtInst glsl450 SAbs $x }; + case wgsl: __intrinsic_asm "abs"; //default: // Note: this simple definition may not be appropriate for floating-point inputs // return x < 0 ? -x : x; @@ -5466,7 +5467,7 @@ T abs(T x) __generic<T : __BuiltinIntegerType, 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> abs(vector<T, N> x) { __target_switch @@ -5477,6 +5478,7 @@ vector<T, N> abs(vector<T, N> x) case spirv: return spirv_asm { result:$$vector<T,N> = OpExtInst glsl450 SAbs $x; }; + case wgsl: __intrinsic_asm "abs"; default: VECTOR_MAP_UNARY(T, N, abs, x); } @@ -5484,7 +5486,7 @@ vector<T, N> abs(vector<T, N> x) __generic<T : __BuiltinIntegerType, let N : int, let M : 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)] matrix<T,N,M> abs(matrix<T,N,M> x) { __target_switch @@ -5497,7 +5499,7 @@ matrix<T,N,M> abs(matrix<T,N,M> x) __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 abs(T x) { __target_switch @@ -5510,12 +5512,13 @@ T abs(T x) case spirv: return spirv_asm { result:$$T = OpExtInst glsl450 FAbs $x; }; + case wgsl: __intrinsic_asm "abs"; } } __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> abs(vector<T, N> x) { __target_switch @@ -5526,6 +5529,7 @@ vector<T, N> abs(vector<T, N> x) case spirv: return spirv_asm { result:$$vector<T,N> = OpExtInst glsl450 FAbs $x; }; + case wgsl: __intrinsic_asm "abs"; default: VECTOR_MAP_UNARY(T, N, abs, x); } @@ -5533,7 +5537,7 @@ vector<T, N> abs(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> abs(matrix<T,N,M> x) { __target_switch @@ -5547,7 +5551,7 @@ matrix<T,N,M> abs(matrix<T,N,M> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T fabs(T x) { __target_switch @@ -5561,7 +5565,7 @@ T fabs(T x) __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] [ForceInline] -[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> fabs(vector<T, N> x) { __target_switch @@ -5577,7 +5581,7 @@ vector<T, N> fabs(vector<T, N> x) __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 acos(T x) { __target_switch @@ -5590,12 +5594,13 @@ T acos(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Acos $x }; + case wgsl: __intrinsic_asm "acos"; } } __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> acos(vector<T, N> x) { __target_switch @@ -5606,6 +5611,7 @@ vector<T, N> acos(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Acos $x }; + case wgsl: __intrinsic_asm "acos"; default: VECTOR_MAP_UNARY(T, N, acos, x); } @@ -5613,7 +5619,7 @@ vector<T, N> acos(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> acos(matrix<T, N, M> x) { __target_switch @@ -5629,7 +5635,7 @@ matrix<T, N, M> acos(matrix<T, N, M> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T acosh(T x) { __target_switch @@ -5641,6 +5647,7 @@ T acosh(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Acosh $x }; + case wgsl: __intrinsic_asm "acosh"; default: return log(x + sqrt( x * x - T(1))); } @@ -5649,7 +5656,7 @@ T acosh(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] -[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> acosh(vector<T,N> x) { __target_switch @@ -5659,6 +5666,7 @@ vector<T,N> acosh(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Acosh $x }; + case wgsl: __intrinsic_asm "acosh"; default: VECTOR_MAP_UNARY(T, N, acosh, x); } @@ -6056,7 +6064,7 @@ matrix<float,N,M> asfloat(matrix<float,N,M> x) // Inverse sine (HLSL SM 1.0) __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 asin(T x) { __target_switch @@ -6069,12 +6077,13 @@ T asin(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Asin $x }; + case wgsl: __intrinsic_asm "asin"; } } __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> asin(vector<T, N> x) { __target_switch @@ -6085,6 +6094,7 @@ vector<T, N> asin(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Asin $x }; + case wgsl: __intrinsic_asm "asin"; default: VECTOR_MAP_UNARY(T,N,asin,x); } @@ -6092,7 +6102,7 @@ vector<T, N> asin(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> asin(matrix<T, N, M> x) { __target_switch @@ -6108,7 +6118,7 @@ matrix<T, N, M> asin(matrix<T, N, M> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T asinh(T x) { __target_switch @@ -6120,6 +6130,7 @@ T asinh(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Asinh $x }; + case wgsl: __intrinsic_asm "asinh"; default: return log(x + sqrt(x * x + T(1))); } @@ -6128,7 +6139,7 @@ T asinh(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] -[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> asinh(vector<T,N> x) { __target_switch @@ -6138,6 +6149,7 @@ vector<T,N> asinh(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Asinh $x }; + case wgsl: __intrinsic_asm "asinh"; default: VECTOR_MAP_UNARY(T, N, asinh, x); } @@ -6601,7 +6613,7 @@ matrix<float16_t,R,C> asfloat16<let R : int, let C : int>(matrix<int16_t,R,C> va // Inverse tangent (HLSL SM 1.0) __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 atan(T x) { __target_switch @@ -6614,12 +6626,13 @@ T atan(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Atan $x }; + case wgsl: __intrinsic_asm "atan"; } } __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> atan(vector<T, N> x) { __target_switch @@ -6630,6 +6643,7 @@ vector<T, N> atan(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Atan $x }; + case wgsl: __intrinsic_asm "atan"; default: VECTOR_MAP_UNARY(T, N, atan, x); } @@ -6637,7 +6651,7 @@ vector<T, N> atan(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> atan(matrix<T, N, M> x) { __target_switch @@ -6650,7 +6664,7 @@ matrix<T, N, M> atan(matrix<T, N, M> x) __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 atan2(T y, T x) { __target_switch @@ -6663,12 +6677,13 @@ T atan2(T y, T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Atan2 $y $x }; + case wgsl: __intrinsic_asm "atan2"; } } __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> atan2(vector<T, N> y, vector<T, N> x) { __target_switch @@ -6679,6 +6694,7 @@ vector<T, N> atan2(vector<T, N> y, vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Atan2 $y $x }; + case wgsl: __intrinsic_asm "atan2"; default: VECTOR_MAP_BINARY(T, N, atan2, y, x); } @@ -6686,7 +6702,7 @@ vector<T, N> atan2(vector<T, N> y, vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> atan2(matrix<T,N,M> y, matrix<T,N,M> x) { __target_switch @@ -6702,7 +6718,7 @@ matrix<T,N,M> atan2(matrix<T,N,M> y, matrix<T,N,M> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T atanh(T x) { __target_switch @@ -6714,6 +6730,7 @@ T atanh(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Atanh $x }; + case wgsl: __intrinsic_asm "atanh"; default: return T(0.5) * log((T(1) + x) / (T(1) - x)); } @@ -6722,7 +6739,7 @@ T atanh(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] -[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> atanh(vector<T,N> x) { __target_switch @@ -6732,6 +6749,7 @@ vector<T,N> atanh(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Atanh $x }; + case wgsl: __intrinsic_asm "atanh"; default: VECTOR_MAP_UNARY(T, N, atanh, x); } @@ -6740,7 +6758,7 @@ vector<T,N> atanh(vector<T,N> x) // Ceiling (HLSL SM 1.0) __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 ceil(T x) { __target_switch @@ -6753,12 +6771,13 @@ T ceil(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Ceil $x }; + case wgsl: __intrinsic_asm "ceil"; } } __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> ceil(vector<T, N> x) { __target_switch @@ -6769,6 +6788,7 @@ vector<T, N> ceil(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Ceil $x }; + case wgsl: __intrinsic_asm "ceil"; default: VECTOR_MAP_UNARY(T, N, ceil, x); } @@ -6776,7 +6796,7 @@ vector<T, N> ceil(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> ceil(matrix<T, N, M> x) { __target_switch @@ -6883,7 +6903,7 @@ bool CheckAccessFullyMapped(out uint status) // Clamp (HLSL SM 1.0) __generic<T : __BuiltinIntegerType> [__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 clamp(T x, T minBound, T maxBound) { __target_switch @@ -6900,6 +6920,7 @@ T clamp(T x, T minBound, T maxBound) return spirv_asm { result:$$T = OpExtInst glsl450 UClamp $x $minBound $maxBound }; + case wgsl: __intrinsic_asm "clamp"; default: return min(max(x, minBound), maxBound); } @@ -6907,7 +6928,7 @@ T clamp(T x, T minBound, T maxBound) __generic<T : __BuiltinIntegerType, 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> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound) { __target_switch @@ -6924,6 +6945,7 @@ vector<T, N> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound) return spirv_asm { result:$$vector<T, N> = OpExtInst glsl450 UClamp $x $minBound $maxBound }; + case wgsl: __intrinsic_asm "clamp"; default: return min(max(x, minBound), maxBound); } @@ -6931,7 +6953,7 @@ vector<T, N> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound) __generic<T : __BuiltinIntegerType, let N : int, let M : 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)] matrix<T,N,M> clamp(matrix<T,N,M> x, matrix<T,N,M> minBound, matrix<T,N,M> maxBound) { __target_switch @@ -6944,7 +6966,7 @@ matrix<T,N,M> clamp(matrix<T,N,M> x, matrix<T,N,M> minBound, matrix<T,N,M> maxBo __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 clamp(T x, T minBound, T maxBound) { __target_switch @@ -6955,6 +6977,7 @@ T clamp(T x, T minBound, T maxBound) case spirv: return spirv_asm { result:$$T = OpExtInst glsl450 FClamp $x $minBound $maxBound }; + case wgsl: __intrinsic_asm "clamp"; default: return min(max(x, minBound), maxBound); } @@ -6962,7 +6985,7 @@ T clamp(T x, T minBound, T maxBound) __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> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound) { __target_switch @@ -6973,6 +6996,7 @@ vector<T, N> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound) case spirv: return spirv_asm { result:$$vector<T,N> = OpExtInst glsl450 FClamp $x $minBound $maxBound }; + case wgsl: __intrinsic_asm "clamp"; default: return min(max(x, minBound), maxBound); } @@ -6980,7 +7004,7 @@ vector<T, N> clamp(vector<T, N> x, vector<T, N> minBound, vector<T, N> maxBound) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> clamp(matrix<T,N,M> x, matrix<T,N,M> minBound, matrix<T,N,M> maxBound) { __target_switch @@ -7041,16 +7065,16 @@ T cos(T x) case glsl: __intrinsic_asm "cos"; case hlsl: __intrinsic_asm "cos"; case metal: __intrinsic_asm "cos"; - case wgsl: __intrinsic_asm "cos"; case spirv: return spirv_asm { OpExtInst $$T result glsl450 Cos $x }; + case wgsl: __intrinsic_asm "cos"; } } __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> cos(vector<T, N> x) { __target_switch @@ -7061,6 +7085,7 @@ vector<T, N> cos(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Cos $x }; + case wgsl: __intrinsic_asm "cos"; default: VECTOR_MAP_UNARY(T,N, cos, x); } @@ -7068,7 +7093,7 @@ vector<T, N> cos(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> cos(matrix<T, N, M> x) { __target_switch @@ -7082,7 +7107,7 @@ matrix<T, N, M> cos(matrix<T, N, M> x) // Hyperbolic cosine __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 cosh(T x) { __target_switch @@ -7095,12 +7120,13 @@ T cosh(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Cosh $x }; + case wgsl: __intrinsic_asm "cosh"; } } __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> cosh(vector<T,N> x) { __target_switch @@ -7111,6 +7137,7 @@ vector<T,N> cosh(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Cosh $x }; + case wgsl: __intrinsic_asm "cosh"; default: VECTOR_MAP_UNARY(T,N, cosh, x); } @@ -7118,7 +7145,7 @@ vector<T,N> cosh(vector<T,N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> cosh(matrix<T, N, M> x) { __target_switch @@ -7133,7 +7160,7 @@ matrix<T, N, M> cosh(matrix<T, N, M> x) __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 cospi(T x) { __target_switch @@ -7146,7 +7173,7 @@ T cospi(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> cospi(vector<T,N> x) { __target_switch @@ -7205,7 +7232,7 @@ vector<uint, N> countbits(vector<uint, N> value) // TODO: SPIRV does not support integer vectors. __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)] vector<T,3> cross(vector<T,3> left, vector<T,3> right) { __target_switch @@ -7216,6 +7243,7 @@ vector<T,3> cross(vector<T,3> left, vector<T,3> right) case spirv: return spirv_asm { OpExtInst $$vector<T,3> result glsl450 Cross $left $right }; + case wgsl: __intrinsic_asm "cross"; default: return vector<T,3>( left.y * right.z - left.z * right.y, @@ -7226,7 +7254,7 @@ vector<T,3> cross(vector<T,3> left, vector<T,3> right) __generic<T : __BuiltinIntegerType> [__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, 3> cross(vector<T, 3> left, vector<T, 3> right) { __target_switch @@ -7236,6 +7264,7 @@ vector<T, 3> cross(vector<T, 3> left, vector<T, 3> right) case spirv: return spirv_asm { OpExtInst $$vector<T, 3> result glsl450 Cross $left $right }; + case wgsl: __intrinsic_asm "cross"; default: return vector<T, 3>( left.y * right.z - left.z * right.y, @@ -7436,7 +7465,7 @@ T degrees(T x) __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl)] vector<T, N> degrees(vector<T, N> x) { __target_switch @@ -7446,6 +7475,7 @@ vector<T, N> degrees(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Degrees $x }; + case wgsl: __intrinsic_asm "degrees"; default: VECTOR_MAP_UNARY(T, N, degrees, x); } @@ -7453,7 +7483,7 @@ vector<T, N> degrees(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl)] matrix<T, N, M> degrees(matrix<T, N, M> x) { __target_switch @@ -7469,7 +7499,7 @@ matrix<T, N, M> degrees(matrix<T, N, M> x) __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] [PreferCheckpoint] -[require(glsl_hlsl_metal_spirv)] +[require(glsl_hlsl_metal_spirv_wgsl)] T determinant(matrix<T,N,N> m) { __target_switch @@ -7480,6 +7510,7 @@ T determinant(matrix<T,N,N> m) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Determinant $m }; + case wgsl: __intrinsic_asm "determinant"; } } @@ -7522,7 +7553,7 @@ void DeviceMemoryBarrierWithGroupSync() __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)] T distance(vector<T, N> x, vector<T, N> y) { __target_switch @@ -7533,6 +7564,7 @@ T distance(vector<T, N> x, vector<T, N> y) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Distance $x $y }; + case wgsl: __intrinsic_asm "distance"; default: return length(x - y); } @@ -7540,7 +7572,7 @@ T distance(vector<T, N> x, vector<T, N> y) __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 distance(T x, T y) { __target_switch @@ -7549,6 +7581,7 @@ T distance(T x, T y) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Distance $x $y }; + case wgsl: __intrinsic_asm "distance"; default: return length(x - y); } @@ -7616,13 +7649,14 @@ vector<T,N> divide(vector<T,N> x, vector<T,N> y) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T dot(T x, T y) { __target_switch { case glsl: __intrinsic_asm "dot"; case hlsl: __intrinsic_asm "dot"; + case wgsl: __intrinsic_asm "dot"; default: return x * y; } @@ -7630,7 +7664,7 @@ T dot(T x, T y) __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)] T dot(vector<T, N> x, vector<T, N> y) { __target_switch @@ -7641,6 +7675,7 @@ T dot(vector<T, N> x, vector<T, N> y) case spirv: return spirv_asm { OpDot $$T result $x $y }; + case wgsl: __intrinsic_asm "dot"; default: T result = T(0); for(int i = 0; i < N; ++i) @@ -7651,12 +7686,13 @@ T dot(vector<T, N> x, vector<T, N> y) __generic<T : __BuiltinIntegerType, 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)] T dot(vector<T, N> x, vector<T, N> y) { __target_switch { case hlsl: __intrinsic_asm "dot"; + case wgsl: __intrinsic_asm "dot"; default: T result = T(0); for(int i = 0; i < N; ++i) @@ -7841,7 +7877,7 @@ matrix<T,N,M> EvaluateAttributeSnapped(matrix<T,N,M> x, int2 offset) __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 exp(T x) { __target_switch @@ -7854,12 +7890,13 @@ T exp(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Exp $x }; + case wgsl: __intrinsic_asm "exp"; } } __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> exp(vector<T, N> x) { __target_switch @@ -7870,6 +7907,7 @@ vector<T, N> exp(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Exp $x }; + case wgsl: __intrinsic_asm "exp"; default: VECTOR_MAP_UNARY(T, N, exp, x); } @@ -7877,7 +7915,7 @@ vector<T, N> exp(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> exp(matrix<T, N, M> x) { __target_switch @@ -7892,7 +7930,7 @@ matrix<T, N, M> exp(matrix<T, N, M> x) __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 exp2(T x) { __target_switch @@ -7918,13 +7956,15 @@ T exp2(T x) __intrinsic_asm "$P_exp2($0)"; case cuda: __intrinsic_asm "$P_exp2($0)"; + case wgsl: + __intrinsic_asm "exp2"; } } __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> exp2(vector<T,N> x) { __target_switch @@ -7936,6 +7976,7 @@ vector<T,N> exp2(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Exp2 $x }; + case wgsl: __intrinsic_asm "exp2"; default: VECTOR_MAP_UNARY(T, N, exp2, x); } @@ -7943,7 +7984,7 @@ vector<T,N> exp2(vector<T,N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> exp2(matrix<T,N,M> x) { __target_switch @@ -7958,7 +7999,7 @@ matrix<T,N,M> exp2(matrix<T,N,M> x) __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 exp10(T x) { __target_switch @@ -7972,7 +8013,7 @@ T exp10(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> exp10(vector<T,N> x) { __target_switch @@ -8324,7 +8365,7 @@ vector<uint,N> firstbitlow(vector<uint,N> value) __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 floor(T x) { __target_switch @@ -8337,12 +8378,13 @@ T floor(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Floor $x }; + case wgsl: __intrinsic_asm "floor"; } } __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> floor(vector<T, N> x) { __target_switch @@ -8353,6 +8395,7 @@ vector<T, N> floor(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Floor $x }; + case wgsl: __intrinsic_asm "floor"; default: VECTOR_MAP_UNARY(T, N, floor, x); } @@ -8360,7 +8403,7 @@ vector<T, N> floor(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> floor(matrix<T, N, M> x) { __target_switch @@ -8374,7 +8417,7 @@ matrix<T, N, M> floor(matrix<T, N, M> x) // Fused multiply-add __generic<T : __BuiltinFloatingPointType> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, shader5_sm_5_0)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, shader5_sm_5_0)] T fma(T a, T b, T c) { __target_switch @@ -8391,6 +8434,7 @@ T fma(T a, T b, T c) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Fma $a $b $c }; + case wgsl: __intrinsic_asm "fma"; default: return a*b + c; } @@ -8398,7 +8442,7 @@ T fma(T a, T b, T c) __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, shader5_sm_5_0)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, shader5_sm_5_0)] vector<T, N> fma(vector<T, N> a, vector<T, N> b, vector<T, N> c) { __target_switch @@ -8409,6 +8453,7 @@ vector<T, N> fma(vector<T, N> a, vector<T, N> b, vector<T, N> c) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Fma $a $b $c }; + case wgsl: __intrinsic_asm "fma"; default: VECTOR_MAP_TRINARY(T, N, fma, a, b, c); } @@ -8416,7 +8461,7 @@ vector<T, N> fma(vector<T, N> a, vector<T, N> b, vector<T, N> c) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, shader5_sm_5_0)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, shader5_sm_5_0)] matrix<T, N, M> fma(matrix<T, N, M> a, matrix<T, N, M> b, matrix<T, N, M> c) { __target_switch @@ -8431,7 +8476,7 @@ matrix<T, N, M> fma(matrix<T, N, M> a, matrix<T, N, M> b, matrix<T, N, M> c) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T fmod(T x, T y) { // In HLSL, `fmod` returns a remainder. @@ -8496,13 +8541,15 @@ T fmod(T x, T y) { result:$$T = OpFRem $x $y }; + case wgsl: + __intrinsic_asm "(($0) % ($1))"; } } __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] [ForceInline] -[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> fmod(vector<T, N> x, vector<T, N> y) { __target_switch @@ -8519,7 +8566,7 @@ vector<T, N> fmod(vector<T, N> x, vector<T, N> y) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] matrix<T, N, M> fmod(matrix<T, N, M> x, matrix<T, N, M> y) { __target_switch @@ -8533,7 +8580,7 @@ matrix<T, N, M> fmod(matrix<T, N, M> x, matrix<T, N, M> y) // Fractional part __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 frac(T x) { __target_switch @@ -8546,12 +8593,13 @@ T frac(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Fract $x }; + case wgsl: __intrinsic_asm "fract"; } } __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> frac(vector<T, N> x) { __target_switch @@ -8562,6 +8610,7 @@ vector<T, N> frac(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Fract $x }; + case wgsl: __intrinsic_asm "fract"; default: VECTOR_MAP_UNARY(T, N, frac, x); } @@ -8577,7 +8626,7 @@ matrix<T, N, M> frac(matrix<T, N, M> x) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T fract(T x) { return frac(x); @@ -8586,7 +8635,7 @@ T fract(T x) __generic<T : __BuiltinFloatingPointType, let N:int> [__readNone] [ForceInline] -[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> fract(vector<T, N> x) { return frac(x); @@ -8596,7 +8645,7 @@ vector<T, N> fract(vector<T, N> x) // Split float into mantissa and exponent __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 frexp(T x, out int exp) { __target_switch @@ -8609,12 +8658,13 @@ T frexp(T x, out int exp) case spirv: return spirv_asm { result:$$T = OpExtInst glsl450 Frexp $x &exp }; + case wgsl: __intrinsic_asm "frexp"; } } __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> frexp(vector<T, N> x, out vector<int, N> exp) { __target_switch @@ -8625,6 +8675,7 @@ 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: __intrinsic_asm "frexp"; default: VECTOR_MAP_BINARY(T, N, frexp, x, exp); } @@ -8632,7 +8683,7 @@ vector<T, N> frexp(vector<T, N> x, out vector<int, N> exp) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L : 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)] matrix<T, N, M> frexp(matrix<T, N, M> x, out matrix<int, N, M, L> exp) { __target_switch @@ -9993,12 +10044,13 @@ matrix<bool, N, M> isnan(matrix<T, N, M> x) __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 ldexp(T x, T exp) { __target_switch { case hlsl: __intrinsic_asm "ldexp"; + case wgsl: __intrinsic_asm "ldexp"; default: return x * exp2(exp); } @@ -10006,12 +10058,13 @@ T ldexp(T x, T exp) __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> ldexp(vector<T, N> x, vector<T, N> exp) { __target_switch { case hlsl: __intrinsic_asm "ldexp"; + case wgsl: __intrinsic_asm "ldexp"; default: return x * exp2(exp); } @@ -10019,7 +10072,7 @@ vector<T, N> ldexp(vector<T, N> x, vector<T, N> exp) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> ldexp(matrix<T, N, M> x, matrix<T, N, M> exp) { __target_switch @@ -10032,7 +10085,7 @@ matrix<T, N, M> ldexp(matrix<T, N, M> x, matrix<T, N, M> exp) __generic<T : __BuiltinFloatingPointType, E : __BuiltinIntegerType> [__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 ldexp(T x, E exp) { __target_switch @@ -10043,6 +10096,7 @@ T ldexp(T x, E exp) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Ldexp $x $exp }; + case wgsl: __intrinsic_asm "ldexp"; default: return ldexp(x, __realCast<T>(exp)); } @@ -10050,7 +10104,7 @@ T ldexp(T x, E exp) __generic<T : __BuiltinFloatingPointType, E : __BuiltinIntegerType, 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> ldexp(vector<T, N> x, vector<E, N> exp) { __target_switch @@ -10061,6 +10115,7 @@ vector<T, N> ldexp(vector<T, N> x, vector<E, N> exp) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Ldexp $x $exp }; + case wgsl: __intrinsic_asm "ldexp"; default: vector<T,N> temp; [ForceUnroll] @@ -10074,7 +10129,7 @@ vector<T, N> ldexp(vector<T, N> x, vector<E, N> exp) // Vector length __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)] T length(vector<T, N> x) { __target_switch @@ -10085,6 +10140,7 @@ T length(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Length $x }; + case wgsl: __intrinsic_asm "length"; default: return sqrt(dot(x, x)); } @@ -10092,7 +10148,7 @@ T length(vector<T, N> x) // Scalar float length __generic<T : __BuiltinFloatingPointType> -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T length(T x) { __target_switch @@ -10101,6 +10157,7 @@ T length(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Length $x }; + case wgsl: __intrinsic_asm "length"; default: return abs(x); } @@ -10175,7 +10232,7 @@ float4 lit(float n_dot_l, float n_dot_h, float m) // Base-e logarithm __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 log(T x) { __target_switch @@ -10188,12 +10245,13 @@ T log(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Log $x }; + case wgsl: __intrinsic_asm "log"; } } __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> log(vector<T, N> x) { __target_switch @@ -10204,6 +10262,7 @@ vector<T, N> log(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Log $x }; + case wgsl: __intrinsic_asm "log"; default: VECTOR_MAP_UNARY(T, N, log, x); } @@ -10211,7 +10270,7 @@ vector<T, N> log(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> log(matrix<T, N, M> x) { __target_switch @@ -10285,7 +10344,7 @@ matrix<T,N,M> log10(matrix<T,N,M> x) // Base-2 logarithm __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 log2(T x) { __target_switch @@ -10298,12 +10357,13 @@ T log2(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Log2 $x }; + case wgsl: __intrinsic_asm "log2"; } } __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> log2(vector<T,N> x) { __target_switch @@ -10314,6 +10374,7 @@ vector<T,N> log2(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Log2 $x }; + case wgsl: __intrinsic_asm "log2"; default: VECTOR_MAP_UNARY(T, N, log2, x); } @@ -10321,7 +10382,7 @@ vector<T,N> log2(vector<T,N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> log2(matrix<T,N,M> x) { __target_switch @@ -10447,7 +10508,6 @@ T max(T x, T y) case hlsl: __intrinsic_asm "max"; case glsl: __intrinsic_asm "max"; case metal: __intrinsic_asm "max"; - case wgsl: __intrinsic_asm "max"; case cuda: __intrinsic_asm "$P_max($0, $1)"; case cpp: __intrinsic_asm "$P_max($0, $1)"; case spirv: @@ -10465,12 +10525,13 @@ T max(T x, T y) }; } } + case wgsl: __intrinsic_asm "max"; } } __generic<T : __BuiltinIntegerType, 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> max(vector<T, N> x, vector<T, N> y) { __target_switch @@ -10493,6 +10554,7 @@ vector<T, N> max(vector<T, N> x, vector<T, N> y) }; } } + case wgsl: __intrinsic_asm "max"; default: VECTOR_MAP_BINARY(T, N, max, x, y); } @@ -10500,7 +10562,7 @@ vector<T, N> max(vector<T, N> x, vector<T, N> y) __generic<T : __BuiltinIntegerType, let N : int, let M : 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)] matrix<T, N, M> max(matrix<T, N, M> x, matrix<T, N, M> y) { __target_switch @@ -10513,7 +10575,7 @@ matrix<T, N, M> max(matrix<T, N, M> x, matrix<T, N, M> y) __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 max(T x, T y) { __target_switch @@ -10526,12 +10588,13 @@ T max(T x, T y) case spirv: return spirv_asm { result:$$T = OpExtInst glsl450 FMax $x $y }; + case wgsl: __intrinsic_asm "max"; } } __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> max(vector<T, N> x, vector<T, N> y) { __target_switch @@ -10542,6 +10605,7 @@ vector<T, N> max(vector<T, N> x, vector<T, N> y) case spirv: return spirv_asm { result:$$vector<T, N> = OpExtInst glsl450 FMax $x $y }; + case wgsl: __intrinsic_asm "max"; default: VECTOR_MAP_BINARY(T, N, max, x, y); } @@ -10549,7 +10613,7 @@ vector<T, N> max(vector<T, N> x, vector<T, N> y) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> max(matrix<T, N, M> x, matrix<T, N, M> y) { __target_switch @@ -10672,7 +10736,6 @@ T min(T x, T y) case hlsl: case glsl: case metal: - case wgsl: __intrinsic_asm "min"; case cuda: case cpp: @@ -10688,12 +10751,13 @@ T min(T x, T y) result:$$T = OpExtInst glsl450 UMin $x $y }; } + case wgsl: __intrinsic_asm "min"; } } __generic<T : __BuiltinIntegerType, 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> min(vector<T,N> x, vector<T,N> y) { __target_switch @@ -10712,6 +10776,7 @@ vector<T,N> min(vector<T,N> x, vector<T,N> y) result:$$vector<T,N> = OpExtInst glsl450 UMin $x $y }; } + case wgsl: __intrinsic_asm "min"; default: VECTOR_MAP_BINARY(T, N, min, x, y); } @@ -10719,7 +10784,7 @@ vector<T,N> min(vector<T,N> x, vector<T,N> y) __generic<T : __BuiltinIntegerType, let N : int, let M : 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)] matrix<T,N,M> min(matrix<T,N,M> x, matrix<T,N,M> y) { __target_switch @@ -10732,7 +10797,7 @@ matrix<T,N,M> min(matrix<T,N,M> x, matrix<T,N,M> y) __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 min(T x, T y) { __target_switch @@ -10745,12 +10810,13 @@ T min(T x, T y) case spirv: return spirv_asm { result:$$T = OpExtInst glsl450 FMin $x $y }; + case wgsl: __intrinsic_asm "min"; } } __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> min(vector<T,N> x, vector<T,N> y) { __target_switch @@ -10761,6 +10827,7 @@ vector<T,N> min(vector<T,N> x, vector<T,N> y) case spirv: return spirv_asm { result:$$vector<T,N> = OpExtInst glsl450 FMin $x $y }; + case wgsl: __intrinsic_asm "min"; default: VECTOR_MAP_BINARY(T, N, min, x, y); } @@ -10768,7 +10835,7 @@ vector<T,N> min(vector<T,N> x, vector<T,N> y) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> min(matrix<T,N,M> x, matrix<T,N,M> y) { __target_switch @@ -10975,7 +11042,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] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] T modf(T x, out T ip) { __target_switch @@ -10988,12 +11055,13 @@ T modf(T x, out T ip) case spirv: return spirv_asm { result:$$T = OpExtInst glsl450 Modf $x &ip }; + case wgsl: __intrinsic_asm "modf"; } } __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> modf(vector<T,N> x, out vector<T,N> ip) { __target_switch @@ -11004,6 +11072,7 @@ 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: __intrinsic_asm "modf"; default: VECTOR_MAP_BINARY(T, N, modf, x, ip); } @@ -11011,7 +11080,7 @@ vector<T,N> modf(vector<T,N> x, out vector<T,N> ip) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L : 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)] matrix<T,N,M> modf(matrix<T,N,M> x, out matrix<T,N,M,L> ip) { __target_switch @@ -11084,7 +11153,7 @@ matrix<T, N, M> mul(T x, matrix<T, N, M> y); // vector-vector (dot product) __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)] T mul(vector<T, N> x, vector<T, N> y) { __target_switch @@ -11092,13 +11161,14 @@ T mul(vector<T, N> x, vector<T, N> y) case glsl: __intrinsic_asm "dot"; case metal: __intrinsic_asm "dot"; case hlsl: __intrinsic_asm "mul"; + case wgsl: __intrinsic_asm "dot"; default: return dot(x, y); } } __generic<T : __BuiltinIntegerType, 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)] T mul(vector<T, N> x, vector<T, N> y) { __target_switch @@ -11119,11 +11189,11 @@ vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right) { case glsl: __intrinsic_asm "($1 * $0)"; case metal: __intrinsic_asm "($1 * $0)"; - case wgsl: __intrinsic_asm "($1 * $0)"; case hlsl: __intrinsic_asm "mul"; case spirv: return spirv_asm { OpMatrixTimesVector $$vector<T, M> result $right $left }; + case wgsl: __intrinsic_asm "($1 * $0)"; default: vector<T,M> result; for( int j = 0; j < M; ++j ) @@ -11140,7 +11210,7 @@ vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right) } __generic<T : __BuiltinIntegerType, let N : int, let M : 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, M> mul(vector<T, N> left, matrix<T, N, M> right) { __target_switch @@ -11148,6 +11218,7 @@ vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right) case glsl: __intrinsic_asm "($1 * $0)"; case metal: __intrinsic_asm "($1 * $0)"; case hlsl: __intrinsic_asm "mul"; + case wgsl: __intrinsic_asm "($1 * $0)"; default: vector<T,M> result; for( int j = 0; j < M; ++j ) @@ -11164,7 +11235,7 @@ vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right) } __generic<T : __BuiltinLogicalType, let N : int, let M : 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, M> mul(vector<T, N> left, matrix<T, N, M> right) { __target_switch @@ -11172,6 +11243,7 @@ vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right) case glsl: __intrinsic_asm "($1 * $0)"; case metal: __intrinsic_asm "($1 * $0)"; case hlsl: __intrinsic_asm "mul"; + case wgsl: __intrinsic_asm "($1 * $0)"; default: vector<T,M> result; for( int j = 0; j < M; ++j ) @@ -11190,7 +11262,7 @@ vector<T, M> mul(vector<T, N> left, matrix<T, N, M> right) // matrix-vector __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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> mul(matrix<T,N,M> left, vector<T,M> right) { __target_switch @@ -11201,6 +11273,7 @@ vector<T,N> mul(matrix<T,N,M> left, vector<T,M> right) case spirv: return spirv_asm { OpVectorTimesMatrix $$vector<T,N> result $right $left }; + case wgsl: __intrinsic_asm "($1 * $0)"; default: vector<T,N> result; for( int i = 0; i < N; ++i ) @@ -11217,7 +11290,7 @@ vector<T,N> mul(matrix<T,N,M> left, vector<T,M> right) } __generic<T : __BuiltinIntegerType, let N : int, let M : 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> mul(matrix<T,N,M> left, vector<T,M> right) { __target_switch @@ -11225,6 +11298,7 @@ vector<T,N> mul(matrix<T,N,M> left, vector<T,M> right) case glsl: __intrinsic_asm "($1 * $0)"; case metal: __intrinsic_asm "($1 * $0)"; case hlsl: __intrinsic_asm "mul"; + case wgsl: __intrinsic_asm "($1 * $0)"; default: vector<T,N> result; for( int i = 0; i < N; ++i ) @@ -11242,7 +11316,7 @@ vector<T,N> mul(matrix<T,N,M> left, vector<T,M> right) __generic<T : __BuiltinLogicalType, let N : int, let M : int> [__readNone] [OverloadRank(-1)] -[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> mul(matrix<T,N,M> left, vector<T,M> right) { __target_switch @@ -11250,6 +11324,7 @@ vector<T,N> mul(matrix<T,N,M> left, vector<T,M> right) case glsl: __intrinsic_asm "($1 * $0)"; case metal: __intrinsic_asm "($1 * $0)"; case hlsl: __intrinsic_asm "mul"; + case wgsl: __intrinsic_asm "($1 * $0)"; default: vector<T,N> result; for( int i = 0; i < N; ++i ) @@ -11268,7 +11343,7 @@ vector<T,N> mul(matrix<T,N,M> left, vector<T,M> right) // matrix-matrix __generic<T : __BuiltinFloatingPointType, let R : int, let N : int, let C : 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)] matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) { __target_switch @@ -11279,6 +11354,7 @@ matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) case spirv: return spirv_asm { OpMatrixTimesMatrix $$matrix<T,R,C> result $right $left }; + case wgsl: __intrinsic_asm "($1 * $0)"; default: matrix<T,R,C> result; for( int r = 0; r < R; ++r) @@ -11296,7 +11372,7 @@ matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) } __generic<T : __BuiltinIntegerType, let R : int, let N : int, let C : 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)] matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) { __target_switch @@ -11304,6 +11380,7 @@ matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) case glsl: __intrinsic_asm "($1 * $0)"; case metal: __intrinsic_asm "($1 * $0)"; case hlsl: __intrinsic_asm "mul"; + case wgsl: __intrinsic_asm "($1 * $0)"; default: matrix<T,R,C> result; for( int r = 0; r < R; ++r) @@ -11321,7 +11398,7 @@ matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) } __generic<T : __BuiltinLogicalType, let R : int, let N : int, let C : 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)] matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) { __target_switch @@ -11329,6 +11406,7 @@ matrix<T,R,C> mul(matrix<T,R,N> left, matrix<T,N,C> right) case glsl: __intrinsic_asm "($1 * $0)"; case metal: __intrinsic_asm "($1 * $0)"; case hlsl: __intrinsic_asm "mul"; + case wgsl: __intrinsic_asm "($1 * $0)"; default: matrix<T,R,C> result; for( int r = 0; r < R; ++r) @@ -11452,7 +11530,7 @@ T NonUniformResourceIndex<T>(T value) { return value; } // Normalize a vector __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> normalize(vector<T,N> x) { __target_switch @@ -11463,6 +11541,7 @@ vector<T,N> normalize(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Normalize $x }; + case wgsl: __intrinsic_asm "normalize"; default: return x / length(x); } @@ -11470,7 +11549,7 @@ vector<T,N> normalize(vector<T,N> x) __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 normalize(T x) { __target_switch @@ -11481,6 +11560,7 @@ T normalize(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Normalize $x }; + case wgsl: __intrinsic_asm "normalize"; default: return x / length(x); } @@ -11489,7 +11569,7 @@ T normalize(T x) // Raise to a power __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 pow(T x, T y) { __target_switch @@ -11502,12 +11582,13 @@ T pow(T x, T y) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Pow $x $y }; + case wgsl: __intrinsic_asm "pow"; } } __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> pow(vector<T, N> x, vector<T, N> y) { __target_switch @@ -11518,6 +11599,7 @@ vector<T, N> pow(vector<T, N> x, vector<T, N> y) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Pow $x $y }; + case wgsl: __intrinsic_asm "pow"; default: VECTOR_MAP_BINARY(T, N, pow, x, y); } @@ -11525,7 +11607,7 @@ vector<T, N> pow(vector<T, N> x, vector<T, N> y) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> pow(matrix<T,N,M> x, matrix<T,N,M> y) { __target_switch @@ -11538,7 +11620,7 @@ matrix<T,N,M> pow(matrix<T,N,M> x, matrix<T,N,M> y) __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 powr(T x, T y) { __target_switch @@ -11551,7 +11633,7 @@ T powr(T x, T y) __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> powr(vector<T, N> x, vector<T, N> y) { __target_switch @@ -11697,7 +11779,7 @@ void ProcessTriTessFactorsMin( // Degrees to radians __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 radians(T x) { __target_switch @@ -11707,6 +11789,7 @@ T radians(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Radians $x }; + case wgsl: __intrinsic_asm "radians"; default: return x * (T.getPi() / T(180.0f)); } @@ -11714,7 +11797,7 @@ T radians(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> radians(vector<T, N> x) { __target_switch @@ -11724,6 +11807,7 @@ vector<T, N> radians(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Radians $x }; + case wgsl: __intrinsic_asm "radians"; default: return x * (T.getPi() / T(180.0f)); } @@ -11731,7 +11815,7 @@ vector<T, N> radians(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> radians(matrix<T, N, M> x) { __target_switch @@ -11745,7 +11829,7 @@ matrix<T, N, M> radians(matrix<T, N, M> x) // Approximate reciprocal __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 rcp(T x) { __target_switch @@ -11758,7 +11842,7 @@ T rcp(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> rcp(vector<T, N> x) { __target_switch @@ -11766,6 +11850,7 @@ vector<T, N> rcp(vector<T, N> x) case hlsl: __intrinsic_asm "rcp"; case glsl: case spirv: + case wgsl: return T(1.0) / x; default: VECTOR_MAP_UNARY(T, N, rcp, x); @@ -11774,7 +11859,7 @@ vector<T, N> rcp(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> rcp(matrix<T, N, M> x) { __target_switch @@ -11788,7 +11873,7 @@ matrix<T, N, M> rcp(matrix<T, N, M> x) // Reflect incident vector across plane with given normal __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 reflect(T i, T n) { __target_switch @@ -11799,6 +11884,7 @@ T reflect(T i, T n) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Reflect $i $n }; + case wgsl: __intrinsic_asm "reflect"; default: return i - T(2) * dot(n,i) * n; } @@ -11806,7 +11892,7 @@ T reflect(T i, T n) __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> reflect(vector<T,N> i, vector<T,N> n) { __target_switch @@ -11817,6 +11903,7 @@ vector<T,N> reflect(vector<T,N> i, vector<T,N> n) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Reflect $i $n }; + case wgsl: __intrinsic_asm "reflect"; default: return i - T(2) * dot(n,i) * n; } @@ -11825,7 +11912,7 @@ vector<T,N> reflect(vector<T,N> i, vector<T,N> n) // Refract incident vector given surface normal and index of refraction __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> refract(vector<T,N> i, vector<T,N> n, T eta) { __target_switch @@ -11836,6 +11923,7 @@ vector<T,N> refract(vector<T,N> i, vector<T,N> n, T eta) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Refract $i $n $eta }; + case wgsl: __intrinsic_asm "refract"; default: let dotNI = dot(n,i); let k = T(1) - eta*eta*(T(1) - dotNI * dotNI); @@ -11846,7 +11934,7 @@ vector<T,N> refract(vector<T,N> i, vector<T,N> n, T eta) __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 refract(T i, T n, T eta) { __target_switch @@ -11857,6 +11945,7 @@ T refract(T i, T n, T eta) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Refract $i $n $eta }; + case wgsl: __intrinsic_asm "refract"; default: let dotNI = dot(n,i); let k = T(1) - eta*eta*(T(1) - dotNI * dotNI); @@ -11867,7 +11956,7 @@ T refract(T i, T n, T eta) // Reverse order of bits [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, shader5_sm_5_0)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, shader5_sm_5_0)] uint reversebits(uint value) { __target_switch @@ -11883,12 +11972,13 @@ uint reversebits(uint value) __intrinsic_asm "reverse_bits"; case spirv: return spirv_asm {OpBitReverse $$uint result $value}; + case wgsl: __intrinsic_asm "reverseBits"; } } __generic<let N : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_metal_spirv, shader5_sm_5_0)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, shader5_sm_5_0)] vector<uint, N> reversebits(vector<uint, N> value) { __target_switch @@ -11901,6 +11991,7 @@ vector<uint, N> reversebits(vector<uint, N> value) __intrinsic_asm "reverse_bits"; case spirv: return spirv_asm {OpBitReverse $$vector<uint, N> result $value}; + case wgsl: __intrinsic_asm "reverseBits"; } } @@ -11957,7 +12048,7 @@ vector<T,N> rint(vector<T,N> x) // Round-to-nearest __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 round(T x) { __target_switch @@ -11970,12 +12061,13 @@ T round(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Round $x }; + case wgsl: __intrinsic_asm "round"; } } __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> round(vector<T, N> x) { __target_switch @@ -11986,6 +12078,7 @@ vector<T, N> round(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Round $x }; + case wgsl: __intrinsic_asm "round"; default: VECTOR_MAP_UNARY(T, N, round, x); } @@ -11993,7 +12086,7 @@ vector<T, N> round(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> round(matrix<T,N,M> x) { __target_switch @@ -12007,7 +12100,7 @@ matrix<T,N,M> round(matrix<T,N,M> x) // Reciprocal of square root __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 rsqrt(T x) { __target_switch @@ -12027,7 +12120,7 @@ T rsqrt(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> rsqrt(vector<T, N> x) { __target_switch @@ -12045,7 +12138,7 @@ vector<T, N> rsqrt(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> rsqrt(matrix<T, N, M> x) { __target_switch @@ -12060,13 +12153,14 @@ matrix<T, N, M> rsqrt(matrix<T, N, M> x) __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 saturate(T x) { __target_switch { case hlsl: __intrinsic_asm "saturate"; case metal: __intrinsic_asm "saturate"; + case wgsl: __intrinsic_asm "saturate"; default: return clamp<T>(x, T(0), T(1)); } @@ -12074,13 +12168,14 @@ T saturate(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> saturate(vector<T,N> x) { __target_switch { case hlsl: __intrinsic_asm "saturate"; case metal: __intrinsic_asm "saturate"; + case wgsl: __intrinsic_asm "saturate"; default: return clamp<T,N>(x, vector<T,N>(T(0)), @@ -12090,7 +12185,7 @@ vector<T,N> saturate(vector<T,N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> saturate(matrix<T,N,M> x) { __target_switch @@ -12131,6 +12226,7 @@ int sign(T x) }; else return __int_cast<int>(spirv_asm {OpExtInst $$T result glsl450 SSign $x}); + case wgsl: __intrinsic_asm "sign"; } } @@ -12154,6 +12250,7 @@ vector<int, N> sign(vector<T, N> x) }; else return __int_cast<int>(spirv_asm {OpExtInst $$vector<T,N> result glsl450 SSign $x}); + case wgsl: __intrinsic_asm "sign"; default: VECTOR_MAP_UNARY(int, N, sign, x); } @@ -12161,7 +12258,7 @@ vector<int, N> sign(vector<T, N> x) __generic<T : __BuiltinSignedArithmeticType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_spirv_wgsl, sm_4_0_version)] matrix<int, N, M> sign(matrix<T, N, M> x) { __target_switch @@ -12186,16 +12283,16 @@ T sin(T x) case glsl: __intrinsic_asm "sin"; case hlsl: __intrinsic_asm "sin"; case metal: __intrinsic_asm "sin"; - case wgsl: __intrinsic_asm "sin"; case spirv: return spirv_asm { OpExtInst $$T result glsl450 Sin $x }; + case wgsl: __intrinsic_asm "sin"; } } __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> sin(vector<T, N> x) { __target_switch @@ -12206,6 +12303,7 @@ vector<T, N> sin(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Sin $x }; + case wgsl: __intrinsic_asm "sin"; default: VECTOR_MAP_UNARY(T, N, sin, x); } @@ -12213,7 +12311,7 @@ vector<T, N> sin(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> sin(matrix<T, N, M> x) { __target_switch @@ -12250,7 +12348,7 @@ vector<T,N> __sincos_metal(vector<T,N> x, out vector<T,N> c) __generic<T : __BuiltinFloatingPointType> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] void sincos(T x, out T s, out T c) { __target_switch @@ -12270,7 +12368,7 @@ void sincos(T x, out T s, out T c) __generic<T : __BuiltinFloatingPointType, let N : int> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] void sincos(vector<T,N> x, out vector<T,N> s, out vector<T,N> c) { __target_switch @@ -12289,7 +12387,7 @@ void sincos(vector<T,N> x, out vector<T,N> s, out vector<T,N> c) __generic<T : __BuiltinFloatingPointType, let N : int, let M : int, let L1: int, let L2 : int> [__readNone] [ForceInline] -[require(cpp_cuda_glsl_hlsl_metal_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, sm_4_0_version)] void sincos(matrix<T,N,M> x, out matrix<T,N,M,L1> s, out matrix<T,N,M,L2> c) { __target_switch @@ -12304,7 +12402,7 @@ void sincos(matrix<T,N,M> x, out matrix<T,N,M,L1> s, out matrix<T,N,M,L2> c) // Hyperbolic Sine __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 sinh(T x) { __target_switch @@ -12317,12 +12415,13 @@ T sinh(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Sinh $x }; + case wgsl: __intrinsic_asm "sinh"; } } __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> sinh(vector<T, N> x) { __target_switch @@ -12333,6 +12432,7 @@ vector<T, N> sinh(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Sinh $x }; + case wgsl: __intrinsic_asm "sinh"; default: VECTOR_MAP_UNARY(T, N, sinh, x); } @@ -12340,7 +12440,7 @@ vector<T, N> sinh(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> sinh(matrix<T, N, M> x) { __target_switch @@ -12355,7 +12455,7 @@ matrix<T, N, M> sinh(matrix<T, N, M> x) __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 sinpi(T x) { __target_switch @@ -12368,7 +12468,7 @@ T sinpi(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> sinpi(vector<T,N> x) { __target_switch @@ -12383,7 +12483,7 @@ vector<T,N> sinpi(vector<T,N> x) // Smooth step (Hermite interpolation) __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 smoothstep(T min, T max, T x) { __target_switch @@ -12394,6 +12494,7 @@ T smoothstep(T min, T max, T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 SmoothStep $min $max $x }; + case wgsl: __intrinsic_asm "smoothstep"; default: let t = saturate((x - min) / (max - min)); return t * t * (T(3.0f) - (t + t)); @@ -12402,7 +12503,7 @@ T smoothstep(T min, T max, 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> smoothstep(vector<T, N> min, vector<T, N> max, vector<T, N> x) { __target_switch @@ -12413,6 +12514,7 @@ vector<T, N> smoothstep(vector<T, N> min, vector<T, N> max, vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 SmoothStep $min $max $x }; + case wgsl: __intrinsic_asm "smoothstep"; default: VECTOR_MAP_TRINARY(T, N, smoothstep, min, max, x); } @@ -12420,7 +12522,7 @@ vector<T, N> smoothstep(vector<T, N> min, vector<T, N> max, vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> smoothstep(matrix<T, N, M> min, matrix<T, N, M> max, matrix<T, N, M> x) { __target_switch @@ -12434,7 +12536,7 @@ matrix<T, N, M> smoothstep(matrix<T, N, M> min, matrix<T, N, M> max, matrix<T, N // Square root __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 sqrt(T x) { __target_switch @@ -12447,12 +12549,13 @@ T sqrt(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Sqrt $x }; + case wgsl: __intrinsic_asm "sqrt"; } } __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> sqrt(vector<T, N> x) { __target_switch @@ -12463,6 +12566,7 @@ vector<T, N> sqrt(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Sqrt $x }; + case wgsl: __intrinsic_asm "sqrt"; default: VECTOR_MAP_UNARY(T, N, sqrt, x); } @@ -12470,7 +12574,7 @@ vector<T, N> sqrt(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> sqrt(matrix<T, N, M> x) { __target_switch @@ -12484,7 +12588,7 @@ matrix<T, N, M> sqrt(matrix<T, N, M> x) // Step function __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 step(T y, T x) { __target_switch @@ -12495,6 +12599,7 @@ T step(T y, T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Step $y $x }; + case wgsl: __intrinsic_asm "step"; default: return x < y ? T(0.0f) : T(1.0f); } @@ -12502,7 +12607,7 @@ T step(T y, 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> step(vector<T,N> y, vector<T,N> x) { __target_switch @@ -12513,6 +12618,7 @@ vector<T,N> step(vector<T,N> y, vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Step $y $x }; + case wgsl: __intrinsic_asm "step"; default: VECTOR_MAP_BINARY(T, N, step, y, x); } @@ -12520,7 +12626,7 @@ vector<T,N> step(vector<T,N> y, vector<T,N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> step(matrix<T, N, M> y, matrix<T, N, M> x) { __target_switch @@ -12534,7 +12640,7 @@ matrix<T, N, M> step(matrix<T, N, M> y, matrix<T, N, M> x) // Tangent __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 tan(T x) { __target_switch @@ -12547,12 +12653,13 @@ T tan(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Tan $x }; + case wgsl: __intrinsic_asm "tan"; } } __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> tan(vector<T, N> x) { __target_switch @@ -12563,6 +12670,7 @@ vector<T, N> tan(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Tan $x }; + case wgsl: __intrinsic_asm "tan"; default: VECTOR_MAP_UNARY(T, N, tan, x); } @@ -12570,7 +12678,7 @@ vector<T, N> tan(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> tan(matrix<T, N, M> x) { __target_switch @@ -12584,7 +12692,7 @@ matrix<T, N, M> tan(matrix<T, N, M> x) // Hyperbolic tangent __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 tanh(T x) { __target_switch @@ -12597,12 +12705,13 @@ T tanh(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Tanh $x }; + case wgsl: __intrinsic_asm "tanh"; } } __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> tanh(vector<T,N> x) { __target_switch @@ -12613,6 +12722,7 @@ vector<T,N> tanh(vector<T,N> x) case spirv: return spirv_asm { OpExtInst $$vector<T,N> result glsl450 Tanh $x }; + case wgsl: __intrinsic_asm "tanh"; default: VECTOR_MAP_UNARY(T, N, tanh, x); } @@ -12620,7 +12730,7 @@ vector<T,N> tanh(vector<T,N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T,N,M> tanh(matrix<T,N,M> x) { __target_switch @@ -12635,7 +12745,7 @@ matrix<T,N,M> tanh(matrix<T,N,M> x) __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 tanpi(T x) { __target_switch @@ -12648,7 +12758,7 @@ T tanpi(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> tanpi(vector<T,N> x) { __target_switch @@ -12663,7 +12773,7 @@ vector<T,N> tanpi(vector<T,N> x) // Matrix transpose __generic<T : __BuiltinFloatingPointType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_spirv_wgsl, sm_4_0_version)] [PreferRecompute] matrix<T, M, N> transpose(matrix<T, N, M> x) { @@ -12674,6 +12784,7 @@ matrix<T, M, N> transpose(matrix<T, N, M> x) case spirv: return spirv_asm { OpTranspose $$matrix<T, M, N> result $x }; + case wgsl: __intrinsic_asm "transpose"; default: matrix<T,M,N> result; for(int r = 0; r < M; ++r) @@ -12684,7 +12795,7 @@ matrix<T, M, N> transpose(matrix<T, N, M> x) } __generic<T : __BuiltinIntegerType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_spirv_wgsl, sm_4_0_version)] [PreferRecompute] matrix<T, M, N> transpose(matrix<T, N, M> x) { @@ -12695,6 +12806,7 @@ matrix<T, M, N> transpose(matrix<T, N, M> x) case spirv: return spirv_asm { OpTranspose $$matrix<T, M, N> result $x }; + case wgsl: __intrinsic_asm "transpose"; default: matrix<T, M, N> result; for (int r = 0; r < M; ++r) @@ -12705,7 +12817,7 @@ matrix<T, M, N> transpose(matrix<T, N, M> x) } __generic<T : __BuiltinLogicalType, let N : int, let M : int> [__readNone] -[require(cpp_cuda_glsl_hlsl_spirv, sm_4_0_version)] +[require(cpp_cuda_glsl_hlsl_spirv_wgsl, sm_4_0_version)] [PreferRecompute] [OverloadRank(-1)] matrix<T, M, N> transpose(matrix<T, N, M> x) @@ -12717,6 +12829,7 @@ matrix<T, M, N> transpose(matrix<T, N, M> x) case spirv: return spirv_asm { OpTranspose $$matrix<T, M, N> result $x }; + case wgsl: __intrinsic_asm "transpose"; default: matrix<T, M, N> result; for (int r = 0; r < M; ++r) @@ -12729,7 +12842,7 @@ matrix<T, M, N> transpose(matrix<T, N, M> x) // Truncate to integer __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 trunc(T x) { __target_switch @@ -12742,12 +12855,13 @@ T trunc(T x) case spirv: return spirv_asm { OpExtInst $$T result glsl450 Trunc $x }; + case wgsl: __intrinsic_asm "trunc"; } } __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> trunc(vector<T, N> x) { __target_switch @@ -12758,6 +12872,7 @@ vector<T, N> trunc(vector<T, N> x) case spirv: return spirv_asm { OpExtInst $$vector<T, N> result glsl450 Trunc $x }; + case wgsl: __intrinsic_asm "trunc"; default: VECTOR_MAP_UNARY(T, N, trunc, x); } @@ -12765,7 +12880,7 @@ vector<T, N> trunc(vector<T, N> x) __generic<T : __BuiltinFloatingPointType, let N : int, let M : 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)] matrix<T, N, M> trunc(matrix<T, N, M> x) { __target_switch diff --git a/source/slang/slang-capabilities.capdef b/source/slang/slang-capabilities.capdef index 9e9b94151..3e17b3d19 100644 --- a/source/slang/slang-capabilities.capdef +++ b/source/slang/slang-capabilities.capdef @@ -266,6 +266,10 @@ alias cpp_cuda_glsl_hlsl = cpp | cuda | glsl | hlsl; /// [Compound] alias cpp_cuda_glsl_hlsl_spirv = cpp | cuda | glsl | hlsl | spirv; +/// CPP, CUDA, GLSL, HLSL, SPIRV and WGSL code-gen targets +/// [Compound] +alias cpp_cuda_glsl_hlsl_spirv_wgsl = cpp | cuda | glsl | hlsl | spirv | wgsl; + /// CPP, CUDA, GLSL, HLSL, Metal and SPIRV code-gen targets /// [Compound] alias cpp_cuda_glsl_hlsl_metal_spirv = cpp | cuda | glsl | hlsl | metal | spirv; @@ -342,6 +346,10 @@ alias glsl_hlsl_spirv = glsl | hlsl | spirv; /// [Compound] alias glsl_hlsl_metal_spirv = glsl | hlsl | metal | spirv; +/// GLSL, HLSL, Metal, SPIRV and WGSL code-gen targets +/// [Compound] +alias glsl_hlsl_metal_spirv_wgsl = glsl | hlsl | metal | spirv | wgsl; + /// GLSL, Metal, and SPIRV code-gen targets /// [Compound] alias glsl_metal_spirv = glsl | metal | spirv; @@ -1207,6 +1215,7 @@ alias sm_4_1_version = _sm_4_1 | spirv_1_0 | _cuda_sm_6_0 | metal + | wgsl | cpp ; /// HLSL shader model 4.1 and related capabilities of other targets. @@ -1226,6 +1235,7 @@ alias sm_5_0_version = _sm_5_0 | spirv_1_0 | _cuda_sm_9_0 | metal + | wgsl | cpp ; /// HLSL shader model 5.0 and related capabilities of other targets. |
