Skip to content

Commit 89465fe

Browse files
Nahim workgroup scan (#594)
* subgroup arithmetic * subgroup_arithmetic * fix --------- Co-authored-by: en_why <yynahim@gmail.com>
1 parent 65b33c4 commit 89465fe

File tree

2 files changed

+26
-26
lines changed

2 files changed

+26
-26
lines changed

include/nbl/builtin/hlsl/glsl_compat/core.hlsl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,42 +18,42 @@ namespace glsl
1818
template<typename T>
1919
T atomicAdd(NBL_REF_ARG(T) ptr, T value)
2020
{
21-
return spirv::atomicAdd<T>(ptr, 1, 0, value);
21+
return spirv::atomicAnd<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, value);
2222
}
2323
template<typename T>
2424
T atomicAnd(NBL_REF_ARG(T) ptr, T value)
2525
{
26-
return spirv::atomicAnd<T>(ptr, 1, 0, value);
26+
return spirv::atomicAnd<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, value);
2727
}
2828
template<typename T>
2929
T atomicOr(NBL_REF_ARG(T) ptr, T value)
3030
{
31-
return spirv::atomicOr<T>(ptr, 1, 0, value);
31+
return spirv::atomicOr<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, value);
3232
}
3333
template<typename T>
3434
T atomicXor(NBL_REF_ARG(T) ptr, T value)
3535
{
36-
return spirv::atomicXor<T>(ptr, 1, 0, value);
36+
return spirv::atomicXor<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, value);
3737
}
3838
template<typename T>
3939
T atomicMin(NBL_REF_ARG(T) ptr, T value)
4040
{
41-
return spirv::atomicMin<T>(ptr, 1, 0, value);
41+
return spirv::atomicMin<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, value);
4242
}
4343
template<typename T>
4444
T atomicMax(NBL_REF_ARG(T) ptr, T value)
4545
{
46-
return spirv::atomicMax<T>(ptr, 1, 0, value);
46+
return spirv::atomicMax<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, value);
4747
}
4848
template<typename T>
4949
T atomicExchange(NBL_REF_ARG(T) ptr, T value)
5050
{
51-
return spirv::atomicExchange<T>(ptr, 1, 0, value);
51+
return spirv::atomicExchange<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, value);
5252
}
5353
template<typename T>
5454
T atomicCompSwap(NBL_REF_ARG(T) ptr, T comparator, T value)
5555
{
56-
return spirv::atomicCompSwap<T>(ptr, 1, 0, 0, value, comparator);
56+
return spirv::atomicCompSwap<T>(ptr, spv::ScopeDevice, spv::DecorationRelaxedPrecision, spv::DecorationRelaxedPrecision, value, comparator);
5757
}
5858

5959
/**

include/nbl/builtin/hlsl/glsl_compat/subgroup_arithmetic.hlsl

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,80 +28,80 @@ T subgroupExclusiveAdd(T value) {
2828

2929
template<typename T>
3030
T subgroupMul(T value) {
31-
return spirv::groupMul(3, 0, value);
31+
return spirv::groupMul(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
3232
}
3333
template<typename T>
3434
T subgroupInclusiveMul(T value) {
35-
return spirv::groupMul(3, 1, value);
35+
return spirv::groupMul(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
3636
}
3737
template<typename T>
3838
T subgroupExclusiveMul(T value) {
39-
return spirv::groupMul(3, 2, value);
39+
return spirv::groupMul(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
4040
}
4141

4242
template<typename T>
4343
T subgroupAnd(T value) {
44-
return spirv::groupBitwiseAnd(3, 0, value);
44+
return spirv::groupBitwiseAnd(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
4545
}
4646
template<typename T>
4747
T subgroupInclusiveAnd(T value) {
48-
return spirv::groupBitwiseAnd(3, 1, value);
48+
return spirv::groupBitwiseAnd(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
4949
}
5050
template<typename T>
5151
T subgroupExclusiveAnd(T value) {
52-
return spirv::groupBitwiseAnd(3, 2, value);
52+
return spirv::groupBitwiseAnd(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
5353
}
5454

5555
template<typename T>
5656
T subgroupOr(T value) {
57-
return spirv::groupBitwiseOr(3, 0, value);
57+
return spirv::groupBitwiseOr(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
5858
}
5959
template<typename T>
6060
T subgroupInclusiveOr(T value) {
61-
return spirv::groupBitwiseOr(3, 1, value);
61+
return spirv::groupBitwiseOr(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
6262
}
6363
template<typename T>
6464
T subgroupExclusiveOr(T value) {
65-
return spirv::groupBitwiseOr(3, 2, value);
65+
return spirv::groupBitwiseOr(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
6666
}
6767

6868
template<typename T>
6969
T subgroupXor(T value) {
70-
return spirv::groupBitwiseXor(3, 0, value);
70+
return spirv::groupBitwiseXor(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
7171
}
7272
template<typename T>
7373
T subgroupInclusiveXor(T value) {
74-
return spirv::groupBitwiseXor(3, 1, value);
74+
return spirv::groupBitwiseXor(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
7575
}
7676
template<typename T>
7777
T subgroupExclusiveXor(T value) {
78-
return spirv::groupBitwiseXor(3, 2, value);
78+
return spirv::groupBitwiseXor(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
7979
}
8080

8181
template<typename T>
8282
T subgroupMin(T value) {
83-
return spirv::groupBitwiseMin(3, 0, value);
83+
return spirv::groupBitwiseMin(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
8484
}
8585
template<typename T>
8686
T subgroupInclusiveMin(T value) {
87-
return spirv::groupBitwiseMin(3, 1, value);
87+
return spirv::groupBitwiseMin(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
8888
}
8989
template<typename T>
9090
T subgroupExclusiveMin(T value) {
91-
return spirv::groupBitwiseMin(3, 2, value);
91+
return spirv::groupBitwiseMin(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
9292
}
9393

9494
template<typename T>
9595
T subgroupMax(T value) {
96-
return spirv::groupBitwiseMax(3, 0, value);
96+
return spirv::groupBitwiseMax(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
9797
}
9898
template<typename T>
9999
T subgroupInclusiveMax(T value) {
100-
return spirv::groupBitwiseMax(3, 1, value);
100+
return spirv::groupBitwiseMax(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
101101
}
102102
template<typename T>
103103
T subgroupExclusiveMax(T value) {
104-
return spirv::groupBitwiseMax(3, 2, value);
104+
return spirv::groupBitwiseMax(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
105105
}
106106

107107
}

0 commit comments

Comments
 (0)