summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Kwak <82421531+jkwak-work@users.noreply.github.com>2024-09-17 13:51:08 -0700
committerGitHub <noreply@github.com>2024-09-17 13:51:08 -0700
commit07166468c6fa706b7f35d3422e4966f62e7b86d2 (patch)
treea468216dc2414d5a870be9ac1b4446823ee951da
parent25d155937402120292cff9e6f5a31c1d45a2ecbf (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.
-rw-r--r--include/slang.h1
-rw-r--r--source/slang/hlsl.meta.slang473
-rw-r--r--source/slang/slang-capabilities.capdef10
-rw-r--r--tests/wgsl/math.slang279
-rw-r--r--tools/slang-test/slang-test-main.cpp5
-rw-r--r--tools/slang-test/test-context.h3
6 files changed, 591 insertions, 180 deletions
diff --git a/include/slang.h b/include/slang.h
index 632bcbcbc..3024aa884 100644
--- a/include/slang.h
+++ b/include/slang.h
@@ -637,6 +637,7 @@ extern "C"
SLANG_PASS_THROUGH_LLVM, ///< LLVM 'compiler' - includes LLVM and Clang
SLANG_PASS_THROUGH_SPIRV_OPT, ///< SPIRV-opt
SLANG_PASS_THROUGH_METAL, ///< Metal compiler
+ SLANG_PASS_THROUGH_WGSL, ///< WGSL compiler
SLANG_PASS_THROUGH_COUNT_OF,
};
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.
diff --git a/tests/wgsl/math.slang b/tests/wgsl/math.slang
new file mode 100644
index 000000000..d7f39ce43
--- /dev/null
+++ b/tests/wgsl/math.slang
@@ -0,0 +1,279 @@
+//TEST:SIMPLE(filecheck=WGSL): -stage compute -entry computeMain -target wgsl
+
+RWStructuredBuffer<int> inputBuffer;
+RWStructuredBuffer<int> outputBuffer;
+
+__generic<T:__BuiltinFloatingPointType>
+bool Test_Scalar()
+{
+ // WGSL-LABEL: Test_Scalar
+
+ const T zero = T(inputBuffer[0]);
+ const T one = T(inputBuffer[1]);
+ const int zeroInt = int(inputBuffer[0]);
+
+ T outFloat1, outFloat2;
+ int outInt;
+
+ return true
+
+ // WGSL: acos(
+ && zero == acos<T>(one)
+
+ // WGSL: acosh(
+ && zero == acosh<T>(one)
+
+ // WGSL: asin(
+ && zero == asin<T>(zero)
+
+ // WGSL: asinh(
+ && zero == asinh<T>(zero)
+
+ // WGSL: atan(
+ && zero == atan<T>(zero)
+
+ // WGSL: atan2(
+ && zero == atan2<T>(zero, zero)
+
+ // WGSL: atanh(
+ && zero == atanh<T>(zero)
+
+ // WGSL: ceil(
+ && zero == ceil<T>(zero)
+
+ // WGSL: cos(
+ && one == cos<T>(zero)
+
+ // WGSL: cosh(
+ && one == cosh<T>(zero)
+
+ // WGSL: exp(
+ && one == exp<T>(zero)
+
+ // WGSL: exp2(
+ && one == exp2<T>(zero)
+
+ // WGSL: abs(
+ && zero == abs<T>(zero)
+
+ // WGSL: floor(
+ && zero == floor<T>(zero)
+
+ // WGSL: fma(
+ && zero == fma(zero, zero, zero)
+
+ // WGSL: max(
+ && zero == max<T>(zero, zero)
+
+ // WGSL: min(
+ && zero == min<T>(zero, zero)
+
+ // WGSL: fract(
+ && zero == fract<T>(zero)
+
+ // WGSL: frexp(
+ && zero == frexp<T>(zero, outInt) && zeroInt == outInt
+
+ // WGSL: ldexp(
+ && zero == ldexp<T>(zero, zeroInt)
+
+ // WGSL: log(
+ && zero == log<T>(one)
+
+ // WGSL: log2(
+ && zero == log2<T>(one)
+
+ // WGSL: modf(
+ && zero == modf<T>(zero, outFloat1)
+
+ // WGSL: pow(
+ && zero == pow<T>(zero, one)
+
+ // WGSL: round(
+ && zero == round<T>(zero)
+
+ // WGSL: sin(
+ && zero == sin<T>(zero)
+
+ // WGSL: sinh(
+ && zero == sinh<T>(zero)
+
+ // WGSL: sqrt(
+ && zero == sqrt<T>(zero)
+
+ // WGSL: tan(
+ && zero == tan<T>(zero)
+
+ // WGSL: tanh(
+ && zero == tanh<T>(zero)
+
+ // WGSL: trunc(
+ && zero == trunc<T>(zero)
+ ;
+}
+
+__generic<T:__BuiltinFloatingPointType, let N : int>
+bool Test_Vector()
+{
+ // WGSL-LABEL: Test_Vector_0
+ const vector<T,N> zero = T(inputBuffer[0]);
+ const vector<T,N> one = T(inputBuffer[1]);
+
+ const vector<int,N> zeroInt = int(inputBuffer[0]);
+
+ vector<T,N> outFloat1, outFloat2;
+ vector<int,N> outInt;
+
+ return true
+ // WGSL: acos(
+ // WGSL-NOT: acos(
+ && zero == acos<T>(one)
+
+ // WGSL: acosh(
+ // WGSL-NOT: acosh(
+ && zero == acosh<T>(one)
+
+ // WGSL: asin(
+ // WGSL-NOT: asin(
+ && zero == asin<T>(zero)
+
+ // WGSL: asinh(
+ // WGSL-NOT: asinh(
+ && zero == asinh<T>(zero)
+
+ // WGSL: atan(
+ // WGSL-NOT: atan(
+ && zero == atan<T>(zero)
+
+ // WGSL: atan2(
+ // WGSL-NOT: atan2(
+ && zero == atan2<T>(zero, zero)
+
+ // WGSL: atanh(
+ // WGSL-NOT: atanh(
+ && zero == atanh<T>(zero)
+
+ // WGSL: ceil(
+ // WGSL-NOT: ceil(
+ && zero == ceil<T>(zero)
+
+ // WGSL: cos(
+ // WGSL-NOT: cos(
+ && one == cos<T>(zero)
+
+ // WGSL: cosh(
+ // WGSL-NOT: cosh(
+ && one == cosh<T>(zero)
+
+ // WGSL: exp(
+ // WGSL-NOT: exp(
+ && one == exp<T>(zero)
+
+ // WGSL: exp2(
+ // WGSL-NOT: exp2(
+ && one == exp2<T>(zero)
+
+ // WGSL: abs(
+ // WGSL-NOT: abs(
+ && zero == abs<T>(zero)
+
+ // WGSL: floor(
+ // WGSL-NOT: floor(
+ && zero == floor<T>(zero)
+
+ // WGSL: fma(
+ // WGSL-NOT: fma(
+ && zero == fma(zero, zero, zero)
+
+ // WGSL: max(
+ // WGSL-NOT: max(
+ && zero == max<T>(zero, zero)
+
+ // WGSL: min(
+ // WGSL-NOT: min(
+ && zero == min<T>(zero, zero)
+
+ // WGSL: fract(
+ // WGSL-NOT: fract(
+ && zero == fract<T>(zero)
+
+ // WGSL: frexp(
+ // WGSL-NOT: frexp(
+ && zero == frexp<T>(zero, outInt) && all(zeroInt == outInt)
+
+ // WGSL: ldexp(
+ // WGSL-NOT: ldexp(
+ && zero == ldexp<T>(zero, zeroInt)
+
+ // WGSL: log(
+ // WGSL-NOT: log(
+ && zero == log<T>(one)
+
+ // WGSL: log2(
+ // WGSL-NOT: log2(
+ && zero == log2<T>(one)
+
+ // WGSL: modf(
+ // WGSL-NOT: modf(
+ && zero == modf<T>(zero, outFloat1)
+
+ // WGSL: pow(
+ // WGSL-NOT: pow(
+ && zero == pow<T>(zero, one)
+
+ // WGSL: round(
+ // WGSL-NOT: round(
+ && zero == round<T>(zero)
+
+ // WGSL: sin(
+ // WGSL-NOT: sin(
+ && zero == sin<T>(zero)
+
+ // WGSL: sinh(
+ // WGSL-NOT: sinh(
+ && zero == sinh<T>(zero)
+
+ // WGSL: sqrt(
+ // WGSL-NOT: sqrt(
+ && zero == sqrt<T>(zero)
+
+ // WGSL: tan(
+ // WGSL-NOT: tan(
+ && zero == tan<T>(zero)
+
+ // WGSL: tanh(
+ // WGSL-NOT: tanh(
+ && zero == tanh<T>(zero)
+
+ // WGSL: trunc(
+ // WGSL-NOT: trunc(
+ && zero == trunc<T>(zero)
+ ;
+
+ // WGSL-LABEL: Test_Vector_1
+}
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ // GLSL: void main(
+ // GLSL_SPIRV: OpEntryPoint
+ // SPIR: OpEntryPoint
+ // HLSL: void computeMain(
+ // CUDA: void computeMain(
+ // CPP: void _computeMain(
+
+ bool result = true
+ && Test_Scalar<float>()
+ && Test_Vector<float, 2>()
+ && Test_Vector<float, 3>()
+ && Test_Vector<float, 4>()
+ && Test_Scalar<half>()
+ && Test_Vector<half, 2>()
+ && Test_Vector<half, 3>()
+ && Test_Vector<half, 4>()
+ ;
+
+ // BUF: 1
+ outputBuffer[0] = int(result);
+}
diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp
index b49d7be73..cac694f77 100644
--- a/tools/slang-test/slang-test-main.cpp
+++ b/tools/slang-test/slang-test-main.cpp
@@ -993,6 +993,11 @@ static PassThroughFlags _getPassThroughFlagsForTarget(SlangCompileTarget target)
return PassThroughFlag::Metal;
}
+ case SLANG_WGSL:
+ {
+ return PassThroughFlag::WGSL;
+ }
+
case SLANG_SHADER_HOST_CALLABLE:
case SLANG_HOST_HOST_CALLABLE:
diff --git a/tools/slang-test/test-context.h b/tools/slang-test/test-context.h
index 28d39b064..314ec2803 100644
--- a/tools/slang-test/test-context.h
+++ b/tools/slang-test/test-context.h
@@ -37,7 +37,8 @@ struct PassThroughFlag
Generic_C_CPP = 1 << int(SLANG_PASS_THROUGH_GENERIC_C_CPP),
NVRTC = 1 << int(SLANG_PASS_THROUGH_NVRTC),
LLVM = 1 << int(SLANG_PASS_THROUGH_LLVM),
- Metal = 1 << int(SLANG_PASS_THROUGH_METAL)
+ Metal = 1 << int(SLANG_PASS_THROUGH_METAL),
+ WGSL = 1 << int(SLANG_PASS_THROUGH_WGSL)
};
};