summaryrefslogtreecommitdiff
path: root/tests/spec
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2014-09-25 13:24:34 -0700
committerJordan Justen <jordan.l.justen@intel.com>2015-09-15 15:26:36 -0700
commit86b64a8a9e8c2051b139540585e6698f303381c9 (patch)
tree6b6541348d45a52fb7f94f098852b6f4d182edad /tests/spec
parentabc2517bec44e810dddabc34fe4e5fa79115589e (diff)
arb_compute_shader: Test values of gl_GlobalInvocationID
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Diffstat (limited to 'tests/spec')
-rw-r--r--tests/spec/arb_compute_shader/execution/basic-global-id.shader_test61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/spec/arb_compute_shader/execution/basic-global-id.shader_test b/tests/spec/arb_compute_shader/execution/basic-global-id.shader_test
new file mode 100644
index 000000000..98a10dd04
--- /dev/null
+++ b/tests/spec/arb_compute_shader/execution/basic-global-id.shader_test
@@ -0,0 +1,61 @@
+# Simple test that verifies gl_GlobalInvocationID values are
+# functioning. Atomic counters are used as outputs.
+
+[require]
+GL >= 3.3
+GLSL >= 3.30
+GL_ARB_compute_shader
+GL_ARB_shader_atomic_counters
+
+[compute shader]
+#version 330
+#extension GL_ARB_compute_shader: enable
+#extension GL_ARB_shader_atomic_counters: require
+
+layout(binding = 0) uniform atomic_uint a0;
+layout(binding = 0) uniform atomic_uint a1;
+layout(binding = 0) uniform atomic_uint a2;
+layout(binding = 0) uniform atomic_uint a3;
+layout(binding = 0) uniform atomic_uint a4;
+layout(binding = 0) uniform atomic_uint a5;
+layout(binding = 0) uniform atomic_uint a6;
+layout(binding = 0) uniform atomic_uint a7;
+
+layout(local_size_x = 4, local_size_y = 2, local_size_z = 4) in;
+
+void main()
+{
+ uint x = gl_GlobalInvocationID.x;
+ uint y = gl_GlobalInvocationID.y;
+ uint z = gl_GlobalInvocationID.z;
+
+ if (((x & y) & z) == 0u)
+ atomicCounterIncrement(a0);
+ if (((x | y) | z) == 7u)
+ atomicCounterIncrement(a1);
+ if (x == y && y == z)
+ atomicCounterIncrement(a2);
+ if (x != y && y != z && x != z)
+ atomicCounterIncrement(a3);
+ if (((x & y) & z) == 2u)
+ atomicCounterIncrement(a4);
+ if (((x | y) | z) == 5u)
+ atomicCounterIncrement(a5);
+ if (x < 4u && y < 4u && z < 4u)
+ atomicCounterIncrement(a6);
+ if (x >= 4u || y >= 4u || z >= 4u)
+ atomicCounterIncrement(a7);
+}
+
+[test]
+atomic counters 8
+
+compute 2 4 2
+probe atomic counter 0 == 343
+probe atomic counter 1 == 343
+probe atomic counter 2 == 8
+probe atomic counter 3 == 336
+probe atomic counter 4 == 49
+probe atomic counter 5 == 49
+probe atomic counter 6 == 64
+probe atomic counter 7 == 448