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}