#version 450 layout(binding = 0, r32f) uniform coherent image1D i1D; layout(binding = 1, r32f) uniform volatile image2D i2D; layout(binding = 2, r32f) uniform restrict image2DRect i2DRect; layout(binding = 3, r32f) uniform readonly image3D i3D; layout(binding = 3, r32f) uniform writeonly imageCube iCube; struct Data { float f1; vec2 f2; }; coherent buffer Buffer { volatile float f1; restrict vec2 f2; readonly vec3 f3; writeonly vec4 f4; int i1; Data data; }; void main() { vec4 texel = imageLoad(i1D, 1); texel += imageLoad(i2D, ivec2(1)); texel += imageLoad(i2DRect, ivec2(1)); texel += imageLoad(i3D, ivec3(1)); imageStore(iCube, ivec3(1), texel); texel[i1] = f1; texel.xy += f2; texel.xyz -= f3; texel.w += data.f1 + data.f2[1]; f4 = texel; }