Skip to content

Commit ed96a86

Browse files
Merge pull request #578 from Devsh-Graphics-Programming/spirv_intrinsics
SPIRV INTRINSICS from Header enums (#577)
2 parents 2ca31a5 + f75f284 commit ed96a86

File tree

5 files changed

+112
-112
lines changed

5 files changed

+112
-112
lines changed

include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -18,80 +18,80 @@ namespace spirv
1818

1919
#pragma region ATOMICS
2020
template<typename T>
21-
T atomicAdd([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
21+
T atomicAdd([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
2222
template<>
2323
[[vk::ext_instruction(spv::OpAtomicIAdd)]]
24-
int atomicAdd([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
24+
int32_t atomicAdd([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
2525
template<>
26-
[[vk::ext_instruction(/* OpAtomicIAdd */ 234)]]
27-
uint atomicAdd([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
26+
[[vk::ext_instruction( spv::OpAtomicIAdd )]]
27+
uint32_t atomicAdd([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
2828

2929
template<typename T>
30-
T atomicAnd([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
30+
T atomicAnd([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
3131
template<>
32-
[[vk::ext_instruction(/* OpAtomicAnd */ 240)]]
33-
int atomicAnd([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
32+
[[vk::ext_instruction( spv::OpAtomicAnd )]]
33+
int32_t atomicAnd([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
3434
template<>
35-
[[vk::ext_instruction(/* OpAtomicAnd */ 240)]]
36-
uint atomicAnd([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
35+
[[vk::ext_instruction( spv::OpAtomicAnd )]]
36+
uint32_t atomicAnd([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
3737

3838
template<typename T>
39-
T atomicOr([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
39+
T atomicOr([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
4040
template<>
41-
[[vk::ext_instruction(/* OpAtomicOr */ 241)]]
42-
int atomicOr([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
41+
[[vk::ext_instruction( spv::OpAtomicOr )]]
42+
int32_t atomicOr([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
4343
template<>
44-
[[vk::ext_instruction(/* OpAtomicOr */ 241)]]
45-
uint atomicOr([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
44+
[[vk::ext_instruction( spv::OpAtomicOr )]]
45+
uint32_t atomicOr([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
4646

4747
template<typename T>
48-
T atomicXor([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
48+
T atomicXor([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
4949
template<>
50-
[[vk::ext_instruction(/* OpAtomicXor */ 242)]]
51-
int atomicXor([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
50+
[[vk::ext_instruction( spv::OpAtomicXor )]]
51+
int32_t atomicXor([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
5252
template<>
53-
[[vk::ext_instruction(/* OpAtomicXor */ 242)]]
54-
uint atomicXor([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
53+
[[vk::ext_instruction( spv::OpAtomicXor )]]
54+
uint32_t atomicXor([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
5555

5656
template<typename T>
57-
T atomicMin([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
57+
T atomicMin([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
5858
template<>
59-
[[vk::ext_instruction(/* OpAtomicSMin */ 236)]]
60-
int atomicMin([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
59+
[[vk::ext_instruction( spv::OpAtomicSMin )]]
60+
int32_t atomicMin([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
6161
template<>
62-
[[vk::ext_instruction(/* OpAtomicSMin */ 236)]]
63-
uint atomicMin([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
62+
[[vk::ext_instruction( spv::OpAtomicSMin )]]
63+
uint32_t atomicMin([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
6464

6565
template<typename T>
66-
T atomicMax([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
66+
T atomicMax([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
6767
template<>
68-
[[vk::ext_instruction(/* OpAtomicSMax */ 238)]]
69-
int atomicMax([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
68+
[[vk::ext_instruction( spv::OpAtomicSMax )]]
69+
int32_t atomicMax([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
7070
template<>
71-
[[vk::ext_instruction(/* OpAtomicSMax */ 238)]]
72-
uint atomicMax([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
71+
[[vk::ext_instruction( spv::OpAtomicSMax )]]
72+
uint32_t atomicMax([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
7373

7474
template<typename T>
75-
T atomicExchange([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
75+
T atomicExchange([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
7676
template<>
77-
[[vk::ext_instruction(/* OpAtomicExchange */ 229)]]
78-
int atomicExchange([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
77+
[[vk::ext_instruction( spv::OpAtomicExchange )]]
78+
int32_t atomicExchange([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
7979
template<>
80-
[[vk::ext_instruction(/* OpAtomicExchange */ 229)]]
81-
uint atomicExchange([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
80+
[[vk::ext_instruction( spv::OpAtomicExchange )]]
81+
uint32_t atomicExchange([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
8282
template<>
83-
[[vk::ext_instruction(/* OpAtomicExchange */ 229)]]
84-
float atomicExchange([[vk::ext_reference]] float ptr, uint memoryScope, uint memorySemantics, float value);
83+
[[vk::ext_instruction( spv::OpAtomicExchange )]]
84+
float32_t atomicExchange([[vk::ext_reference]] float32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, float32_t value);
8585

8686

8787
template<typename T>
88-
T atomicCompSwap([[vk::ext_reference]] T ptr, uint memoryScope, uint memSemanticsEqual, uint memSemanticsUnequal, T value, T comparator);
88+
T atomicCompSwap([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, T value, T comparator);
8989
template<>
90-
[[vk::ext_instruction(/* OpAtomicCompareExchange */ 230)]]
91-
int atomicCompSwap([[vk::ext_reference]] int ptr, uint memoryScope, uint memSemanticsEqual, uint memSemanticsUnequal, int value, int comparator);
90+
[[vk::ext_instruction( spv::OpAtomicCompareExchange )]]
91+
int32_t atomicCompSwap([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, int32_t value, int32_t comparator);
9292
template<>
93-
[[vk::ext_instruction(/* OpAtomicCompareExchange */ 230)]]
94-
uint atomicCompSwap([[vk::ext_reference]] uint ptr, uint memoryScope, uint memSemanticsEqual, uint memSemanticsUnequal, uint value, uint comparator);
93+
[[vk::ext_instruction( spv::OpAtomicCompareExchange )]]
94+
uint32_t atomicCompSwap([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, uint32_t value, uint32_t comparator);
9595
#pragma endregion ATOMICS
9696

9797
#pragma region BARRIERS
@@ -100,11 +100,11 @@ uint atomicCompSwap([[vk::ext_reference]] uint ptr, uint memoryScope, uint memSe
100100
// https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_memory_semantics_id
101101
// By providing memory semantics None we do both control and memory barrier as is done in GLSL
102102

103-
[[vk::ext_instruction(/* OpControlBarrier */ 224)]]
104-
void controlBarrier(uint executionScope, uint memoryScope, uint memorySemantics);
103+
[[vk::ext_instruction( spv::OpControlBarrier )]]
104+
void controlBarrier(uint32_t executionScope, uint32_t memoryScope, uint32_t memorySemantics);
105105

106-
[[vk::ext_instruction(/* OpMemoryBarrier */ 225)]]
107-
void memoryBarrier(uint memoryScope, uint memorySemantics);
106+
[[vk::ext_instruction( spv::OpMemoryBarrier )]]
107+
void memoryBarrier(uint32_t memoryScope, uint32_t memorySemantics);
108108
#pragma endregion BARRIERS
109109

110110
#pragma region CONVERSION
@@ -122,5 +122,5 @@ T bitcast(U);
122122
#endif
123123
}
124124
}
125-
126-
#endif
125+
126+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_arithmetic.hlsl

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -14,65 +14,65 @@ namespace hlsl
1414
namespace spirv
1515
{
1616

17-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
18-
[[vk::ext_instruction(349)]]
19-
int groupAdd(uint groupScope, [[vk::ext_literal]] uint operation, int value);
20-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
21-
[[vk::ext_instruction(349)]]
22-
uint groupAdd(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
23-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
24-
[[vk::ext_instruction(350)]]
25-
float groupAdd(uint groupScope, [[vk::ext_literal]] uint operation, float value);
17+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
18+
[[vk::ext_instruction( spv::OpGroupNonUniformIAdd )]]
19+
int32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
20+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
21+
[[vk::ext_instruction( spv::OpGroupNonUniformIAdd )]]
22+
uint32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
23+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
24+
[[vk::ext_instruction( spv::OpGroupNonUniformFAdd )]]
25+
float32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
2626

27-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
28-
[[vk::ext_instruction(351)]]
29-
int groupMul(uint groupScope, [[vk::ext_literal]] uint operation, int value);
30-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
31-
[[vk::ext_instruction(351)]]
32-
uint groupMul(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
33-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
34-
[[vk::ext_instruction(352)]]
35-
float groupMul(uint groupScope, [[vk::ext_literal]] uint operation, float value);
27+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
28+
[[vk::ext_instruction( spv::OpGroupNonUniformIMul )]]
29+
int32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
30+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
31+
[[vk::ext_instruction( spv::OpGroupNonUniformIMul )]]
32+
uint32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
33+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
34+
[[vk::ext_instruction( spv::OpGroupNonUniformFMul )]]
35+
float32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
3636

3737
template<typename T>
38-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
39-
[[vk::ext_instruction(359)]]
40-
T groupBitwiseAnd(uint groupScope, [[vk::ext_literal]] uint operation, T value);
38+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
39+
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseAnd )]]
40+
T groupBitwiseAnd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
4141

4242
template<typename T>
43-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
44-
[[vk::ext_instruction(360)]]
45-
T groupBitwiseOr(uint groupScope, [[vk::ext_literal]] uint operation, T value);
43+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
44+
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseOr )]]
45+
T groupBitwiseOr(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
4646

4747
template<typename T>
48-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
49-
[[vk::ext_instruction(361)]]
50-
T groupBitwiseXor(uint groupScope, [[vk::ext_literal]] uint operation, T value);
48+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
49+
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseXor )]]
50+
T groupBitwiseXor(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
5151

5252
// The MIN and MAX operations in SPIR-V have different Ops for each arithmetic type
5353
// so we implement them distinctly
54-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
55-
[[vk::ext_instruction(353)]]
56-
int groupBitwiseMin(uint groupScope, [[vk::ext_literal]] uint operation, int value);
57-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
58-
[[vk::ext_instruction(354)]]
59-
uint groupBitwiseMin(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
60-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
61-
[[vk::ext_instruction(355)]]
62-
float groupBitwiseMin(uint groupScope, [[vk::ext_literal]] uint operation, float value);
54+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
55+
[[vk::ext_instruction( spv::OpGroupNonUniformSMin )]]
56+
int32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
57+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
58+
[[vk::ext_instruction( spv::OpGroupNonUniformUMin )]]
59+
uint32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
60+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
61+
[[vk::ext_instruction( spv::OpGroupNonUniformFMin )]]
62+
float32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
6363

64-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
65-
[[vk::ext_instruction(356)]]
66-
int groupBitwiseMax(uint groupScope, [[vk::ext_literal]] uint operation, int value);
67-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
68-
[[vk::ext_instruction(357)]]
69-
uint groupBitwiseMax(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
70-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
71-
[[vk::ext_instruction(358)]]
72-
float groupBitwiseMax(uint groupScope, [[vk::ext_literal]] uint operation, float value);
64+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
65+
[[vk::ext_instruction( spv::OpGroupNonUniformSMax )]]
66+
int32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
67+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
68+
[[vk::ext_instruction( spv::OpGroupNonUniformUMax )]]
69+
uint32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
70+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
71+
[[vk::ext_instruction( spv::OpGroupNonUniformFMax )]]
72+
float32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
7373

7474
}
7575
}
7676
}
7777

78-
#endif
78+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_ballot.hlsl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ namespace hlsl
1515
namespace spirv
1616
{
1717
template<typename T>
18-
[[vk::ext_capability(/* GroupNonUniformBallot */ 64)]]
19-
[[vk::ext_instruction(/* OpGroupNonUniformBroadcastFirst */ 338)]]
20-
T subgroupBroadcastFirst(uint executionScope, T value);
18+
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
19+
[[vk::ext_instruction( spv::OpGroupNonUniformBroadcastFirst )]]
20+
T subgroupBroadcastFirst(uint32_t executionScope, T value);
2121

2222
template<typename T>
23-
[[vk::ext_capability(/* GroupNonUniformBallot */ 64)]]
24-
[[vk::ext_instruction(/* OpGroupNonUniformBroadcast */ 337)]]
25-
T subgroupBroadcast(uint executionScope, T value, uint invocationId);
23+
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
24+
[[vk::ext_instruction( spv::OpGroupNonUniformBroadcast )]]
25+
T subgroupBroadcast(uint32_t executionScope, T value, uint32_t invocationId);
2626
}
2727
}
2828
}
2929

30-
#endif
30+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_basic.hlsl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ namespace hlsl
1515
namespace spirv
1616
{
1717

18-
[[vk::ext_instruction(/* OpGroupNonUniformElect */ 333)]]
19-
bool subgroupElect(uint executionScope);
18+
[[vk::ext_instruction( spv::OpGroupNonUniformElect )]]
19+
bool subgroupElect(uint32_t executionScope);
2020

2121
}
2222
}
2323
}
2424

25-
#endif
25+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_shuffle.hlsl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,22 @@ namespace hlsl
1515
namespace spirv
1616
{
1717
template<typename T>
18-
[[vk::ext_instruction(/* OpGroupNonUniformShuffle */ 345)]]
19-
T groupShuffle(uint executionScope, T value, uint invocationId);
18+
[[vk::ext_instruction( spv::OpGroupNonUniformShuffle )]]
19+
T groupShuffle(uint32_t executionScope, T value, uint32_t invocationId);
2020

2121
#ifdef NBL_GL_KHR_shader_subgroup_shuffle_relative
2222
template<typename T>
23-
[[vk::ext_capability(/* GroupNonUniformShuffleRelative */ 66)]]
24-
[[vk::ext_instruction(/* OpGroupNonUniformShuffleUp */ 347)]]
25-
T groupShuffleUp(uint executionScope, T value, uint delta);
23+
[[vk::ext_capability( spv::CapabilityGroupNonUniformShuffleRelative )]]
24+
[[vk::ext_instruction( spv::OpGroupNonUniformShuffleUp )]]
25+
T groupShuffleUp(uint32_t executionScope, T value, uint32_t delta);
2626

2727
template<typename T>
28-
[[vk::ext_capability(/* GroupNonUniformShuffleRelative */ 66)]]
29-
[[vk::ext_instruction(/* OpGroupNonUniformShuffleDown */ 348)]]
30-
T groupShuffleDown(uint executionScope, T value, uint delta);
28+
[[vk::ext_capability( spv::CapabilityGroupNonUniformShuffleRelative )]]
29+
[[vk::ext_instruction( spv::OpGroupNonUniformShuffleDown )]]
30+
T groupShuffleDown(uint32_t executionScope, T value, uint32_t delta);
3131
#endif
3232
}
3333
}
3434
}
3535

36-
#endif
36+
#endif

0 commit comments

Comments
 (0)