1 # Reproducer for issue 3712
2 # https://gitlab.freedesktop.org/mesa/mesa/-/issues/3712
6 GL_ARB_shader_storage_buffer_object
10 #extension GL_ARB_compute_shader: require
11 #extension GL_ARB_shader_storage_buffer_object: require
14 layout(local_size_x = 1) in;
15 layout(binding = 0) writeonly buffer Result {
19 layout(binding = 1) writeonly buffer Noop {
23 ivec4 choose(ivec4 a, ivec4 b) {
25 if (b.x == b.y) { // True in trivial case
27 } else if (a.x > a.y) { // Never true
33 ivec4 transform(uint ref) {
34 return ivec4(ref, float(ref)+1.0, float(ref)+2.0, float(ref)+3.0);
37 shared ivec4 sh_value;
40 ivec4 value = ivec4(0, 0, 0, 0);
41 uint loop_breaker = 0u;
44 if (gl_LocalInvocationID.x == 0u) {
46 ivec4 ix = transform(i);
49 value = choose(ix, value);
50 if (loop_breaker == 0u) {
56 ivec4 a_0 = transform(gl_GlobalInvocationID.x);
57 ivec4 a_1 = choose(value, a_0);
59 noop[gl_GlobalInvocationID.x] = a_1;
64 result[gl_GlobalInvocationID.x] = value;
73 probe ssbo int 0 0 == 0
74 probe ssbo int 0 4 == 1
75 probe ssbo int 0 8 == 2
76 probe ssbo int 0 12 == 3
77 probe ssbo int 0 16 == 0
78 probe ssbo int 0 20 == 1
79 probe ssbo int 0 24 == 2
80 probe ssbo int 0 28 == 3