[qfcc] Correct basic glsl atomic functions

The `mem` param is now a reference (though it manages to skip checks
based on the tag, but that's convenient for now).
This commit is contained in:
Bill Currie 2025-01-21 22:45:24 +09:00
parent 53afbc3a9b
commit ce8d1467ef

View file

@ -1139,58 +1139,62 @@ SRC_LINE
static const char *glsl_atomic_functions =
SRC_LINE
"#define uint unsigned" "\n"
"#define uintr @reference(uint)" "\n"
"#define intr @reference(int)" "\n"
"#define inout @inout" "\n"
"@overload uint atomicAdd(inout uint mem, const uint data)" "\n"
"@overload uint atomicAdd(uintr mem, const uint data)" "\n"
"= " SPV(OpAtomicIAdd) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicAdd(inout int mem, const int data)" "\n"
"@overload int atomicAdd(intr mem, const int data)" "\n"
"= " SPV(OpAtomicIAdd) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload uint atomicMin(inout uint mem, const uint data)" "\n"
"@overload uint atomicMin(uintr mem, const uint data)" "\n"
"= " SPV(OpAtomicUMin) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicMin(inout int mem, const int data)" "\n"
"@overload int atomicMin(intr mem, const int data)" "\n"
"= " SPV(OpAtomicSMin) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload uint atomicMax(inout uint mem, const uint data)" "\n"
"@overload uint atomicMax(uintr mem, const uint data)" "\n"
"= " SPV(OpAtomicUMax) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicMax(inout int mem, const int data)" "\n"
"@overload int atomicMax(intr mem, const int data)" "\n"
"= " SPV(OpAtomicUMax) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload uint atomicAnd(inout uint mem, const uint data)" "\n"
"@overload uint atomicAnd(uintr mem, const uint data)" "\n"
"= " SPV(OpAtomicAnd) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicAnd(inout int mem, const int data)" "\n"
"@overload int atomicAnd(intr mem, const int data)" "\n"
"= " SPV(OpAtomicAnd) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload uint atomicOr(inout uint mem, const uint data)" "\n"
"@overload uint atomicOr(uintr mem, const uint data)" "\n"
"= " SPV(OpAtomicOr) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicOr(inout int mem, const int data)" "\n"
"@overload int atomicOr(intr mem, const int data)" "\n"
"= " SPV(OpAtomicOr) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload uint atomicXor(inout uint mem, const uint data)" "\n"
"@overload uint atomicXor(uintr mem, const uint data)" "\n"
"= " SPV(OpAtomicXor) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicXor(inout int mem, const int data)" "\n"
"@overload int atomicXor(intr mem, const int data)" "\n"
"= " SPV(OpAtomicXor) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload uint atomicExchange(inout uint mem, const uint data)" "\n"
"@overload uint atomicExchange(uintr mem, const uint data)" "\n"
"= " SPV(OpAtomicExchange) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicExchange(inout int mem, const int data)" "\n"
"@overload int atomicExchange(intr mem, const int data)" "\n"
"= " SPV(OpAtomicExchange) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload uint atomicCompSwap(inout uint mem, const uint compare," "\n"
"@overload uint atomicCompSwap(uintr mem, const uint compare," "\n"
"const uint data)" "\n"
"= " SPV(OpAtomicCompareExchange) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"@overload int atomicCompSwap(inout int mem, const int compare," "\n"
"@overload int atomicCompSwap(intr mem, const int compare," "\n"
"const int data)" "\n"
"= " SPV(OpAtomicCompareExchange) "[mem, Scope.Device," "\n"
"MemorySemantics.None, data];" "\n"
"#undef uint" "\n"
"#undef intr" "\n"
"#undef uintr" "\n"
"#undef uint" "\n"
"#undef inout" "\n";
static const char *glsl_image_functions =