diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-03-06 15:46:35 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-06 12:46:35 -0800 |
| commit | b94a12b91086ea004d9b78fa8a14fd4726af9e76 (patch) | |
| tree | 0e7a78c3e684ebb12204a981b6a6e90f6c4cde44 /source | |
| parent | 18be2d81fd2740d3f0c06fc407cff1702b93d468 (diff) | |
Wave intrinsics for Vector and Matrix types (#1262)
* Update slang-binaries to verison with SPIR-V version support.
* Support vec and matrix Wave intrinsics on vk.
Added wave-vector.slang test
Add wave-diverge.slang test
Add support for more wave intrinsics to vk.
* Test out Wave intrinsic support for matrices.
* Remove matrix glsl intrinsics -> not available.
Fix some typo.
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/hlsl.meta.slang | 154 | ||||
| -rw-r--r-- | source/slang/hlsl.meta.slang.h | 156 |
2 files changed, 239 insertions, 71 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index b020ef4d4..572b64b21 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -2230,8 +2230,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupAnd($0)") __target_intrinsic(cuda, "_waveAnd(__activemask(), $0)") T WaveActiveBitAnd(T expr); -__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitAnd(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitAnd(matrix<T,N,M> expr); +__generic<T : __BuiltinIntegerType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupAnd($0)") +vector<T,N> WaveActiveBitAnd(vector<T,N> expr); +__generic<T : __BuiltinIntegerType, let N : int, let M : int> +matrix<T,N,M> WaveActiveBitAnd(matrix<T,N,M> expr); __generic<T : __BuiltinIntegerType> __glsl_extension(GL_KHR_shader_subgroup_arithmetic) @@ -2239,8 +2244,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupOr($0)") __target_intrinsic(cuda, "_waveOr(__activemask(), $0)") T WaveActiveBitOr(T expr); -__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitOr(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitOr(matrix<T,N,M> expr); +__generic<T : __BuiltinIntegerType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupOr($0)") +vector<T,N> WaveActiveBitOr(vector<T,N> expr); +__generic<T : __BuiltinIntegerType, let N : int, let M : int> +matrix<T,N,M> WaveActiveBitOr(matrix<T,N,M> expr); __generic<T : __BuiltinIntegerType> __glsl_extension(GL_KHR_shader_subgroup_arithmetic) @@ -2248,8 +2258,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupXor($0)") __target_intrinsic(cuda, "_waveXor(__activemask(), $0)") T WaveActiveBitXor(T expr); -__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitXor(vector<T,N> expr); -__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitXor(matrix<T,N,M> expr); +__generic<T : __BuiltinIntegerType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupXor($0)") +vector<T,N> WaveActiveBitXor(vector<T,N> expr); +__generic<T : __BuiltinIntegerType, let N : int, let M : int> +matrix<T,N,M> WaveActiveBitXor(matrix<T,N,M> expr); __generic<T : __BuiltinArithmeticType> __glsl_extension(GL_KHR_shader_subgroup_arithmetic) @@ -2257,8 +2272,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupMax($0)") __target_intrinsic(cuda, "_waveMax(__activemask(), $0)") T WaveActiveMax(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMax(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMax(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupMax($0)") +vector<T,N> WaveActiveMax(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WaveActiveMax(matrix<T,N,M> expr); __generic<T : __BuiltinArithmeticType> __glsl_extension(GL_KHR_shader_subgroup_arithmetic) @@ -2266,8 +2286,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupMin($0)") __target_intrinsic(cuda, "_waveMin(__activemask(), $0)") T WaveActiveMin(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMin(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMin(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupMin($0)") +vector<T,N> WaveActiveMin(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WaveActiveMin(matrix<T,N,M> expr); __generic<T : __BuiltinArithmeticType> __glsl_extension(GL_KHR_shader_subgroup_arithmetic) @@ -2275,8 +2300,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupMul($0)") __target_intrinsic(cuda, "_waveProduct(__activemask(), $0)") T WaveActiveProduct(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveProduct(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveProduct(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupMul($0)") +vector<T,N> WaveActiveProduct(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WaveActiveProduct(matrix<T,N,M> expr); __generic<T : __BuiltinArithmeticType> __glsl_extension(GL_KHR_shader_subgroup_arithmetic) @@ -2284,8 +2314,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupAdd($0)") __target_intrinsic(cuda, "_waveSum(__activemask(), $0)") T WaveActiveSum(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveSum(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveSum(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupAdd($0)") +vector<T,N> WaveActiveSum(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WaveActiveSum(matrix<T,N,M> expr); __generic<T : __BuiltinType> __glsl_extension(GL_KHR_shader_subgroup_vote) @@ -2293,8 +2328,13 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupAllEqual($0)") __target_intrinsic(cuda, "_waveAllEqual(__activemask(), $0)") bool WaveActiveAllEqual(T value); -__generic<T : __BuiltinType, let N : int> vector<bool,N> WaveActiveAllEqual(vector<T,N> value); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<bool,N,M> WaveActiveAllEqual(matrix<T,N,M> value); +__generic<T : __BuiltinType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_vote) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupAllEqual($0)") +vector<bool,N> WaveActiveAllEqual(vector<T,N> value); +__generic<T : __BuiltinType, let N : int, let M : int> +matrix<bool,N,M> WaveActiveAllEqual(matrix<T,N,M> value); __generic<T : __BuiltinType> uint4 WaveMatch(T value); __generic<T : __BuiltinType, let N : int> uint4 WaveMatch(vector<T,N> value); @@ -2357,34 +2397,69 @@ __glsl_extension(GL_KHR_shader_subgroup_arithmetic) __spirv_version(1.3) __target_intrinsic(glsl, "subgroupExcusiveMul($0)") T WavePrefixProduct(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixProduct(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveMul($0)") +vector<T,N> WavePrefixProduct(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr); __generic<T : __BuiltinArithmeticType> __glsl_extension(GL_KHR_shader_subgroup_arithmetic) __spirv_version(1.3) __target_intrinsic(glsl, "subgroupExcusiveAdd($0)") T WavePrefixSum(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixSum(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveAdd($0)") +vector<T,N> WavePrefixSum(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr); -__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitAnd(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitAnd(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitAnd(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveAnd($0)") +T WaveMultiPrefixBitAnd(T expr); +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveAnd($0)") +__generic<T : __BuiltinArithmeticType, let N : int> +vector<T,N> WaveMultiPrefixBitAnd(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WaveMultiPrefixBitAnd(matrix<T,N,M> expr); -__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitOr(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitOr(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitOr(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveOr($0)") +T WaveMultiPrefixBitOr(T expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveOr($0)") +vector<T,N> WaveMultiPrefixBitOr(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WaveMultiPrefixBitOr(matrix<T,N,M> expr); __generic<T : __BuiltinArithmeticType> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveXor($0)") T WaveMultiPrefixBitXor(T expr); -__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitXor(vector<T,N> expr); -__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitXor(matrix<T,N,M> expr); +__generic<T : __BuiltinArithmeticType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_arithmetic) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupExcusiveXor($0)") +vector<T,N> WaveMultiPrefixBitXor(vector<T,N> expr); +__generic<T : __BuiltinArithmeticType, let N : int, let M : int> +matrix<T,N,M> WaveMultiPrefixBitXor(matrix<T,N,M> expr); -// TODO(JS): This takes uvec4 parameter on GLSL __glsl_extension(GL_KHR_shader_subgroup_ballot) __spirv_version(1.3) -__target_intrinsic(glsl, "subgroupBallotExclusiveBitCount($0)") +__target_intrinsic(glsl, "subgroupBallotExclusiveBitCount(subgroupBallot($0))") __target_intrinsic(cuda, "__popc(__ballot_sync(__activemask(), $0) & _getLaneLtMask())") uint WavePrefixCountBits(bool value); @@ -2401,11 +2476,16 @@ __generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> W __generic<T : __BuiltinType> __glsl_extension(GL_KHR_shader_subgroup_ballot) __spirv_version(1.3) -__target_intrinsic(glsl, "subgoupBroadcastFirst($0)") +__target_intrinsic(glsl, "subgroupBroadcastFirst($0)") __target_intrinsic(cuda, "_waveReadFirst($0)") T WaveReadLaneFirst(T expr); -__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneFirst(vector<T,N> expr); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneFirst(matrix<T,N,M> expr); +__generic<T : __BuiltinType, let N : int> +__glsl_extension(GL_KHR_shader_subgroup_ballot) +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupBroadcastFirst($0)") +vector<T,N> WaveReadLaneFirst(vector<T,N> expr); +__generic<T : __BuiltinType, let N : int, let M : int> +matrix<T,N,M> WaveReadLaneFirst(matrix<T,N,M> expr); __generic<T : __BuiltinType> __glsl_extension(GL_KHR_shader_subgroup_ballot) @@ -2413,8 +2493,12 @@ __spirv_version(1.3) __target_intrinsic(glsl, "subgroupBroadcast($0, $1)") __target_intrinsic(cuda, "__shfl_sync(SLANG_CUDA_WARP_MASK, $0, $1)") T WaveReadLaneAt(T value, int lane); -__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneAt(vector<T,N> value, int lane); -__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> value, int lane); +__generic<T : __BuiltinType, let N : int> +__spirv_version(1.3) +__target_intrinsic(glsl, "subgroupBroadcast($0, $1)") +vector<T,N> WaveReadLaneAt(vector<T,N> value, int lane); +__generic<T : __BuiltinType, let N : int, let M : int> +matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> value, int lane); // `typedef`s to help with the fact that HLSL has been sorta-kinda case insensitive at various points diff --git a/source/slang/hlsl.meta.slang.h b/source/slang/hlsl.meta.slang.h index 677fa48f1..216f45bbe 100644 --- a/source/slang/hlsl.meta.slang.h +++ b/source/slang/hlsl.meta.slang.h @@ -2306,8 +2306,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupAnd($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveAnd(__activemask(), $0)\")\n") SLANG_RAW("T WaveActiveBitAnd(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitAnd(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitAnd(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupAnd($0)\")\n") +SLANG_RAW("vector<T,N> WaveActiveBitAnd(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveActiveBitAnd(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinIntegerType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") @@ -2315,8 +2320,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupOr($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveOr(__activemask(), $0)\")\n") SLANG_RAW("T WaveActiveBitOr(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitOr(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitOr(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupOr($0)\")\n") +SLANG_RAW("vector<T,N> WaveActiveBitOr(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveActiveBitOr(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinIntegerType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") @@ -2324,8 +2334,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupXor($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveXor(__activemask(), $0)\")\n") SLANG_RAW("T WaveActiveBitXor(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> vector<T,N> WaveActiveBitXor(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int> matrix<T,N,M> WaveActiveBitXor(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int> \n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupXor($0)\")\n") +SLANG_RAW("vector<T,N> WaveActiveBitXor(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinIntegerType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveActiveBitXor(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") @@ -2333,8 +2348,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupMax($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveMax(__activemask(), $0)\")\n") SLANG_RAW("T WaveActiveMax(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMax(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMax(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupMax($0)\")\n") +SLANG_RAW("vector<T,N> WaveActiveMax(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveActiveMax(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") @@ -2342,8 +2362,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupMin($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveMin(__activemask(), $0)\")\n") SLANG_RAW("T WaveActiveMin(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveMin(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveMin(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupMin($0)\")\n") +SLANG_RAW("vector<T,N> WaveActiveMin(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveActiveMin(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") @@ -2351,8 +2376,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupMul($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveProduct(__activemask(), $0)\")\n") SLANG_RAW("T WaveActiveProduct(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveProduct(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveProduct(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupMul($0)\")\n") +SLANG_RAW("vector<T,N> WaveActiveProduct(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveActiveProduct(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") @@ -2360,8 +2390,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupAdd($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveSum(__activemask(), $0)\")\n") SLANG_RAW("T WaveActiveSum(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveActiveSum(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveActiveSum(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupAdd($0)\")\n") +SLANG_RAW("vector<T,N> WaveActiveSum(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveActiveSum(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_vote)\n") @@ -2369,8 +2404,13 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupAllEqual($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveAllEqual(__activemask(), $0)\")\n") SLANG_RAW("bool WaveActiveAllEqual(T value);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<bool,N> WaveActiveAllEqual(vector<T,N> value);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<bool,N,M> WaveActiveAllEqual(matrix<T,N,M> value);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int> \n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_vote)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupAllEqual($0)\")\n") +SLANG_RAW("vector<bool,N> WaveActiveAllEqual(vector<T,N> value);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int>\n") +SLANG_RAW("matrix<bool,N,M> WaveActiveAllEqual(matrix<T,N,M> value);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinType> uint4 WaveMatch(T value);\n") SLANG_RAW("__generic<T : __BuiltinType, let N : int> uint4 WaveMatch(vector<T,N> value);\n") @@ -2433,34 +2473,69 @@ SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveMul($0)\")\n") SLANG_RAW("T WavePrefixProduct(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixProduct(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveMul($0)\")\n") +SLANG_RAW("vector<T,N> WavePrefixProduct(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WavePrefixProduct(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveAdd($0)\")\n") SLANG_RAW("T WavePrefixSum(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WavePrefixSum(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveAdd($0)\")\n") +SLANG_RAW("vector<T,N> WavePrefixSum(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WavePrefixSum(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitAnd(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitAnd(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitAnd(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveAnd($0)\")\n") +SLANG_RAW("T WaveMultiPrefixBitAnd(T expr);\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveAnd($0)\")\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("vector<T,N> WaveMultiPrefixBitAnd(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveMultiPrefixBitAnd(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType> T WaveMultiPrefixBitOr(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitOr(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitOr(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveOr($0)\")\n") +SLANG_RAW("T WaveMultiPrefixBitOr(T expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveOr($0)\")\n") +SLANG_RAW("vector<T,N> WaveMultiPrefixBitOr(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveMultiPrefixBitOr(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinArithmeticType>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveXor($0)\")\n") SLANG_RAW("T WaveMultiPrefixBitXor(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int> vector<T,N> WaveMultiPrefixBitXor(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int> matrix<T,N,M> WaveMultiPrefixBitXor(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_arithmetic)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupExcusiveXor($0)\")\n") +SLANG_RAW("vector<T,N> WaveMultiPrefixBitXor(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinArithmeticType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveMultiPrefixBitXor(matrix<T,N,M> expr);\n") SLANG_RAW("\n") -SLANG_RAW("// TODO(JS): This takes uvec4 parameter on GLSL\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_ballot)\n") SLANG_RAW("__spirv_version(1.3)\n") -SLANG_RAW("__target_intrinsic(glsl, \"subgroupBallotExclusiveBitCount($0)\")\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupBallotExclusiveBitCount(subgroupBallot($0))\")\n") SLANG_RAW("__target_intrinsic(cuda, \"__popc(__ballot_sync(__activemask(), $0) & _getLaneLtMask())\")\n") SLANG_RAW("uint WavePrefixCountBits(bool value);\n") SLANG_RAW("\n") @@ -2477,11 +2552,16 @@ SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_ballot)\n") SLANG_RAW("__spirv_version(1.3)\n") -SLANG_RAW("__target_intrinsic(glsl, \"subgoupBroadcastFirst($0)\")\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupBroadcastFirst($0)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"_waveReadFirst($0)\")\n") SLANG_RAW("T WaveReadLaneFirst(T expr);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneFirst(vector<T,N> expr);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneFirst(matrix<T,N,M> expr);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int>\n") +SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_ballot)\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupBroadcastFirst($0)\")\n") +SLANG_RAW("vector<T,N> WaveReadLaneFirst(vector<T,N> expr);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveReadLaneFirst(matrix<T,N,M> expr);\n") SLANG_RAW("\n") SLANG_RAW("__generic<T : __BuiltinType>\n") SLANG_RAW("__glsl_extension(GL_KHR_shader_subgroup_ballot)\n") @@ -2489,8 +2569,12 @@ SLANG_RAW("__spirv_version(1.3)\n") SLANG_RAW("__target_intrinsic(glsl, \"subgroupBroadcast($0, $1)\")\n") SLANG_RAW("__target_intrinsic(cuda, \"__shfl_sync(SLANG_CUDA_WARP_MASK, $0, $1)\")\n") SLANG_RAW("T WaveReadLaneAt(T value, int lane);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int> vector<T,N> WaveReadLaneAt(vector<T,N> value, int lane);\n") -SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int> matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> value, int lane);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int>\n") +SLANG_RAW("__spirv_version(1.3)\n") +SLANG_RAW("__target_intrinsic(glsl, \"subgroupBroadcast($0, $1)\")\n") +SLANG_RAW("vector<T,N> WaveReadLaneAt(vector<T,N> value, int lane);\n") +SLANG_RAW("__generic<T : __BuiltinType, let N : int, let M : int>\n") +SLANG_RAW("matrix<T,N,M> WaveReadLaneAt(matrix<T,N,M> value, int lane);\n") SLANG_RAW("\n") SLANG_RAW("\n") SLANG_RAW("// `typedef`s to help with the fact that HLSL has been sorta-kinda case insensitive at various points\n") @@ -2547,7 +2631,7 @@ for (int aa = 0; aa < kBaseBufferAccessLevelCount; ++aa) sb << "};\n"; } -SLANG_RAW("#line 2474 \"hlsl.meta.slang\"") +SLANG_RAW("#line 2558 \"hlsl.meta.slang\"") SLANG_RAW("\n") SLANG_RAW("\n") SLANG_RAW("\n") |
