Skip to content

Commit d94c9cc

Browse files
committed
builtin: update inline spirv hlsl
Signed-off-by: Ali Cheraghi <alichraghi@proton.me>
1 parent 7086ddd commit d94c9cc

13 files changed

+1301
-497
lines changed

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,21 +135,21 @@ SquareMatrix inverse(NBL_CONST_REF_ARG(SquareMatrix) mat)
135135
*/
136136
// TODO: Extemely annoying that HLSL doesn't have references, so we can't transparently alias the variables as `&` :(
137137
//void gl_Position() {spirv::}
138-
uint32_t gl_VertexIndex() {return spirv::VertexIndex;}
139-
uint32_t gl_InstanceIndex() {return spirv::InstanceIndex;}
138+
uint32_t gl_VertexIndex() {return spirv::builtin::VertexIndex;}
139+
uint32_t gl_InstanceIndex() {return spirv::builtin::InstanceIndex;}
140140

141141
/**
142142
* For Compute Shaders
143143
*/
144144

145145
// TODO: Extemely annoying that HLSL doesn't have references, so we can't transparently alias the variables as `const&` :(
146-
uint32_t3 gl_NumWorkGroups() {return spirv::NumWorkGroups;}
146+
uint32_t3 gl_NumWorkGroups() {return spirv::builtin::NumWorkgroups;}
147147
// TODO: DXC BUG prevents us from defining this!
148148
uint32_t3 gl_WorkGroupSize();
149-
uint32_t3 gl_WorkGroupID() {return spirv::WorkgroupId;}
150-
uint32_t3 gl_LocalInvocationID() {return spirv::LocalInvocationId;}
151-
uint32_t3 gl_GlobalInvocationID() {return spirv::GlobalInvocationId;}
152-
uint32_t gl_LocalInvocationIndex() {return spirv::LocalInvocationIndex;}
149+
uint32_t3 gl_WorkGroupID() {return spirv::builtin::WorkgroupId;}
150+
uint32_t3 gl_LocalInvocationID() {return spirv::builtin::LocalInvocationId;}
151+
uint32_t3 gl_GlobalInvocationID() {return spirv::builtin::GlobalInvocationId;}
152+
uint32_t gl_LocalInvocationIndex() {return spirv::builtin::LocalInvocationIndex;}
153153

154154
void barrier() {
155155
spirv::controlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsAcquireReleaseMask | spv::MemorySemanticsWorkgroupMemoryMask);
@@ -182,21 +182,23 @@ struct bitfieldExtract<T, isSigned, false>
182182
}
183183
};
184184

185+
// TODO: redundant T
185186
template<typename T>
186187
struct bitfieldExtract<T, true, true>
187188
{
188189
static T __call( T val, uint32_t offsetBits, uint32_t numBits )
189190
{
190-
return spirv::bitFieldSExtract<T>( val, offsetBits, numBits );
191+
return spirv::bitFieldExtract( val, offsetBits, numBits );
191192
}
192193
};
193194

195+
// TODO: redundant T
194196
template<typename T>
195197
struct bitfieldExtract<T, false, true>
196198
{
197199
static T __call( T val, uint32_t offsetBits, uint32_t numBits )
198200
{
199-
return spirv::bitFieldUExtract<T>( val, offsetBits, numBits );
201+
return spirv::bitFieldExtract( val, offsetBits, numBits );
200202
}
201203
};
202204

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#ifndef _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_ARITHMETIC_INCLUDED_
55
#define _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_ARITHMETIC_INCLUDED_
66

7-
#include "nbl/builtin/hlsl/spirv_intrinsics/subgroup_arithmetic.hlsl"
7+
#include "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
88

