@@ -159,8 +159,7 @@ struct inclusive_scan<Params, BinOp, 1, false>
159
159
static scalar_t __call (scalar_t value)
160
160
{
161
161
// sync up each subgroup invocation so it runs in lockstep
162
- // not ideal because might not write to shared memory but a storage class is needed
163
- spirv::memoryBarrier (spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask | spv::MemorySemanticsAcquireMask);
162
+ spirv::controlBarrier (spv::ScopeSubgroup, spv::ScopeSubgroup, spv::MemorySemanticsMaskNone);
164
163
165
164
binop_t op;
166
165
const uint32_t subgroupInvocation = glsl::gl_SubgroupInvocationID ();
@@ -190,8 +189,7 @@ struct exclusive_scan<Params, BinOp, 1, false>
190
189
scalar_t operator ()(scalar_t value)
191
190
{
192
191
// sync up each subgroup invocation so it runs in lockstep
193
- // not ideal because might not write to shared memory but a storage class is needed
194
- spirv::memoryBarrier (spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask | spv::MemorySemanticsAcquireMask);
192
+ spirv::controlBarrier (spv::ScopeSubgroup, spv::ScopeSubgroup, spv::MemorySemanticsMaskNone);
195
193
196
194
scalar_t left = hlsl::mix (binop_t::identity, glsl::subgroupShuffleUp<scalar_t>(value,1 ), bool (glsl::gl_SubgroupInvocationID ()));
197
195
return inclusive_scan<Params, BinOp, 1 , false >::__call (left);
@@ -212,8 +210,7 @@ struct reduction<Params, BinOp, 1, false>
212
210
scalar_t operator ()(scalar_t value)
213
211
{
214
212
// sync up each subgroup invocation so it runs in lockstep
215
- // not ideal because might not write to shared memory but a storage class is needed
216
- spirv::memoryBarrier (spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask | spv::MemorySemanticsAcquireMask);
213
+ spirv::controlBarrier (spv::ScopeSubgroup, spv::ScopeSubgroup, spv::MemorySemanticsMaskNone);
217
214
218
215
binop_t op;
219
216
const uint32_t SubgroupSizeLog2 = config_t::SizeLog2;
0 commit comments