1#version 450
2
3layout(binding = 0, r32f) uniform coherent image1D      i1D;
4layout(binding = 1, r32f) uniform volatile image2D      i2D;
5layout(binding = 2, r32f) uniform restrict image2DRect  i2DRect;
6layout(binding = 3, r32f) uniform readonly image3D      i3D;
7layout(binding = 3, r32f) uniform writeonly imageCube   iCube;
8
9struct Data
10{
11    float f1;
12    vec2  f2;
13};
14
15coherent buffer Buffer
16{
17    volatile float f1;
18    restrict vec2  f2;
19    readonly vec3  f3;
20    writeonly vec4 f4;
21    int i1;
22    Data data;
23};
24
25void main()
26{
27    vec4 texel = imageLoad(i1D, 1);
28    texel += imageLoad(i2D, ivec2(1));
29    texel += imageLoad(i2DRect, ivec2(1));
30    texel += imageLoad(i3D, ivec3(1));
31    imageStore(iCube, ivec3(1), texel);
32
33    texel[i1] = f1;
34    texel.xy += f2;
35    texel.xyz -= f3;
36    texel.w += data.f1 + data.f2[1];
37    f4 = texel;
38}