1#version 450 2#extension GL_ARB_fragment_shader_interlock : require 3 4layout(pixel_interlock_ordered) in; 5 6layout(binding = 0, rgba8) uniform writeonly image2D img; 7layout(binding = 1, r32ui) uniform uimage2D img2; 8layout(binding = 2, rgba8) uniform readonly image2D img3; 9layout(binding = 3) coherent buffer Buffer 10{ 11 int foo; 12 uint bar; 13}; 14layout(binding = 4) buffer Buffer2 15{ 16 uint quux; 17}; 18 19layout(binding = 5, rgba8) uniform writeonly image2D img4; 20layout(binding = 6) buffer Buffer3 21{ 22 int baz; 23}; 24 25void main() 26{ 27 // Deliberately outside the critical section to test usage tracking. 28 baz = 0; 29 imageStore(img4, ivec2(1, 1), vec4(1.0, 0.0, 0.0, 1.0)); 30 beginInvocationInterlockARB(); 31 imageStore(img, ivec2(0, 0), imageLoad(img3, ivec2(0, 0))); 32 imageAtomicAdd(img2, ivec2(0, 0), 1u); 33 foo += 42; 34 atomicAnd(bar, quux); 35 endInvocationInterlockARB(); 36} 37