1617a3babSopenharmony_ci#version 450
2617a3babSopenharmony_ci
3617a3babSopenharmony_cilayout(binding = 0, r32f) uniform coherent image1D      i1D;
4617a3babSopenharmony_cilayout(binding = 1, r32f) uniform volatile image2D      i2D;
5617a3babSopenharmony_cilayout(binding = 2, r32f) uniform restrict image2DRect  i2DRect;
6617a3babSopenharmony_cilayout(binding = 3, r32f) uniform readonly image3D      i3D;
7617a3babSopenharmony_cilayout(binding = 3, r32f) uniform writeonly imageCube   iCube;
8617a3babSopenharmony_ci
9617a3babSopenharmony_cistruct Data
10617a3babSopenharmony_ci{
11617a3babSopenharmony_ci    float f1;
12617a3babSopenharmony_ci    vec2  f2;
13617a3babSopenharmony_ci};
14617a3babSopenharmony_ci
15617a3babSopenharmony_cicoherent buffer Buffer
16617a3babSopenharmony_ci{
17617a3babSopenharmony_ci    volatile float f1;
18617a3babSopenharmony_ci    restrict vec2  f2;
19617a3babSopenharmony_ci    readonly vec3  f3;
20617a3babSopenharmony_ci    writeonly vec4 f4;
21617a3babSopenharmony_ci    int i1;
22617a3babSopenharmony_ci    Data data;
23617a3babSopenharmony_ci};
24617a3babSopenharmony_ci
25617a3babSopenharmony_civoid main()
26617a3babSopenharmony_ci{
27617a3babSopenharmony_ci    vec4 texel = imageLoad(i1D, 1);
28617a3babSopenharmony_ci    texel += imageLoad(i2D, ivec2(1));
29617a3babSopenharmony_ci    texel += imageLoad(i2DRect, ivec2(1));
30617a3babSopenharmony_ci    texel += imageLoad(i3D, ivec3(1));
31617a3babSopenharmony_ci    imageStore(iCube, ivec3(1), texel);
32617a3babSopenharmony_ci
33617a3babSopenharmony_ci    texel[i1] = f1;
34617a3babSopenharmony_ci    texel.xy += f2;
35617a3babSopenharmony_ci    texel.xyz -= f3;
36617a3babSopenharmony_ci    texel.w += data.f1 + data.f2[1];
37617a3babSopenharmony_ci    f4 = texel;
38617a3babSopenharmony_ci}