ARB_ubo/referenced-by-shader: pass if shader compiler moves UBOs between shaders
[piglit.git] / tests / spec / arb_shader_storage_buffer_object / execution / ssbo-atomicExchange-int.shader_test
blob6fbaa8178dff2f849a2d498b2353fe020b392058
1 [require]
2 GL >= 3.3
3 GLSL >= 3.30
4 GL_ARB_shader_storage_buffer_object
5 GL_ARB_shader_atomic_counters
6 GL_ARB_shader_atomic_counter_ops
8 [vertex shader passthrough]
10 [fragment shader]
11 #version 330
12 #extension GL_ARB_shader_storage_buffer_object: require
13 #extension GL_ARB_shader_atomic_counters: require
14 #extension GL_ARB_shader_atomic_counter_ops: require
16 layout(binding = 0) buffer bufblock {
17        int value;
20 /* GL_ARB_shader_atomic_counters requires at least 8 total counters. */
21 layout(binding = 0) uniform atomic_uint mask[7];
22 layout(binding = 0) uniform atomic_uint fail;
24 out vec4 color;
26 const uint max_index = uint(mask.length()) * 32u + 31u;
28 void main()
30         uint x = uint(gl_FragCoord.x);
31         uint y = uint(gl_FragCoord.y);
32         uint local_index = y * 32u + x;
34         int new_value = (x < 32u && y < uint(mask.length()))
35                 ? int(4u * local_index) : 0x7fffffff;
37         int f = atomicExchange(value, new_value);
38         uint i = uint(f) / 4u;
39         uint bit = i % 32u;
40         int c = int(i / 32u);
41         uint m = 1u << bit;
43         if (i <= max_index) {
44                 /* If the bit was already set, the test fails. */
45                 uint r = atomicCounterOrARB(mask[c], m);
46                 if ((r & m) != 0u)
47                         atomicCounterIncrement(fail);
49                 if (bit == local_index)
50                         atomicCounterIncrement(fail);
52                 color = vec4(0.0, 1.0, 0.0, 1.0);
53         } else {
54                 color = vec4(0.0, 0.0, 1.0, 1.0);
55         }
58 [test]
59 atomic counters 8
61 ssbo 0 32
62 ssbo 0 subdata int 0 65536
64 clear color 0.5 0.5 0.5 0.5
65 clear
67 draw rect -1 -1 2 2
69 probe atomic counter 0 == 4294967295
70 probe atomic counter 1 == 4294967295
71 probe atomic counter 2 == 4294967295
72 probe atomic counter 3 == 4294967295
73 probe atomic counter 4 == 4294967295
74 probe atomic counter 5 == 4294967295
75 probe atomic counter 6 == 4294967295
76 probe atomic counter 7 == 0