aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Storage.glsl
blob: 0862a71bf6e23b600239b6be2cacf0193350e4e8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int Helper_AtomicMaxS32(int index, int offset, int value)
{
    uint oldValue, newValue;
    do
    {
        oldValue = $STORAGE_MEM$[index].data[offset];
        newValue = uint(max(int(oldValue), value));
    } while (atomicCompSwap($STORAGE_MEM$[index].data[offset], oldValue, newValue) != oldValue);
    return int(oldValue);
}

int Helper_AtomicMinS32(int index, int offset, int value)
{
    uint oldValue, newValue;
    do
    {
        oldValue = $STORAGE_MEM$[index].data[offset];
        newValue = uint(min(int(oldValue), value));
    } while (atomicCompSwap($STORAGE_MEM$[index].data[offset], oldValue, newValue) != oldValue);
    return int(oldValue);
}