ARB_ubo/referenced-by-shader: pass if shader compiler moves UBOs between shaders
[piglit.git] / tests / spec / arb_shader_storage_buffer_object / execution / ssbo-atomicAdd-int.shader_test
blobbe4f7a0d0eab973462e2bec03ffdc8c99d9c6fb4
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 #extension GL_ARB_shader_storage_buffer_object: require
12 #extension GL_ARB_shader_atomic_counters: require
13 #extension GL_ARB_shader_atomic_counter_ops: require
15 layout(binding = 0) buffer bufblock {
16         int value;
19 /* GL_ARB_shader_atomic_counters requires at least 8 total counters. */
20 layout(binding = 0) uniform atomic_uint mask[7];
21 layout(binding = 0) uniform atomic_uint fail;
23 out vec4 color;
25 void main()
27         /* Each of 32 * N fragments should see a unique value.  Each value
28          * observed is tracked in "mask."  The test automatically fails if a
29          * duplicate value is observed.  After the shaders are done running,
30          * the mask values will be probed to ensure that all possible values
31          * were observed.
32          */
33         int f = atomicAdd(value, 4);
34         uint i = uint(f) / 4u;
35         uint bit = i % 32u;
36         int c = int(i / 32u);
37         uint m = 1u << bit;
39         if (c < mask.length()) {
40                 /* If the bit was already set, the test fails. */
41                 if ((atomicCounterOrARB(mask[c], m) & m) != 0u)
42                         atomicCounterIncrement(fail);
44                 color = vec4(0.0, 1.0, 0.0, 1.0);
45         } else {
46                 color = vec4(0.0, 0.0, 1.0, 1.0);
47         }
50 [test]
51 atomic counters 8
53 ssbo 0 32
54 ssbo 0 subdata float 0 0.0
56 clear color 0.5 0.5 0.5 0.5
57 clear
59 draw rect -1 -1 2 2
61 probe atomic counter 0 == 4294967295
62 probe atomic counter 1 == 4294967295
63 probe atomic counter 2 == 4294967295
64 probe atomic counter 3 == 4294967295
65 probe atomic counter 4 == 4294967295
66 probe atomic counter 5 == 4294967295
67 probe atomic counter 6 == 4294967295
68 probe atomic counter 7 == 0