4
4
#ifndef _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_ARITHMETIC_INCLUDED_
5
5
#define _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_ARITHMETIC_INCLUDED_
6
6
7
- #include "nbl/builtin/hlsl/spirv_intrinsics/subgroup_arithmetic .hlsl"
7
+ #include "nbl/builtin/hlsl/spirv_intrinsics/core .hlsl"
8
8
9
9
namespace nbl
10
10
{
@@ -17,93 +17,93 @@ namespace glsl
17
17
// TODO: Furthermore you'll need `bitfieldExtract`-like struct dispatcher to choose between int/float add/mul and sint/uint/float min/max
18
18
template<typename T>
19
19
T subgroupAdd (T value) {
20
- return spirv::groupAdd (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
20
+ return spirv::groupNonUniformIAdd_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
21
21
}
22
22
template<typename T>
23
23
T subgroupInclusiveAdd (T value) {
24
- return spirv::groupAdd (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
24
+ return spirv::groupNonUniformIAdd_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
25
25
}
26
26
template<typename T>
27
27
T subgroupExclusiveAdd (T value) {
28
- return spirv::groupAdd (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
28
+ return spirv::groupNonUniformIAdd_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
29
29
}
30
30
31
31
template<typename T>
32
32
T subgroupMul (T value) {
33
- return spirv::groupMul (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
33
+ return spirv::groupNonUniformIMul_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
34
34
}
35
35
template<typename T>
36
36
T subgroupInclusiveMul (T value) {
37
- return spirv::groupMul (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
37
+ return spirv::groupNonUniformIMul_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
38
38
}
39
39
template<typename T>
40
40
T subgroupExclusiveMul (T value) {
41
- return spirv::groupMul (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
41
+ return spirv::groupNonUniformIMul_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
42
42
}
43
43
44
44
template<typename T>
45
45
T subgroupAnd (T value) {
46
- return spirv::groupBitwiseAnd (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
46
+ return spirv::groupNonUniformBitwiseAnd_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
47
47
}
48
48
template<typename T>
49
49
T subgroupInclusiveAnd (T value) {
50
- return spirv::groupBitwiseAnd (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
50
+ return spirv::groupNonUniformBitwiseAnd_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
51
51
}
52
52
template<typename T>
53
53
T subgroupExclusiveAnd (T value) {
54
- return spirv::groupBitwiseAnd (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
54
+ return spirv::groupNonUniformBitwiseAnd_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
55
55
}
56
56
57
57
template<typename T>
58
58
T subgroupOr (T value) {
59
- return spirv::groupBitwiseOr (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
59
+ return spirv::groupNonUniformBitwiseOr_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
60
60
}
61
61
template<typename T>
62
62
T subgroupInclusiveOr (T value) {
63
- return spirv::groupBitwiseOr (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
63
+ return spirv::groupNonUniformBitwiseOr_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
64
64
}
65
65
template<typename T>
66
66
T subgroupExclusiveOr (T value) {
67
- return spirv::groupBitwiseOr (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
67
+ return spirv::groupNonUniformBitwiseOr_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
68
68
}
69
69
70
70
template<typename T>
71
71
T subgroupXor (T value) {
72
- return spirv::groupBitwiseXor (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
72
+ return spirv::groupNonUniformBitwiseXor_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
73
73
}
74
74
template<typename T>
75
75
T subgroupInclusiveXor (T value) {
76
- return spirv::groupBitwiseXor (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
76
+ return spirv::groupNonUniformBitwiseXor_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
77
77
}
78
78
template<typename T>
79
79
T subgroupExclusiveXor (T value) {
80
- return spirv::groupBitwiseXor (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
80
+ return spirv::groupNonUniformBitwiseXor_GroupNonUniformArithmetic<T> (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
81
81
}
82
82
83
83
template<typename T>
84
84
T subgroupMin (T value) {
85
- return spirv::groupBitwiseMin (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
85
+ return spirv::groupNonUniformMin_GroupNonUniformArithmetic (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
86
86
}
87
87
template<typename T>
88
88
T subgroupInclusiveMin (T value) {
89
- return spirv::groupBitwiseMin (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
89
+ return spirv::groupNonUniformMin_GroupNonUniformArithmetic (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
90
90
}
91
91
template<typename T>
92
92
T subgroupExclusiveMin (T value) {
93
- return spirv::groupBitwiseMin (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
93
+ return spirv::groupNonUniformMin_GroupNonUniformArithmetic (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
94
94
}
95
95
96
96
template<typename T>
97
97
T subgroupMax (T value) {
98
- return spirv::groupBitwiseMax (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
98
+ return spirv::groupNonUniformMax_GroupNonUniformArithmetic (spv::ScopeSubgroup, spv::GroupOperationReduce, value);
99
99
}
100
100
template<typename T>
101
101
T subgroupInclusiveMax (T value) {
102
- return spirv::groupBitwiseMax (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
102
+ return spirv::groupNonUniformMax_GroupNonUniformArithmetic (spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
103
103
}
104
104
template<typename T>
105
105
T subgroupExclusiveMax (T value) {
106
- return spirv::groupBitwiseMax (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
106
+ return spirv::groupNonUniformMax_GroupNonUniformArithmetic (spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
107
107
}
108
108
109
109
}
0 commit comments