@@ -38,6 +38,7 @@ genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Off
38
38
// Fun fact: ideally atomics should detect the address space of `ptr` and narrow down the sync-scope properly
39
39
// https://github.com/microsoft/DirectXShaderCompiler/issues/6508
40
40
// Would need own meta-type/tagged-type to implement, without & and fancy operator overloads... not posssible
41
+ // TODO: we can template on `StorageClass` instead of Ptr_T then resolve the memory scope and semantics properly
41
42
template<typename T>
42
43
T atomicAdd (NBL_REF_ARG (T) ptr, T value)
43
44
{
@@ -114,9 +115,9 @@ T atomicCompSwap(NBL_REF_ARG(T) ptr, T comparator, T value)
114
115
return spirv::atomicCompareExchange<T>(ptr, spv::ScopeDevice, spv::MemorySemanticsMaskNone, spv::MemorySemanticsMaskNone, value, comparator);
115
116
}
116
117
template<typename T, typename Ptr_T> // DXC Workaround
117
- enable_if_t<is_spirv_type_v<Ptr_T>, T> atomicCompSwap (Ptr_T ptr, T value)
118
+ enable_if_t<is_spirv_type_v<Ptr_T>, T> atomicCompSwap (Ptr_T ptr, T comparator, T value)
118
119
{
119
- return spirv::atomicCompareExchange<T, Ptr_T>(ptr, spv::ScopeDevice, spv::MemorySemanticsMaskNone, value);
120
+ return spirv::atomicCompareExchange<T, Ptr_T>(ptr, spv::ScopeDevice, spv::MemorySemanticsMaskNone, spv::MemorySemanticsMaskNone, value, comparator );
120
121
}
121
122
122
123
/**
0 commit comments