<div dir="ltr"><div>Looks correct -- exercises reads and writes, and only works if std430's tighter packing works.<br><br></div>Reviewed-by: Chris Forbes <<a href="mailto:chrisf@ijw.co.nz">chrisf@ijw.co.nz</a>><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 30, 2015 at 1:10 PM, Jordan Justen <span dir="ltr"><<a href="mailto:jordan.l.justen@intel.com" target="_blank">jordan.l.justen@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Signed-off-by: Jordan Justen <<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>><br>
---<br>
 .../execution/basic-ssbo.shader_test               | 74 ++++++++++++++++++++++<br>
 1 file changed, 74 insertions(+)<br>
 create mode 100644 tests/spec/arb_compute_shader/execution/basic-ssbo.shader_test<br>
<br>
diff --git a/tests/spec/arb_compute_shader/execution/basic-ssbo.shader_test b/tests/spec/arb_compute_shader/execution/basic-ssbo.shader_test<br>
new file mode 100644<br>
index 0000000..4bf7e1c<br>
--- /dev/null<br>
+++ b/tests/spec/arb_compute_shader/execution/basic-ssbo.shader_test<br>
@@ -0,0 +1,74 @@<br>
+[require]<br>
+GLSL >= 3.30<br>
+GL_ARB_compute_shader<br>
+GL_ARB_shader_storage_buffer_object<br>
+GL_ARB_shader_atomic_counters<br>
+<br>
+[compute shader]<br>
+#version 330<br>
+#extension GL_ARB_compute_shader: enable<br>
+#extension GL_ARB_shader_storage_buffer_object: require<br>
+#extension GL_ARB_shader_atomic_counters: require<br>
+<br>
+#define SIZE 256u<br>
+<br>
+layout(local_size_x = SIZE) in;<br>
+<br>
+layout(binding = 0) uniform atomic_uint counter;<br>
+<br>
+layout(std430)<br>
+buffer SSBO {<br>
+       uint    u[SIZE];<br>
+};<br>
+<br>
+uniform uint mode;<br>
+<br>
+void main()<br>
+{<br>
+       uint index = gl_LocalInvocationIndex;<br>
+<br>
+       switch (mode) {<br>
+       case 0u:<br>
+               u[index] = SIZE;<br>
+               break;<br>
+       case 1u:<br>
+               u[index] = index;<br>
+               break;<br>
+       case 2u:<br>
+               if (u[index] == SIZE)<br>
+                       atomicCounterIncrement(counter);<br>
+               break;<br>
+       case 3u:<br>
+               if (u[index] == index)<br>
+                       atomicCounterIncrement(counter);<br>
+               break;<br>
+       }<br>
+}<br>
+<br>
+[test]<br>
+atomic counters 1<br>
+ssbo 1024<br>
+<br>
+uniform uint mode 0<br>
+compute 1 1 1<br>
+probe atomic counter 0 == 0<br>
+<br>
+uniform uint mode 3<br>
+compute 1 1 1<br>
+probe atomic counter 0 == 0<br>
+<br>
+uniform uint mode 2<br>
+compute 1 1 1<br>
+probe atomic counter 0 == 256<br>
+<br>
+uniform uint mode 1<br>
+compute 1 1 1<br>
+probe atomic counter 0 == 256<br>
+<br>
+uniform uint mode 2<br>
+compute 1 1 1<br>
+probe atomic counter 0 == 256<br>
+<br>
+uniform uint mode 3<br>
+compute 1 1 1<br>
+probe atomic counter 0 == 512<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.5.1<br>
<br>
_______________________________________________<br>
Piglit mailing list<br>
<a href="mailto:Piglit@lists.freedesktop.org">Piglit@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/piglit" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/piglit</a><br>
</font></span></blockquote></div><br></div>