• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#version 310 es
2#extension GL_OES_shader_image_atomic : require
3layout(local_size_x = 1) in;
4
5layout(r32ui, binding = 0) uniform highp uimage2D uImage;
6layout(r32i, binding = 1) uniform highp iimage2D iImage;
7layout(binding = 2, std430) buffer SSBO
8{
9    uint u32;
10    int i32;
11} ssbo;
12
13void main()
14{
15    imageAtomicAdd(uImage, ivec2(1, 5), 1u);
16
17    // Test that we do not invalidate OpImage variables which are loaded from UniformConstant
18    // address space.
19    imageStore(iImage, ivec2(1, 6), ivec4(imageAtomicAdd(uImage, ivec2(1, 5), 1u)));
20
21    imageAtomicOr(uImage, ivec2(1, 5), 1u);
22    imageAtomicXor(uImage, ivec2(1, 5), 1u);
23    imageAtomicAnd(uImage, ivec2(1, 5), 1u);
24    imageAtomicMin(uImage, ivec2(1, 5), 1u);
25    imageAtomicMax(uImage, ivec2(1, 5), 1u);
26    //imageAtomicExchange(uImage, ivec2(1, 5), 1u);
27    imageAtomicCompSwap(uImage, ivec2(1, 5), 10u, 2u);
28
29    imageAtomicAdd(iImage, ivec2(1, 6), 1);
30    imageAtomicOr(iImage, ivec2(1, 6), 1);
31    imageAtomicXor(iImage, ivec2(1, 6), 1);
32    imageAtomicAnd(iImage, ivec2(1, 6), 1);
33    imageAtomicMin(iImage, ivec2(1, 6), 1);
34    imageAtomicMax(iImage, ivec2(1, 6), 1);
35    //imageAtomicExchange(iImage, ivec2(1, 5), 1u);
36    imageAtomicCompSwap(iImage, ivec2(1, 5), 10, 2);
37
38    atomicAdd(ssbo.u32, 1u);
39    atomicOr(ssbo.u32, 1u);
40    atomicXor(ssbo.u32, 1u);
41    atomicAnd(ssbo.u32, 1u);
42    atomicMin(ssbo.u32, 1u);
43    atomicMax(ssbo.u32, 1u);
44    atomicExchange(ssbo.u32, 1u);
45    atomicCompSwap(ssbo.u32, 10u, 2u);
46
47    atomicAdd(ssbo.i32, 1);
48    atomicOr(ssbo.i32, 1);
49    atomicXor(ssbo.i32, 1);
50    atomicAnd(ssbo.i32, 1);
51    atomicMin(ssbo.i32, 1);
52    atomicMax(ssbo.i32, 1);
53    atomicExchange(ssbo.i32, 1);
54    atomicCompSwap(ssbo.i32, 10, 2);
55}
56
57