ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / glsl-4.50 / execution / ssbo-atomicCompSwap-int.shader_test
blob25bc42a6c97bac19ce0fa044bd6980c18e170a0a
1 [require]
2 GL >= 4.5
3 GLSL >= 4.50
4 GL_ARB_shader_atomic_counter_ops
6 [vertex shader passthrough]
8 [fragment shader]
9 #extension GL_ARB_shader_atomic_counter_ops: require
11 layout(binding = 0) buffer bufblock {
12         int value;
15 /* GL_ARB_shader_atomic_counters requires at least 8 total counters. */
16 layout(binding = 0) uniform atomic_uint mask[7];
17 layout(binding = 0) uniform atomic_uint fail;
19 out vec4 color;
21 void main()
23         /* According to issue #22 of the GL_ARB_shader_image_load_store, the
24          * return result of atomic operations in helper invocations is
25          * undefined.  To avoid a possible infinite loop (below) in a helper
26          * invocation, bail out now.
27          */
28         if (gl_HelperInvocation)
29                 return;
31         /* Each of 32 * N fragments should see a unique value.  Each value
32          * observed is tracked in "mask."  The test automatically fails if a
33          * duplicate value is observed.  After the shaders are done running,
34          * the mask values will be probed to ensure that all possible values
35          * were observed.
36          */
37         int f;
39         /* This is an open-coded atomicAdd. */
40         do {
41                 f = value;
42         } while (f != atomicCompSwap(value, f, f + 4));
44         uint i = uint(f) / 4u;
45         uint bit = i % 32u;
46         int c = int(i / 32u);
47         uint m = 1u << bit;
49         if (c < mask.length()) {
50                 /* If the bit was already set, the test fails. */
51                 if ((atomicCounterOrARB(mask[c], m) & m) != 0u)
52                         atomicCounterIncrement(fail);
54                 color = vec4(0.0, 1.0, 0.0, 1.0);
55         } else {
56                 color = vec4(0.0, 0.0, 1.0, 1.0);
57         }
60 [test]
61 atomic counters 8
63 ssbo 0 32
64 ssbo 0 subdata float 0 0.0
66 clear color 0.5 0.5 0.5 0.5
67 clear
69 draw rect -1 -1 2 2
71 probe atomic counter 0 == 4294967295
72 probe atomic counter 1 == 4294967295
73 probe atomic counter 2 == 4294967295
74 probe atomic counter 3 == 4294967295
75 probe atomic counter 4 == 4294967295
76 probe atomic counter 5 == 4294967295
77 probe atomic counter 6 == 4294967295
78 probe atomic counter 7 == 0