aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/StoreStorageSmallInt.glsl
blob: f2253a7969f3a5af7b0546a1e7f86c341c698057 (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_StoreStorage16(int index, int offset, uint value)
{
    int wordOffset = offset >> 2;
    int bitOffset = (offset & 3) * 8;
    uint oldValue, newValue;
    do
    {
        oldValue = $STORAGE_MEM$[index].data[wordOffset];
        newValue = bitfieldInsert(oldValue, value, bitOffset, 16);
    } while (atomicCompSwap($STORAGE_MEM$[index].data[wordOffset], oldValue, newValue) != oldValue);
}

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