99
namespace nbl
1010
{
@@ -17,93 +17,93 @@ namespace glsl
1717
// TODO: Furthermore you'll need `bitfieldExtract`-like struct dispatcher to choose between int/float add/mul and sint/uint/float min/max
1818
template<typename T>
1919
T subgroupAdd(T value) {
20-
return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
20+
return spirv::groupNonUniformIAdd_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
2121
}
2222
template<typename T>
2323
T subgroupInclusiveAdd(T value) {
24-
return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
24+
return spirv::groupNonUniformIAdd_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
2525
}
2626
template<typename T>
2727
T subgroupExclusiveAdd(T value) {
28-
return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
28+
return spirv::groupNonUniformIAdd_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
2929
}
3030

3131
template<typename T>
3232
T subgroupMul(T value) {
33-
return spirv::groupMul(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
33+
return spirv::groupNonUniformIMul_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
3434
}
3535
template<typename T>
3636
T subgroupInclusiveMul(T value) {
37-
return spirv::groupMul(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
37+
return spirv::groupNonUniformIMul_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
3838
}
3939
template<typename T>
4040
T subgroupExclusiveMul(T value) {
41-
return spirv::groupMul(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
41+
return spirv::groupNonUniformIMul_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
4242
}
4343

4444
template<typename T>
4545
T subgroupAnd(T value) {
46-
return spirv::groupBitwiseAnd(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
46+
return spirv::groupNonUniformBitwiseAnd_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
4747
}
4848
template<typename T>
4949
T subgroupInclusiveAnd(T value) {
50-
return spirv::groupBitwiseAnd(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
50+
return spirv::groupNonUniformBitwiseAnd_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
5151
}
5252
template<typename T>
5353
T subgroupExclusiveAnd(T value) {
54-
return spirv::groupBitwiseAnd(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
54+
return spirv::groupNonUniformBitwiseAnd_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
5555
}
5656

5757
template<typename T>
5858
T subgroupOr(T value) {
59-
return spirv::groupBitwiseOr(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
59+
return spirv::groupNonUniformBitwiseOr_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
6060
}
6161
template<typename T>
6262
T subgroupInclusiveOr(T value) {
63-
return spirv::groupBitwiseOr(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
63+
return spirv::groupNonUniformBitwiseOr_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
6464
}
6565
template<typename T>
6666
T subgroupExclusiveOr(T value) {
67-
return spirv::groupBitwiseOr(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
67+
return spirv::groupNonUniformBitwiseOr_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
6868
}
6969

7070
template<typename T>
7171
T subgroupXor(T value) {
72-
return spirv::groupBitwiseXor(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
72+
return spirv::groupNonUniformBitwiseXor_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
7373
}
7474
template<typename T>
7575
T subgroupInclusiveXor(T value) {
76-
return spirv::groupBitwiseXor(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
76+
return spirv::groupNonUniformBitwiseXor_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
7777
}
7878
template<typename T>
7979
T subgroupExclusiveXor(T value) {
80-
return spirv::groupBitwiseXor(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
80+
return spirv::groupNonUniformBitwiseXor_GroupNonUniformArithmetic<T>(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
8181
}
8282

8383
template<typename T>
8484
T subgroupMin(T value) {
85-
return spirv::groupBitwiseMin(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
85+
return spirv::groupNonUniformMin_GroupNonUniformArithmetic(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
8686
}
8787
template<typename T>
8888
T subgroupInclusiveMin(T value) {
89-
return spirv::groupBitwiseMin(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
89+
return spirv::groupNonUniformMin_GroupNonUniformArithmetic(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
9090
}
9191
template<typename T>
9292
T subgroupExclusiveMin(T value) {
93-
return spirv::groupBitwiseMin(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
93+
return spirv::groupNonUniformMin_GroupNonUniformArithmetic(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
9494
}
9595

9696
template<typename T>
9797
T subgroupMax(T value) {
98-
return spirv::groupBitwiseMax(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
98+
return spirv::groupNonUniformMax_GroupNonUniformArithmetic(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
9999
}
100100
template<typename T>
101101
T subgroupInclusiveMax(T value) {
102-
return spirv::groupBitwiseMax(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
102+
return spirv::groupNonUniformMax_GroupNonUniformArithmetic(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
103103
}
104104
template<typename T>
105105
T subgroupExclusiveMax(T value) {
106-
return spirv::groupBitwiseMax(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
106+
return spirv::groupNonUniformMax_GroupNonUniformArithmetic(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
107107
}
108108

109109
}

include/nbl/builtin/hlsl/glsl_compat/subgroup_ballot.hlsl

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#ifndef _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_BALLOT_INCLUDED_
55
#define _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_BALLOT_INCLUDED_
66

7-
#include "nbl/builtin/hlsl/spirv_intrinsics/subgroup_ballot.hlsl"
7+
#include "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
88
#include "nbl/builtin/hlsl/glsl_compat/subgroup_basic.hlsl"
99

1010
namespace nbl
@@ -15,62 +15,62 @@ namespace glsl
1515
{
1616

1717
// TODO: Extemely annoying that HLSL doesn't have referencies, so we can't transparently alias the variables as `const&` :(
18-
uint32_t4 gl_SubgroupEqMask() {return spirv::BuiltInSubgroupEqMask;}
19-
uint32_t4 gl_SubgroupGeMask() {return spirv::BuiltInSubgroupGeMask;}
20-
uint32_t4 gl_SubgroupGtMask() {return spirv::BuiltInSubgroupGtMask;}
21-
uint32_t4 gl_SubgroupLeMask() {return spirv::BuiltInSubgroupLeMask;}
22-
uint32_t4 gl_SubgroupLtMask() {return spirv::BuiltInSubgroupLtMask;}
18+
uint32_t4 gl_SubgroupEqMask() {return spirv::builtin::SubgroupEqMask;}
19+
uint32_t4 gl_SubgroupGeMask() {return spirv::builtin::SubgroupGeMask;}
20+
uint32_t4 gl_SubgroupGtMask() {return spirv::builtin::SubgroupGtMask;}
21+
uint32_t4 gl_SubgroupLeMask() {return spirv::builtin::SubgroupLeMask;}
22+
uint32_t4 gl_SubgroupLtMask() {return spirv::builtin::SubgroupLtMask;}
2323

2424
template<typename T>
2525
T subgroupBroadcastFirst(T value)
2626
{
27-
return spirv::subgroupBroadcastFirst<T>(spv::ScopeSubgroup, value);
27+
return spirv::groupNonUniformBroadcastFirst<T>(spv::ScopeSubgroup, value);
2828
}
2929

3030
template<typename T>
3131
T subgroupBroadcast(T value, const uint32_t invocationId)
3232
{
33-
return spirv::subgroupBroadcast<T>(spv::ScopeSubgroup, value, invocationId);
33+
return spirv::groupNonUniformBroadcast<T>(spv::ScopeSubgroup, value, invocationId);
3434
}
3535

3636
uint32_t4 subgroupBallot(bool value)
3737
{
38-
return spirv::subgroupBallot(spv::ScopeSubgroup, value);
38+
return spirv::groupNonUniformBallot(spv::ScopeSubgroup, value);
3939
}
4040

4141
bool subgroupInverseBallot(uint32_t4 value)
4242
{
43-
return spirv::subgroupInverseBallot(spv::ScopeSubgroup, value);
43+
return spirv::groupNonUniformInverseBallot(spv::ScopeSubgroup, value);
4444
}
4545

4646
bool subgroupBallotBitExtract(uint32_t4 value, uint32_t index)
4747
{
48-
return spirv::subgroupBallotBitExtract(spv::ScopeSubgroup, value, index);
48+
return spirv::groupNonUniformBallotBitExtract(spv::ScopeSubgroup, value, index);
4949
}
5050

5151
uint32_t subgroupBallotBitCount(uint32_t4 value)
5252
{
53-
return spirv::subgroupBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
53+
return spirv::groupNonUniformBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
5454
}
5555

5656
uint32_t subgroupBallotInclusiveBitCount(uint32_t4 value)
5757
{
58-
return spirv::subgroupBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
58+
return spirv::groupNonUniformBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
5959
}
6060

6161
uint32_t subgroupBallotExclusiveBitCount(uint32_t4 value)
6262
{
63-
return spirv::subgroupBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
63+
return spirv::groupNonUniformBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
6464
}
6565

6666
uint32_t subgroupBallotFindLSB(uint32_t4 value)
6767
{
68-
return spirv::subgroupBallotFindLSB(spv::ScopeSubgroup, value);
68+
return spirv::groupNonUniformBallotFindLSB(spv::ScopeSubgroup, value);
6969
}
7070

7171
uint32_t subgroupBallotFindMSB(uint32_t4 value)
7272
{
73-
return spirv::subgroupBallotFindMSB(spv::ScopeSubgroup, value);
73+
return spirv::groupNonUniformBallotFindMSB(spv::ScopeSubgroup, value);
7474
}
7575
}
7676
}

include/nbl/builtin/hlsl/glsl_compat/subgroup_basic.hlsl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#define _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_BASIC_INCLUDED_
66

77
#include "nbl/builtin/hlsl/glsl_compat/core.hlsl"
8-
#include "nbl/builtin/hlsl/spirv_intrinsics/subgroup_basic.hlsl"
8+
#include "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
99

1010
namespace nbl
1111
{
@@ -16,16 +16,16 @@ namespace glsl
1616
#ifdef __HLSL_VERSION
1717
// TODO: Extemely annoying that HLSL doesn't have referencies, so we can't transparently alias the variables as `const&` :(
1818
// NOTE: These are not `uint16_t` even though they could be, because IIUtSC they're `uint32_t` in SPIR-V
19-
uint32_t gl_SubgroupSize() {return spirv::SubgroupSize;}
20-
uint32_t gl_SubgroupSizeLog2() {return firstbithigh(spirv::SubgroupSize);}
21-
uint32_t gl_SubgroupInvocationID() {return spirv::SubgroupLocalInvocationId;}
19+
uint32_t gl_SubgroupSize() {return spirv::builtin::SubgroupSize;}
20+
uint32_t gl_SubgroupSizeLog2() {return firstbithigh(spirv::builtin::SubgroupSize);}
21+
uint32_t gl_SubgroupInvocationID() {return spirv::builtin::SubgroupLocalInvocationId;}
2222

2323
// only available in compute
24-
uint32_t gl_NumSubgroups() {return spirv::NumSubgroups;}
25-
uint32_t gl_SubgroupID() {return spirv::SubgroupId;}
24+
uint32_t gl_NumSubgroups() {return spirv::builtin::NumSubgroups;}
25+
uint32_t gl_SubgroupID() {return spirv::builtin::SubgroupId;}
2626

2727
bool subgroupElect() {
28-
return spirv::subgroupElect(spv::ScopeSubgroup);
28+
return spirv::groupNonUniformElect(spv::ScopeSubgroup);
2929
}
3030

3131
void subgroupBarrier() {

include/nbl/builtin/hlsl/glsl_compat/subgroup_shuffle.hlsl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#ifndef _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_SHUFFLE_INCLUDED_
55
#define _NBL_BUILTIN_HLSL_GLSL_COMPAT_SUBGROUP_SHUFFLE_INCLUDED_
66

7-
#include "nbl/builtin/hlsl/spirv_intrinsics/subgroup_shuffle.hlsl"
7+
#include "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
88

99
namespace nbl
1010
{
@@ -15,25 +15,25 @@ namespace glsl
1515
template<typename T>
1616
T subgroupShuffle(T value, uint32_t invocationId)
1717
{
18-
return spirv::groupShuffle<T>(spv::ScopeSubgroup, value, invocationId);
18+
return spirv::groupNonUniformShuffle<T>(spv::ScopeSubgroup, value, invocationId);
1919
}
2020

2121
template<typename T>
2222
T subgroupShuffleXor(T value, uint32_t mask)
2323
{
24-
return spirv::groupShuffleXor<T>(spv::ScopeSubgroup, value, mask);
24+
return spirv::groupNonUniformShuffleXor<T>(spv::ScopeSubgroup, value, mask);
2525
}
2626

2727
template<typename T>
2828
T subgroupShuffleUp(T value, uint32_t delta)
2929
{
30-
return spirv::groupShuffleUp<T>(spv::ScopeSubgroup, value, delta);
30+
return spirv::groupNonUniformShuffleUp<T>(spv::ScopeSubgroup, value, delta);
3131
}
3232

3333
template<typename T>
3434
T subgroupShuffleDown(T value, uint32_t delta)
3535
{
36-
return spirv::groupShuffleDown<T>(spv::ScopeSubgroup, value, delta);
36+
return spirv::groupNonUniformShuffleDown<T>(spv::ScopeSubgroup, value, delta);
3737
}
3838

3939

0 commit comments

Comments
 (0)