aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/StoreSharedSmallInt.glsl
blob: 2f57b5ff64ddbad901d3780d76da3102562d1405 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Helper_StoreShared16(int offset, uint value)
{
    int wordOffset = offset >> 2;
    int bitOffset = (offset & 3) * 8;
    uint oldValue, newValue;
    do
    {
        oldValue = $SHARED_MEM$[wordOffset];
        newValue = bitfieldInsert(oldValue, value, bitOffset, 16);
    } while (atomicCompSwap($SHARED_MEM$[wordOffset], oldValue, newValue) != oldValue);
}

void Helper_StoreShared8(int offset, uint value)
{
    int wordOffset = offset >> 2;
    int bitOffset = (offset & 3) * 8;
    uint oldValue, newValue;
    do
    {
        oldValue = $SHARED_MEM$[wordOffset];
        newValue = bitfieldInsert(oldValue, value, bitOffset, 8);
    } while (atomicCompSwap($SHARED_MEM$[wordOffset], oldValue, newValue) != oldValue);
}