summaryrefslogtreecommitdiff
path: root/tests/spec/arb_shader_atomic_counters
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2016-10-13 12:00:33 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2016-10-18 11:03:12 +0200
commitbeabe5efc37f86a267b37e852fd1cc6aa939ba25 (patch)
treecae45c6afc0121542e1474552824f6294bf728d2 /tests/spec/arb_shader_atomic_counters
parenta55b7602788a2e901a8e74bfdc51f9eed89819bd (diff)
arb_shader_atomic_counters: add test with more complex layout of counters
This hits an error in the GLSL->TGSI conversion.
Diffstat (limited to 'tests/spec/arb_shader_atomic_counters')
-rw-r--r--tests/spec/arb_shader_atomic_counters/execution/fs-layout.shader_test64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/spec/arb_shader_atomic_counters/execution/fs-layout.shader_test b/tests/spec/arb_shader_atomic_counters/execution/fs-layout.shader_test
new file mode 100644
index 000000000..7078195bc
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/execution/fs-layout.shader_test
@@ -0,0 +1,64 @@
+# Test layouts of atomic counters in a fragment shader.
+
+[require]
+GLSL >= 1.40
+GL_ARB_shader_atomic_counters
+INT GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS >= 2
+
+[vertex shader passthrough]
+
+[fragment shader]
+#version 140
+#extension GL_ARB_shader_atomic_counters: require
+
+layout(binding = 0, offset = 0) uniform atomic_uint a0;
+layout(binding = 1, offset = 0) uniform atomic_uint b0;
+layout(binding = 1, offset = 4) uniform atomic_uint b1[2];
+
+uniform uint a0_expected;
+uniform uint b0_expected;
+uniform uint b1_expected;
+uniform uint idx;
+
+out vec4 color;
+
+void main()
+{
+ uint old_a0 = atomicCounterIncrement(a0);
+ uint old_b0 = atomicCounterIncrement(b0);
+ uint old_b1 = atomicCounterIncrement(b1[idx]);
+
+ if (old_a0 != a0_expected) {
+ color = vec4(1.0, 0.0, float(old_a0) / 255.0, 1.0);
+ return;
+ }
+ if (old_b0 != b0_expected) {
+ color = vec4(1.0, 0.1, float(old_b0) / 255.0, 1.0);
+ return;
+ }
+ if (old_b1 != b1_expected) {
+ color = vec4(1.0, 0.2, float(old_b1) / 255.0, 1.0);
+ return;
+ }
+ color = vec4(0.0, 1.0, 0.0, 1.0);
+}
+
+[test]
+atomic counter buffer 0 1
+atomic counter buffer 1 3
+
+clear color 0.0 0.0 0.0 0.0
+clear
+
+atomic counter 0 0 17
+atomic counter 1 0 31
+atomic counter 1 1 4
+atomic counter 1 2 9
+
+uniform uint a0_expected 17
+uniform uint b0_expected 31
+uniform uint idx 1
+uniform uint b1_expected 9
+
+draw rect ortho 0 0 1 1
+probe rgba 0 0 0.0 1.0 0.0 1.0