On 30.03.2017 14:07, Ilia Mirkin wrote:
Time could roll over... not sure what to do about that though. Maybe
check if the top 2 bits are set in the old value and are unset in the
new value, and hope that the counter precision > 2 bits? [It'd be
unfortunate for CIs to get occasional failures in these tests...]

Shouldn't roll-over be covered by the cast to int followed by comparison with 0?

Cheers,
Nicolai


On Thu, Mar 30, 2017 at 3:23 AM, Nicolai Hähnle <[email protected]> wrote:
From: Nicolai Hähnle <[email protected]>

---
 .../arb_shader_clock/execution/clock.shader_test   | 54 +++++++++++++++++++
 .../execution/clock2x32.shader_test                | 63 ++++++++++++++++++++++
 2 files changed, 117 insertions(+)
 create mode 100644 tests/spec/arb_shader_clock/execution/clock.shader_test
 create mode 100644 tests/spec/arb_shader_clock/execution/clock2x32.shader_test

diff --git a/tests/spec/arb_shader_clock/execution/clock.shader_test 
b/tests/spec/arb_shader_clock/execution/clock.shader_test
new file mode 100644
index 0000000..07530e6
--- /dev/null
+++ b/tests/spec/arb_shader_clock/execution/clock.shader_test
@@ -0,0 +1,54 @@
+[require]
+GL >= 4.3
+GLSL >= 4.30
+GL_ARB_gpu_shader_int64
+GL_ARB_shader_clock
+
+[compute shader]
+#version 430
+#extension GL_ARB_gpu_shader_int64: require
+#extension GL_ARB_shader_clock: require
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) uniform atomic_uint good;
+layout(binding = 1) uniform atomic_uint bad;
+
+layout(std430, binding = 0) buffer ssbo_data {
+       uint64_t ssbo_time[];
+};
+
+uniform uint phase;
+
+void main() {
+       uint64_t start_time = clockARB();
+
+       if (phase == 0u) {
+               ssbo_time[gl_WorkGroupID.x] = start_time;
+       } else {
+               int64_t diff = int64_t(start_time - 
ssbo_time[gl_WorkGroupID.x]);
+               if (diff > 0l)
+                       atomicCounterIncrement(good);
+       }
+
+       uint64_t late_time = clockARB();
+       int64_t diff = int64_t(late_time - start_time);
+
+       if (diff <= 0l)
+               atomicCounterIncrement(bad);
+}
+
+[test]
+atomic counters 2
+ssbo 0 64
+
+uniform uint phase 0
+compute 8 1 1
+
+memory barrier GL_SHADER_STORAGE_BARRIER_BIT
+
+uniform uint phase 1
+compute 8 1 1
+
+probe atomic counter 0 == 8
+probe atomic counter 1 == 0
diff --git a/tests/spec/arb_shader_clock/execution/clock2x32.shader_test 
b/tests/spec/arb_shader_clock/execution/clock2x32.shader_test
new file mode 100644
index 0000000..1a2bfef
--- /dev/null
+++ b/tests/spec/arb_shader_clock/execution/clock2x32.shader_test
@@ -0,0 +1,63 @@
+[require]
+GL >= 4.3
+GLSL >= 4.30
+GL_ARB_shader_clock
+
+[compute shader]
+#version 430
+#extension GL_ARB_shader_clock: require
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) uniform atomic_uint good;
+layout(binding = 1) uniform atomic_uint bad;
+
+layout(std430, binding = 0) buffer ssbo_data {
+       uvec2 ssbo_time[];
+};
+
+uniform uint phase;
+
+bool is_time_ordered(uvec2 a, uvec2 b) {
+       int diff = int(b.y - a.y);
+       if (diff > 0)
+               return true;
+       if (diff < 0)
+               return false;
+
+       diff = int(b.x - a.x);
+       if (diff > 0)
+               return true;
+       return false;
+}
+
+void main() {
+       uvec2 start_time = clock2x32ARB();
+
+       if (phase == 0u) {
+               ssbo_time[gl_WorkGroupID.x] = start_time;
+       } else {
+               if (is_time_ordered(ssbo_time[gl_WorkGroupID.x], start_time))
+                       atomicCounterIncrement(good);
+       }
+
+       uvec2 late_time = clock2x32ARB();
+
+       if (!is_time_ordered(start_time, late_time))
+               atomicCounterIncrement(bad);
+}
+
+[test]
+atomic counters 2
+ssbo 0 64
+
+uniform uint phase 0
+compute 8 1 1
+
+memory barrier GL_SHADER_STORAGE_BARRIER_BIT
+
+uniform uint phase 1
+compute 8 1 1
+
+probe atomic counter 0 == 8
+probe atomic counter 1 == 0
--
2.9.3

_______________________________________________
Piglit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/piglit


--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
Piglit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to