• 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
13shared int int_atomic;
14shared uint uint_atomic;
15shared int int_atomic_array[1];
16shared uint uint_atomic_array[1];
17
18void main()
19{
20    imageAtomicAdd(uImage, ivec2(1, 5), 1u);
21
22    // Test that we do not invalidate OpImage variables which are loaded from UniformConstant
23    // address space.
24    imageStore(iImage, ivec2(1, 6), ivec4(imageAtomicAdd(uImage, ivec2(1, 5), 1u)));
25
26    imageAtomicOr(uImage, ivec2(1, 5), 1u);
27    imageAtomicXor(uImage, ivec2(1, 5), 1u);
28    imageAtomicAnd(uImage, ivec2(1, 5), 1u);
29    imageAtomicMin(uImage, ivec2(1, 5), 1u);
30    imageAtomicMax(uImage, ivec2(1, 5), 1u);
31    //imageAtomicExchange(uImage, ivec2(1, 5), 1u);
32    imageAtomicCompSwap(uImage, ivec2(1, 5), 10u, 2u);
33
34    imageAtomicAdd(iImage, ivec2(1, 6), 1);
35    imageAtomicOr(iImage, ivec2(1, 6), 1);
36    imageAtomicXor(iImage, ivec2(1, 6), 1);
37    imageAtomicAnd(iImage, ivec2(1, 6), 1);
38    imageAtomicMin(iImage, ivec2(1, 6), 1);
39    imageAtomicMax(iImage, ivec2(1, 6), 1);
40    //imageAtomicExchange(iImage, ivec2(1, 5), 1u);
41    imageAtomicCompSwap(iImage, ivec2(1, 5), 10, 2);
42
43    atomicAdd(ssbo.u32, 1u);
44    atomicOr(ssbo.u32, 1u);
45    atomicXor(ssbo.u32, 1u);
46    atomicAnd(ssbo.u32, 1u);
47    atomicMin(ssbo.u32, 1u);
48    atomicMax(ssbo.u32, 1u);
49    atomicExchange(ssbo.u32, 1u);
50    atomicCompSwap(ssbo.u32, 10u, 2u);
51
52    atomicAdd(ssbo.i32, 1);
53    atomicOr(ssbo.i32, 1);
54    atomicXor(ssbo.i32, 1);
55    atomicAnd(ssbo.i32, 1);
56    atomicMin(ssbo.i32, 1);
57    atomicMax(ssbo.i32, 1);
58    atomicExchange(ssbo.i32, 1);
59    atomicCompSwap(ssbo.i32, 10, 2);
60
61	atomicAdd(int_atomic, 10);
62	atomicAdd(uint_atomic, 10u);
63	atomicAdd(int_atomic_array[0], 10);
64	atomicAdd(uint_atomic_array[0], 10u);
65}
66
67