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}