diff options
author | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2016-10-13 12:00:33 +0200 |
---|---|---|
committer | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2016-10-18 11:03:12 +0200 |
commit | beabe5efc37f86a267b37e852fd1cc6aa939ba25 (patch) | |
tree | cae45c6afc0121542e1474552824f6294bf728d2 /tests/spec/arb_shader_atomic_counters | |
parent | a55b7602788a2e901a8e74bfdc51f9eed89819bd (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_test | 64 |
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 |