[Piglit] [PATCH 13/13] arb_shader_atomic_counters: Test the atomicity of atomic built-in functions.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 tests/spec/arb_shader_atomic_counters/unique-id.c  | 219 +
 3 files changed, 221 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/unique-id.c

diff --git a/tests/all.tests b/tests/all.tests
index 1c5dc9c..b928e91 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3180,6 +3180,7 @@ arb_shader_atomic_counters['max-counters'] = 
concurrent_test('arb_shader_atomic_
 arb_shader_atomic_counters['minmax'] = 
concurrent_test('arb_shader_atomic_counters-minmax')
 arb_shader_atomic_counters['multiple-defs'] = 
concurrent_test('arb_shader_atomic_counters-multiple-defs')
 arb_shader_atomic_counters['semantics'] = 
concurrent_test('arb_shader_atomic_counters-semantics')
+arb_shader_atomic_counters['unique-id'] = 
concurrent_test('arb_shader_atomic_counters-unique-id')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index 8eb3692..25b56ba 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -20,5 +20,6 @@ add_executable (arb_shader_atomic_counters-max-counters 
max-counters.c common.c)
 add_executable (arb_shader_atomic_counters-minmax minmax.c common.c)
 add_executable (arb_shader_atomic_counters-multiple-defs multiple-defs.c 
common.c)
 add_executable (arb_shader_atomic_counters-semantics semantics.c common.c)
+add_executable (arb_shader_atomic_counters-unique-id unique-id.c common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/unique-id.c 
b/tests/spec/arb_shader_atomic_counters/unique-id.c
new file mode 100644
index 000..2858ad3
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/unique-id.c
@@ -0,0 +1,219 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file unique-id.c
+ *
+ * Tests that concurrent execution of atomic operations on the same
+ * counter yield unique values for each vertex or fragment shader
+ * thread.
+ */
+
+#include "common.h"
+
+#define L 256
+#define N (L * L)
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+check(int dx, int dy, uint32_t start_value, uint32_t end_value)
+{
+const uint32_t base = MIN2(start_value, end_value);
+const uint32_t size = MAX2(start_value, end_value) - base;
+uint32_t pixels[L][L];
+uint32_t *frequency = malloc(size * sizeof(uint32_t));
+int x, y;
+
+memset(frequency, 0, size * sizeof(uint32_t));
+glReadPixels(0, 0, L, L, GL_RED_INTEGER, GL_UNSIGNED_INT, pixels);
+
+for (y = 0; y < L; y += dy) {
+for (x = 0; x < L; x += dx) {
+uint32_t v = pixels[y][x] - base;
+
+if (v >= size) {
+printf("Probe value at (%d, %d)\n", x, y);
+printf("  Observed: 0x%08x\n", v);
+printf("  Value outside expected window.\n");
+return false;
+}
+
+if (size > 1 && frequency[v]++) {
+printf("Probe value at (%d, %d)\n", x, y);
+printf("  Observed: 0x%08x\n", v);
+printf("  Value not unique.\n");
+return false;
+}
+}
+}
+
+free(f

[Piglit] [PATCH 11/13] arb_shader_atomic_counters: Test linkage of atomic counters with conflicting locations.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 .../arb_shader_atomic_counters/multiple-defs.c | 213 +
 3 files changed, 215 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/multiple-defs.c

diff --git a/tests/all.tests b/tests/all.tests
index 4f4fccc..4b416ae 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3178,6 +3178,7 @@ arb_shader_atomic_counters['fragment-discard'] = 
concurrent_test('arb_shader_ato
 arb_shader_atomic_counters['function-argument'] = 
concurrent_test('arb_shader_atomic_counters-function-argument')
 arb_shader_atomic_counters['max-counters'] = 
concurrent_test('arb_shader_atomic_counters-max-counters')
 arb_shader_atomic_counters['minmax'] = 
concurrent_test('arb_shader_atomic_counters-minmax')
+arb_shader_atomic_counters['multiple-defs'] = 
concurrent_test('arb_shader_atomic_counters-multiple-defs')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index 79f4975..5c90092 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -18,5 +18,6 @@ add_executable (arb_shader_atomic_counters-fragment-discard 
fragment-discard.c c
 add_executable (arb_shader_atomic_counters-function-argument 
function-argument.c common.c)
 add_executable (arb_shader_atomic_counters-max-counters max-counters.c 
common.c)
 add_executable (arb_shader_atomic_counters-minmax minmax.c common.c)
+add_executable (arb_shader_atomic_counters-multiple-defs multiple-defs.c 
common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/multiple-defs.c 
b/tests/spec/arb_shader_atomic_counters/multiple-defs.c
new file mode 100644
index 000..3f768f9
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/multiple-defs.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file multiple-defs.c
+ *
+ * Checks that atomic counters with the same name may be linked
+ * together if and only if their layout specifications are equivalent.
+ */
+
+#include "common.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+const char *frag_src = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"flat in ivec4 vcolor;\n"
+"out ivec4 fcolor;\n"
+"\n"
+"layout(binding=3, offset=4) uniform atomic_uint x0;\n"
+"layout(binding=2, offset=0) uniform atomic_uint x1;\n"
+"layout(binding=2) uniform atomic_uint x2;\n"
+"\n"
+"void main() {\n"
+"   fcolor.x = vcolor.x + int(atomicCounter(x0) +\n"
+"  atomicCounter(x1) + atomicCounter(x2));\n"
+"}\n";
+
+const char *vert_src_ok = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"in vec4 position;\n"
+"flat out ivec4 vcolor;\n"
+"\n"
+"layout(binding=2) uniform atomic_uint x1;\n"
+"layout(binding=2, offset=4) uniform atomic_uint x2;\n"
+"layout(binding=3, offset=4) uniform atomic_uint x0;\n"
+"\n"
+"void main() {\n"
+"   vcolor.x = int(atomicCounter(x0) + atomicCounter(x1)\n"
+"  + atomicCounter(x2));\n"
+"   gl_Position = position;\n"
+"}\n";
+
+/* This should fail because 'x1' is redefined with a conflicting
+ * binding specification. */
+const cha

[Piglit] [PATCH 12/13] arb_shader_atomic_counters: Test that atomic built-ins execute the expected operations on memory.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 tests/spec/arb_shader_atomic_counters/semantics.c  | 383 +
 3 files changed, 385 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/semantics.c

diff --git a/tests/all.tests b/tests/all.tests
index 4b416ae..1c5dc9c 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3179,6 +3179,7 @@ arb_shader_atomic_counters['function-argument'] = 
concurrent_test('arb_shader_at
 arb_shader_atomic_counters['max-counters'] = 
concurrent_test('arb_shader_atomic_counters-max-counters')
 arb_shader_atomic_counters['minmax'] = 
concurrent_test('arb_shader_atomic_counters-minmax')
 arb_shader_atomic_counters['multiple-defs'] = 
concurrent_test('arb_shader_atomic_counters-multiple-defs')
+arb_shader_atomic_counters['semantics'] = 
concurrent_test('arb_shader_atomic_counters-semantics')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index 5c90092..8eb3692 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -19,5 +19,6 @@ add_executable (arb_shader_atomic_counters-function-argument 
function-argument.c
 add_executable (arb_shader_atomic_counters-max-counters max-counters.c 
common.c)
 add_executable (arb_shader_atomic_counters-minmax minmax.c common.c)
 add_executable (arb_shader_atomic_counters-multiple-defs multiple-defs.c 
common.c)
+add_executable (arb_shader_atomic_counters-semantics semantics.c common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/semantics.c 
b/tests/spec/arb_shader_atomic_counters/semantics.c
new file mode 100644
index 000..9807065
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/semantics.c
@@ -0,0 +1,383 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file semantics.c
+ *
+ * Tests that the atomic built-in functions have the expected effects
+ * on memory and return the expected results.
+ */
+
+#include "common.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+run_test_vertex(void)
+{
+const char *fs_source = "#version 140\n"
+"flat in ivec4 vcolor;\n"
+"out ivec4 fcolor;\n"
+"void main() {\n"
+"   fcolor = vcolor;\n"
+"}\n";
+const char *vs_source = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"layout(binding = 0, offset = 0) uniform atomic_uint x;\n"
+"in vec4 piglit_vertex;\n"
+"flat out ivec4 vcolor;\n"
+"\n"
+"void main() {\n"
+"   vcolor.x = int(atomicCounterDecrement(x));\n"
+"   vcolor.y = int(atomicCounterIncrement(x));\n"
+"   vcolor.z = int(atomicCounterIncrement(x));\n"
+"   vcolor.w = int(atomicCounter(x));\n"
+"   gl_Position = piglit_vertex;\n"
+"}\n";
+const uint32_t start_buffer[] = { 0x };
+const uint32_t expected_buffer[] = { 0x0 };
+const uint32_t expected_color[] = { 0xfffe, 0xfffe,
+0x, 0x0 };
+GLuint prog = glCreateProgram();
+bool ret =
+atomic_counters_compile(prog, GL_FRAGMENT_SHADER, fs_source)

[Piglit] [PATCH 07/13] arb_shader_atomic_counters: Test that atomic ops aren't executed for discarded fragments.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 .../arb_shader_atomic_counters/fragment-discard.c  | 113 +
 3 files changed, 115 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/fragment-discard.c

diff --git a/tests/all.tests b/tests/all.tests
index 91d4e6f..4aba933 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3174,6 +3174,7 @@ arb_shader_atomic_counters['active-counters'] = 
concurrent_test('arb_shader_atom
 arb_shader_atomic_counters['array-indexing'] = 
concurrent_test('arb_shader_atomic_counters-array-indexing')
 arb_shader_atomic_counters['buffer-binding'] = 
concurrent_test('arb_shader_atomic_counters-buffer-binding')
 arb_shader_atomic_counters['default-partition'] = 
concurrent_test('arb_shader_atomic_counters-default-partition')
+arb_shader_atomic_counters['fragment-discard'] = 
concurrent_test('arb_shader_atomic_counters-fragment-discard')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index f9479de..5526fbf 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -14,5 +14,6 @@ add_executable (arb_shader_atomic_counters-active-counters 
active-counters.c com
 add_executable (arb_shader_atomic_counters-array-indexing array-indexing.c 
common.c)
 add_executable (arb_shader_atomic_counters-buffer-binding buffer-binding.c 
common.c)
 add_executable (arb_shader_atomic_counters-default-partition 
default-partition.c common.c)
+add_executable (arb_shader_atomic_counters-fragment-discard fragment-discard.c 
common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/fragment-discard.c 
b/tests/spec/arb_shader_atomic_counters/fragment-discard.c
new file mode 100644
index 000..e3b75cd
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/fragment-discard.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file fragment-discard.c
+ *
+ * Check that atomic counter operations from discarded fragments have
+ * no effect.
+ */
+
+#include "common.h"
+
+#define L 256
+#define N (L * L)
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+run_test(void)
+{
+const char *fs_source = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"layout(binding = 0, offset = 0) uniform atomic_uint x;\n"
+"layout(binding = 0, offset = 4) uniform atomic_uint y;\n"
+"out ivec4 fcolor;\n"
+"\n"
+"void main() {\n"
+"   if ((atomicCounterIncrement(x) & 0x3u) == 0u)\n"
+"   discard;\n"
+"\n"
+"   fcolor.x = int(atomicCounterIncrement(y));\n"
+"}\n";
+const char *vs_source = "#version 140\n"
+"in vec4 piglit_vertex;\n"
+"\n"
+"void main() {\n"
+"   gl_Position = piglit_vertex;\n"
+"}\n";
+const uint32_t start_value[] = { 0, 0 };
+const uint32_t expected_value[] = { N, N * 3/4 };
+GLuint prog = glCreateProgram();
+bool ret = atomic_counters_compile(prog, GL_FRAGMENT_SHADER, 
fs_source) &&
+atomic_counters_compile(prog, GL_VERTEX_SHADER, vs_source) &&
+atomic_counters_draw_rect(prog, 2, start_val

[Piglit] [PATCH 10/13] arb_shader_atomic_counters: Test the minimum maximum limits defined by the spec.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|  1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |  1 +
 tests/spec/arb_shader_atomic_counters/minmax.c | 71 ++
 3 files changed, 73 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/minmax.c

diff --git a/tests/all.tests b/tests/all.tests
index 7b264ff..4f4fccc 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3177,6 +3177,7 @@ arb_shader_atomic_counters['default-partition'] = 
concurrent_test('arb_shader_at
 arb_shader_atomic_counters['fragment-discard'] = 
concurrent_test('arb_shader_atomic_counters-fragment-discard')
 arb_shader_atomic_counters['function-argument'] = 
concurrent_test('arb_shader_atomic_counters-function-argument')
 arb_shader_atomic_counters['max-counters'] = 
concurrent_test('arb_shader_atomic_counters-max-counters')
+arb_shader_atomic_counters['minmax'] = 
concurrent_test('arb_shader_atomic_counters-minmax')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index b473b3b..79f4975 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -17,5 +17,6 @@ add_executable (arb_shader_atomic_counters-default-partition 
default-partition.c
 add_executable (arb_shader_atomic_counters-fragment-discard fragment-discard.c 
common.c)
 add_executable (arb_shader_atomic_counters-function-argument 
function-argument.c common.c)
 add_executable (arb_shader_atomic_counters-max-counters max-counters.c 
common.c)
+add_executable (arb_shader_atomic_counters-minmax minmax.c common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/minmax.c 
b/tests/spec/arb_shader_atomic_counters/minmax.c
new file mode 100644
index 000..b847847
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/minmax.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file minmax.c
+ *
+ * Test for the minimum maximum values described in the
+ * ARB_shader_atomic_counters spec.
+ */
+
+#include "common.h"
+#include "minmax-test.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+piglit_require_gl_version(31);
+piglit_require_extension("GL_ARB_shader_atomic_counters");
+
+piglit_print_minmax_header();
+
+piglit_test_min_int(GL_MAX_FRAGMENT_ATOMIC_COUNTERS, 8);
+piglit_test_min_int(GL_MAX_COMBINED_ATOMIC_COUNTERS, 8);
+
+piglit_test_min_int(GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, 1);
+piglit_test_min_int(GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, 1);
+piglit_test_min_int(GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, 32);
+
+piglit_test_min_int(GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, 1);
+
+if (!piglit_check_gl_error(GL_NO_ERROR))
+piglit_report_result(PIGLIT_FAIL);
+
+piglit_report_result(piglit_minmax_pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
-- 
1.8.3.4

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH 09/13] arb_shader_atomic_counters: Test the maximum number of supported counters, buffers and bindings.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 .../spec/arb_shader_atomic_counters/max-counters.c | 434 +
 3 files changed, 436 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/max-counters.c

diff --git a/tests/all.tests b/tests/all.tests
index 88656e5..7b264ff 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3176,6 +3176,7 @@ arb_shader_atomic_counters['buffer-binding'] = 
concurrent_test('arb_shader_atomi
 arb_shader_atomic_counters['default-partition'] = 
concurrent_test('arb_shader_atomic_counters-default-partition')
 arb_shader_atomic_counters['fragment-discard'] = 
concurrent_test('arb_shader_atomic_counters-fragment-discard')
 arb_shader_atomic_counters['function-argument'] = 
concurrent_test('arb_shader_atomic_counters-function-argument')
+arb_shader_atomic_counters['max-counters'] = 
concurrent_test('arb_shader_atomic_counters-max-counters')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index f7c2c26..b473b3b 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -16,5 +16,6 @@ add_executable (arb_shader_atomic_counters-buffer-binding 
buffer-binding.c commo
 add_executable (arb_shader_atomic_counters-default-partition 
default-partition.c common.c)
 add_executable (arb_shader_atomic_counters-fragment-discard fragment-discard.c 
common.c)
 add_executable (arb_shader_atomic_counters-function-argument 
function-argument.c common.c)
+add_executable (arb_shader_atomic_counters-max-counters max-counters.c 
common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/max-counters.c 
b/tests/spec/arb_shader_atomic_counters/max-counters.c
new file mode 100644
index 000..91157f6
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/max-counters.c
@@ -0,0 +1,434 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file max-counters.c
+ *
+ * Test that using more than the maximum number of suported atomic
+ * counters, buffers or bindings fails with a linking error.
+ */
+
+#include "common.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+run_test_vertex_max_counters(unsigned num_counters)
+{
+/* Generate a shader with 'num_counters' counters. */
+char *vs_source = atomic_counters_generate_source(
+"#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"%s\n"
+"\n"
+"in vec4 position;\n"
+"flat out ivec4 vcolor;\n"
+"\n"
+"void main() {\n"
+"   uint y = 0u;\n"
+"   %s\n"
+"   vcolor.x = int(y);\n"
+"   gl_Position = position;\n"
+"}\n",
+"layout(binding=0) uniform atomic_uint x%d;\n",
+"   y += atomicCounterDecrement(x%d);\n",
+num_counters);
+GLuint prog = glCreateProgram();
+bool ret = atomic_counters_compile(prog, GL_VERTEX_SHADER, vs_source) 
&&
+atomic_counters_link(prog);
+
+glDeleteProgram(prog);
+free(vs_source);
+return ret;
+}
+
+static bool
+run_test_fragment_max_counters(unsigned num_counters)
+{
+/* Generate a shader with 'num_counters' counters. */
+c

[Piglit] [PATCH 08/13] arb_shader_atomic_counters: Test that atomic counters can be passed as function arguments.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 .../arb_shader_atomic_counters/function-argument.c | 114 +
 3 files changed, 116 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/function-argument.c

diff --git a/tests/all.tests b/tests/all.tests
index 4aba933..88656e5 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3175,6 +3175,7 @@ arb_shader_atomic_counters['array-indexing'] = 
concurrent_test('arb_shader_atomi
 arb_shader_atomic_counters['buffer-binding'] = 
concurrent_test('arb_shader_atomic_counters-buffer-binding')
 arb_shader_atomic_counters['default-partition'] = 
concurrent_test('arb_shader_atomic_counters-default-partition')
 arb_shader_atomic_counters['fragment-discard'] = 
concurrent_test('arb_shader_atomic_counters-fragment-discard')
+arb_shader_atomic_counters['function-argument'] = 
concurrent_test('arb_shader_atomic_counters-function-argument')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index 5526fbf..f7c2c26 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -15,5 +15,6 @@ add_executable (arb_shader_atomic_counters-array-indexing 
array-indexing.c commo
 add_executable (arb_shader_atomic_counters-buffer-binding buffer-binding.c 
common.c)
 add_executable (arb_shader_atomic_counters-default-partition 
default-partition.c common.c)
 add_executable (arb_shader_atomic_counters-fragment-discard fragment-discard.c 
common.c)
+add_executable (arb_shader_atomic_counters-function-argument 
function-argument.c common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/function-argument.c 
b/tests/spec/arb_shader_atomic_counters/function-argument.c
new file mode 100644
index 000..042c0e9
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/function-argument.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file function-argument.c
+ *
+ * Check that atomic operations work as expected on counters passed as
+ * function arguments.
+ */
+
+#include "common.h"
+
+#define L 256
+#define N (L * L)
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+run_test(void)
+{
+const char *fs_source = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"layout(binding = 0, offset = 0) uniform atomic_uint x;\n"
+"layout(binding = 0, offset = 4) uniform atomic_uint y;\n"
+"out ivec4 fcolor;\n"
+"\n"
+"uint f(atomic_uint z) {\n"
+"   return atomicCounterIncrement(z);"
+"}\n"
+"\n"
+"void main() {\n"
+"   fcolor.x = int(f(y));\n"
+"}\n";
+const char *vs_source = "#version 140\n"
+"in vec4 piglit_vertex;\n"
+"\n"
+"void main() {\n"
+"   gl_Position = piglit_vertex;\n"
+"}\n";
+const uint32_t start_value[] = { 0, 0 };
+const uint32_t expected_value[] = { 0, N };
+GLuint prog = glCreateProgram();
+bool ret = atomic_counters_compile(prog, GL_FRAGMENT_SHADER, 
fs_source) &&
+atomic_counters_compile(prog, GL_VERTEX_SHADER, vs_source) &&
+atomic_counters_draw_rect(prog, 2, 

[Piglit] [PATCH 05/13] arb_shader_atomic_counters: Test the buffer binding API functions.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 .../arb_shader_atomic_counters/buffer-binding.c| 159 +
 3 files changed, 161 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/buffer-binding.c

diff --git a/tests/all.tests b/tests/all.tests
index b9ec52b..171f305 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3172,6 +3172,7 @@ 
import_glsl_parser_tests(spec['ARB_shader_atomic_counters'],
 [''])
 arb_shader_atomic_counters['active-counters'] = 
concurrent_test('arb_shader_atomic_counters-active-counters')
 arb_shader_atomic_counters['array-indexing'] = 
concurrent_test('arb_shader_atomic_counters-array-indexing')
+arb_shader_atomic_counters['buffer-binding'] = 
concurrent_test('arb_shader_atomic_counters-buffer-binding')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index 83e38ec..93dec7d 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -12,5 +12,6 @@ link_libraries (
 
 add_executable (arb_shader_atomic_counters-active-counters active-counters.c 
common.c)
 add_executable (arb_shader_atomic_counters-array-indexing array-indexing.c 
common.c)
+add_executable (arb_shader_atomic_counters-buffer-binding buffer-binding.c 
common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/buffer-binding.c 
b/tests/spec/arb_shader_atomic_counters/buffer-binding.c
new file mode 100644
index 000..89af961
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/buffer-binding.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file buffer-binding.c
+ *
+ * Test that glBindBufferBase() and glBindBufferRange() have the
+ * necessary error checking for atomic counter buffers and that they
+ * update the buffer metadata correctly.
+ */
+
+#include "common.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+run_test_bind_at(unsigned i)
+{
+GLuint buffer;
+
+glGenBuffers(1, &buffer);
+
+glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, i, buffer);
+if (glGetError())
+return false;
+
+glBufferData(GL_ATOMIC_COUNTER_BUFFER, 4, NULL, GL_STATIC_DRAW);
+glDeleteBuffers(1, &buffer);
+
+return !glGetError();
+}
+
+static bool
+run_test_bind_range(unsigned i)
+{
+GLuint buffer;
+GLint binding;
+GLint start, size;
+
+glGenBuffers(1, &buffer);
+
+glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, i, buffer);
+if (!piglit_check_gl_error(GL_NO_ERROR)) {
+printf("Initial buffer binding failed.\n");
+return false;
+}
+
+glBufferData(GL_ATOMIC_COUNTER_BUFFER, 16, NULL, GL_STATIC_DRAW);
+
+glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, i, buffer, 6, 5);
+if (!piglit_check_gl_error(GL_INVALID_VALUE)) {
+printf("Misaligned buffer range binding didn't generate a"
+   " GL_INVALID_VALUE error.\n");
+return false;
+}
+
+glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, i, buffer, 8, 5);
+if (!piglit_check_gl_error(GL_NO_ERROR)) {
+printf("Buffer range binding failed.\n");
+return false;
+}
+
+glGetIntegerv(GL_ATOMIC_COUNTER_BUFFER_BINDING, &binding);
+if (!piglit_check_gl

[Piglit] [PATCH 06/13] arb_shader_atomic_counters: Test that atomics aren't allocated from the default uniform block.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 .../arb_shader_atomic_counters/default-partition.c | 122 +
 3 files changed, 124 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/default-partition.c

diff --git a/tests/all.tests b/tests/all.tests
index 171f305..91d4e6f 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3173,6 +3173,7 @@ 
import_glsl_parser_tests(spec['ARB_shader_atomic_counters'],
 arb_shader_atomic_counters['active-counters'] = 
concurrent_test('arb_shader_atomic_counters-active-counters')
 arb_shader_atomic_counters['array-indexing'] = 
concurrent_test('arb_shader_atomic_counters-array-indexing')
 arb_shader_atomic_counters['buffer-binding'] = 
concurrent_test('arb_shader_atomic_counters-buffer-binding')
+arb_shader_atomic_counters['default-partition'] = 
concurrent_test('arb_shader_atomic_counters-default-partition')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index 93dec7d..f9479de 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -13,5 +13,6 @@ link_libraries (
 add_executable (arb_shader_atomic_counters-active-counters active-counters.c 
common.c)
 add_executable (arb_shader_atomic_counters-array-indexing array-indexing.c 
common.c)
 add_executable (arb_shader_atomic_counters-buffer-binding buffer-binding.c 
common.c)
+add_executable (arb_shader_atomic_counters-default-partition 
default-partition.c common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/default-partition.c 
b/tests/spec/arb_shader_atomic_counters/default-partition.c
new file mode 100644
index 000..d0d26a2
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/default-partition.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file default-partition.c
+ *
+ *  Test that the following is met:
+ *
+ *  "Unlike other user-defined uniforms declared at global scope,
+ *   [atomic counters] take NO storage from the default partition,
+ *   they have NO location [...]"
+ *
+ * (from the ARB_shader_atomic_counters specification)
+ */
+
+#include "common.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+run_test(unsigned max_uniforms)
+{
+const char *fs_template = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"#define N %d\n"
+"\n"
+"out ivec4 fcolor;\n"
+"layout(binding=0) uniform atomic_uint x;\n"
+"uniform uint y[N];\n"
+"\n"
+"void main() {\n"
+"   int i;\n"
+"   uint z = atomicCounter(x);\n"
+"   \n"
+"   for (i = 0; i < N; ++i)\n"
+"   z += y[i];\n"
+"   \n"
+"   fcolor.x = int(z);\n"
+"}\n";
+char *fs_source;
+GLuint prog = glCreateProgram();
+int n = 0, ret;
+
+ret = asprintf(&fs_source, fs_template, max_uniforms);
+assert(ret > 0);
+
+/* This should fail to link if 'x' ended up being accounted in
+ * the default uniform partition because 'y[]' uses up the
+ * whole available uniform space. */
+atomic_counters_compile(prog, GL_FRAGME

[Piglit] [PATCH 04/13] arb_shader_atomic_counters: Test dynamic indexing of atomic counter arrays.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   1 +
 .../arb_shader_atomic_counters/array-indexing.c| 175 +
 3 files changed, 177 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/array-indexing.c

diff --git a/tests/all.tests b/tests/all.tests
index 37a413c..b9ec52b 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3171,6 +3171,7 @@ 
import_glsl_parser_tests(spec['ARB_shader_atomic_counters'],
 os.path.join(testsDir, 'spec', 
'arb_shader_atomic_counters'),
 [''])
 arb_shader_atomic_counters['active-counters'] = 
concurrent_test('arb_shader_atomic_counters-active-counters')
+arb_shader_atomic_counters['array-indexing'] = 
concurrent_test('arb_shader_atomic_counters-array-indexing')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index 4249ff0..83e38ec 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -11,5 +11,6 @@ link_libraries (
 )
 
 add_executable (arb_shader_atomic_counters-active-counters active-counters.c 
common.c)
+add_executable (arb_shader_atomic_counters-array-indexing array-indexing.c 
common.c)
 
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/array-indexing.c 
b/tests/spec/arb_shader_atomic_counters/array-indexing.c
new file mode 100644
index 000..be9e252
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/array-indexing.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file array-indexing.c
+ *
+ * Check that dynamically uniform indexing of an atomic counter array
+ * works as expected.
+ */
+
+#include "common.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static bool
+set_uniform_int(GLuint prog, const char *name, int value)
+{
+int loc;
+
+glLinkProgram(prog);
+glUseProgram(prog);
+
+loc = glGetUniformLocation(prog, name);
+if (loc < 0)
+return false;
+
+glUniform1i(loc, value);
+
+return piglit_check_gl_error(GL_NO_ERROR);
+}
+
+static bool
+run_test_vertex(void)
+{
+const char *fs_source = "#version 140\n"
+"flat in ivec4 vcolor;\n"
+"out ivec4 fcolor;\n"
+"void main() {\n"
+"   fcolor = vcolor;\n"
+"}\n";
+const char *vs_source = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"layout(binding = 0, offset = 4) uniform atomic_uint x[3];\n"
+"in vec4 position;\n"
+"flat out ivec4 vcolor;\n"
+"uniform int index;\n"
+"\n"
+"void main() {\n"
+"   vcolor.x = int(atomicCounterIncrement(x[1 + 
index]));\n"
+"   vcolor.y = int(atomicCounterIncrement(x[0 + 
index]));\n"
+"   vcolor.z = int(atomicCounterIncrement(x[1 + 
index]));\n"
+"   vcolor.w = int(atomicCounterIncrement(x[0 + 
index]));\n"
+"   gl_Position = position;\n"
+"}\n";
+const unsigned int start[] = { 1, 2, 4, 8 };
+const unsigned int expected[] = { 8, 4, 9, 5 };
+GLuint prog = glCreateProgram();
+bool ret =
+atomic_counters_compile(prog, GL_

[Piglit] [PATCH 03/13] arb_shader_atomic_counters: Test the atomic counter query functions.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |   2 +
 .../arb_shader_atomic_counters/active-counters.c   | 411 +
 3 files changed, 414 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/active-counters.c

diff --git a/tests/all.tests b/tests/all.tests
index 4c5f434..37a413c 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3170,6 +3170,7 @@ spec['ARB_shader_atomic_counters'] = 
arb_shader_atomic_counters
 import_glsl_parser_tests(spec['ARB_shader_atomic_counters'],
 os.path.join(testsDir, 'spec', 
'arb_shader_atomic_counters'),
 [''])
+arb_shader_atomic_counters['active-counters'] = 
concurrent_test('arb_shader_atomic_counters-active-counters')
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
index b204c02..4249ff0 100644
--- a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -10,4 +10,6 @@ link_libraries (
${OPENGL_glu_LIBRARY}
 )
 
+add_executable (arb_shader_atomic_counters-active-counters active-counters.c 
common.c)
+
 # vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/active-counters.c 
b/tests/spec/arb_shader_atomic_counters/active-counters.c
new file mode 100644
index 000..7f6ed1e
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/active-counters.c
@@ -0,0 +1,411 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file active-counters.c
+ *
+ * Compile a shader with a bunch of atomic counters and check that the
+ * active atomic counter and buffer query functions return sane
+ * results.
+ */
+
+#include "common.h"
+
+#define L 1
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_core_version = 31;
+
+config.window_width = L;
+config.window_height = L;
+config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+const char *fs_source = "#version 140\n"
+"#extension GL_ARB_shader_atomic_counters : enable\n"
+"\n"
+"out ivec4 fcolor;\n"
+"\n"
+"layout(binding=0) uniform atomic_uint x0[2];\n"
+"layout(binding=0) uniform atomic_uint x1;\n"
+"layout(binding=3, offset=8) uniform atomic_uint x2;\n"
+"layout(binding=3, offset=12) uniform atomic_uint x3;\n"
+"\n"
+"layout(binding=7, binding=2, offset=4) uniform;\n"
+"\n"
+"layout(binding=2) uniform atomic_uint x4;\n"
+"layout(binding=7, offset=8, offset=0) uniform atomic_uint x5;\n"
+"layout(binding=3) uniform atomic_uint x6, x7;\n"
+"\n"
+"void main() {\n"
+"   fcolor.x = int(atomicCounter(x0[0]) + atomicCounter(x0[1])\n"
+"  + atomicCounter(x1) + atomicCounter(x2)\n"
+"  + atomicCounter(x3) + atomicCounter(x4)\n"
+"  + atomicCounter(x5) + atomicCounter(x6)\n"
+"  + atomicCounter(x7));\n"
+"}\n";
+
+struct buffer_info {
+unsigned num_counters;
+unsigned min_reasonable_size;
+};
+
+static const struct buffer_info *
+expected_buffer_info(unsigned binding)
+{
+if (binding == 0) {
+static const struct buffer_info info = { 2, 12 };
+return &info;
+} else if (binding == 2) {
+static const struct buffer_info info = { 1, 4 };
+return &info;
+} else if (binding == 3) {
+static const struct buffer_info info = { 4, 24 };
+return &info;
+} else if (bindi

[Piglit] [PATCH 02/13] arb_shader_atomic_counters: Import GLSL parser tests.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|  3 +++
 .../compiler/builtins.frag | 24 ++
 .../compiler/declaration-allowed.frag  | 21 +++
 .../compiler/declaration-arg-inout.frag| 21 +++
 .../compiler/declaration-arg-out.frag  | 21 +++
 .../compiler/declaration-const.frag| 17 +++
 .../compiler/declaration-initializer.frag  | 16 +++
 .../compiler/declaration-input.frag| 17 +++
 .../compiler/declaration-local.frag| 17 +++
 .../compiler/declaration-output.frag   | 17 +++
 .../compiler/expression-allowed.frag   | 22 
 .../compiler/expression-disallowed-1.frag  | 21 +++
 .../compiler/expression-disallowed-2.frag  | 21 +++
 .../compiler/expression-disallowed-3.frag  | 21 +++
 .../compiler/expression-disallowed-4.frag  | 21 +++
 .../compiler/expression-disallowed-5.frag  | 21 +++
 .../compiler/expression-disallowed-6.frag  | 21 +++
 .../compiler/lvalue-1.frag | 17 +++
 .../compiler/lvalue-2.frag | 17 +++
 .../compiler/lvalue-3.frag | 18 
 .../compiler/uniform-block.frag| 18 
 .../preprocessor/define.frag   | 19 +
 .../preprocessor/define.vert   | 19 +
 23 files changed, 430 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/compiler/builtins.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-allowed.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-arg-inout.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-arg-out.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-const.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-initializer.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-input.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-local.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/declaration-output.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/expression-allowed.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/expression-disallowed-1.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/expression-disallowed-2.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/expression-disallowed-3.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/expression-disallowed-4.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/expression-disallowed-5.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/expression-disallowed-6.frag
 create mode 100644 tests/spec/arb_shader_atomic_counters/compiler/lvalue-1.frag
 create mode 100644 tests/spec/arb_shader_atomic_counters/compiler/lvalue-2.frag
 create mode 100644 tests/spec/arb_shader_atomic_counters/compiler/lvalue-3.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/compiler/uniform-block.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/preprocessor/define.frag
 create mode 100644 
tests/spec/arb_shader_atomic_counters/preprocessor/define.vert

diff --git a/tests/all.tests b/tests/all.tests
index e1907d6..4c5f434 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3167,6 +3167,9 @@ import_glsl_parser_tests(profile.tests, generatedTestDir, 
['spec'])
 
 arb_shader_atomic_counters = Group()
 spec['ARB_shader_atomic_counters'] = arb_shader_atomic_counters
+import_glsl_parser_tests(spec['ARB_shader_atomic_counters'],
+os.path.join(testsDir, 'spec', 
'arb_shader_atomic_counters'),
+[''])
 
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
diff --git a/tests/spec/arb_shader_atomic_counters/compiler/builtins.frag 
b/tests/spec/arb_shader_atomic_counters/compiler/builtins.frag
new file mode 100644
index 000..74f97f7
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/compiler/builtins.frag
@@ -0,0 +1,24 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.40
+ * require_extensions: GL_ARB_shader_atomic_counters
+ * [end config]
+ *
+ * Check that the builtin constants defined by the extension
+ * are present.
+ */
+#version 140
+#extension GL_ARB_shader_atomic_counters: require
+
+out ivec4 fcolor;
+
+void main()
+{
+fcolor.x = gl_MaxVertexAtomicCounters +
+ 

[Piglit] [PATCH 01/13] arb_shader_atomic_counters: Import common helper functions.

2013-10-07 Thread Francisco Jerez
---
 tests/all.tests|   3 +
 tests/spec/CMakeLists.txt  |   1 +
 .../arb_shader_atomic_counters/CMakeLists.gl.txt   |  13 +
 .../spec/arb_shader_atomic_counters/CMakeLists.txt |   1 +
 tests/spec/arb_shader_atomic_counters/common.c | 302 +
 tests/spec/arb_shader_atomic_counters/common.h |  90 ++
 6 files changed, 410 insertions(+)
 create mode 100644 tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
 create mode 100644 tests/spec/arb_shader_atomic_counters/CMakeLists.txt
 create mode 100644 tests/spec/arb_shader_atomic_counters/common.c
 create mode 100644 tests/spec/arb_shader_atomic_counters/common.h

diff --git a/tests/all.tests b/tests/all.tests
index abe247e..e1907d6 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -3165,6 +3165,9 @@ add_shader_test_dir(spec, os.path.join(generatedTestDir, 
'spec'),
recursive=True)
 import_glsl_parser_tests(profile.tests, generatedTestDir, ['spec'])
 
+arb_shader_atomic_counters = Group()
+spec['ARB_shader_atomic_counters'] = arb_shader_atomic_counters
+
 profile.tests['hiz'] = hiz
 profile.tests['fast_color_clear'] = fast_color_clear
 profile.tests['glean'] = glean
diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt
index 18b846d..011fd63 100644
--- a/tests/spec/CMakeLists.txt
+++ b/tests/spec/CMakeLists.txt
@@ -24,6 +24,7 @@ add_subdirectory (amd_seamless_cubemap_per_texture)
 add_subdirectory (amd_vertex_shader_layer)
 add_subdirectory (arb_separate_shader_objects)
 add_subdirectory (arb_shader_texture_lod/execution)
+add_subdirectory (arb_shader_atomic_counters)
 add_subdirectory (arb_shader_objects)
 add_subdirectory (arb_shading_language_420pack/execution)
 add_subdirectory (arb_sync)
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
new file mode 100644
index 000..b204c02
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.gl.txt
@@ -0,0 +1,13 @@
+include_directories(
+   ${GLEXT_INCLUDE_DIR}
+   ${OPENGL_INCLUDE_PATH}
+   ${piglit_SOURCE_DIR}/tests/util
+)
+
+link_libraries (
+   piglitutil_${piglit_target_api}
+   ${OPENGL_gl_LIBRARY}
+   ${OPENGL_glu_LIBRARY}
+)
+
+# vim: ft=cmake:
diff --git a/tests/spec/arb_shader_atomic_counters/CMakeLists.txt 
b/tests/spec/arb_shader_atomic_counters/CMakeLists.txt
new file mode 100644
index 000..144a306
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/CMakeLists.txt
@@ -0,0 +1 @@
+piglit_include_target_api()
diff --git a/tests/spec/arb_shader_atomic_counters/common.c 
b/tests/spec/arb_shader_atomic_counters/common.c
new file mode 100644
index 000..638d5af
--- /dev/null
+++ b/tests/spec/arb_shader_atomic_counters/common.c
@@ -0,0 +1,302 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/** @file common.c
+ *
+ * Common utility functions for the ARB_shader_atomic_counters tests.
+ */
+
+#include "common.h"
+
+bool
+atomic_counters_probe_buffer(unsigned base, unsigned count,
+ const uint32_t *expected)
+{
+uint32_t *p = glMapBufferRange(
+GL_ATOMIC_COUNTER_BUFFER, base * sizeof(uint32_t),
+count * sizeof(uint32_t), GL_MAP_READ_BIT);
+unsigned i;
+
+if (!p) {
+printf("Couldn't map atomic counter buffer for read-back.\n");
+return false;
+}
+
+for (i = 0; i < count; ++i) {
+if (p[i] != expected[i]) {
+printf("Probe value at (%i)\n", i);
+printf("  Expected: 0x%08x\n", expected[i]);
+printf("  Observed: 0x%08x\n", p[i]);
+glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER);
+return false;
+  

[Piglit] [PATCH 00/13] Tests for the ARB_shader_atomic_counters_extension.

2013-10-07 Thread Francisco Jerez
This patch series implements a bunch of tests for the
ARB_shader_atomic_counters extension -- Patches adding support for it
to the i965 driver have been around for a while on the mesa-dev
mailing list, and they can also be found in my personal branch [1].

54 of these tests pass using the i965 implementation on both Ivy
Bridge and Haswell, 5 are skipped mainly due to the lack of support
for tessellation and geometry shaders from mesa master, none of the
tests fail on i965.

I've pushed the whole series to my personal piglit repository to ease
testing [2].

Thanks.

[1] http://cgit.freedesktop.org/~currojerez/mesa/log/?h=atomic-counters
[2] http://cgit.freedesktop.org/~currojerez/piglit/

[PATCH 01/13] arb_shader_atomic_counters: Import common helper functions.
[PATCH 02/13] arb_shader_atomic_counters: Import GLSL parser tests.
[PATCH 03/13] arb_shader_atomic_counters: Test the atomic counter query 
functions.
[PATCH 04/13] arb_shader_atomic_counters: Test dynamic indexing of atomic 
counter arrays.
[PATCH 05/13] arb_shader_atomic_counters: Test the buffer binding API functions.
[PATCH 06/13] arb_shader_atomic_counters: Test that atomics aren't allocated 
from the default uniform block.
[PATCH 07/13] arb_shader_atomic_counters: Test that atomic ops aren't executed 
for discarded fragments.
[PATCH 08/13] arb_shader_atomic_counters: Test that atomic counters can be 
passed as function arguments.
[PATCH 09/13] arb_shader_atomic_counters: Test the maximum number of supported 
counters, buffers and bindings.
[PATCH 10/13] arb_shader_atomic_counters: Test the minimum maximum limits 
defined by the spec.
[PATCH 11/13] arb_shader_atomic_counters: Test linkage of atomic counters with 
conflicting locations.
[PATCH 12/13] arb_shader_atomic_counters: Test that atomic built-ins execute 
the expected operations on memory.
[PATCH 13/13] arb_shader_atomic_counters: Test the atomicity of atomic built-in 
functions.
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH] GL 1.50: Test that UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER is accepted by GetActiveUniformBlockiv()

2013-10-07 Thread Eric Anholt
Nicholas Mack  writes:

> v2: Incorporate this test into referenced-by-shader.c

> @@ -40,10 +41,6 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>  
>   config.supports_gl_compat_version = 10;
>  
> - config.window_width = 10;
> - config.window_height = 10;
> - config.window_visual = PIGLIT_GL_VISUAL_RGBA | PIGLIT_GL_VISUAL_DOUBLE;
> -

It looks like this won't ever get run on a 3.2 context on Mesa because
you need at least config.supports_gl_core_version = 31.

> + bool use_gs = piglit_get_gl_version() >= 32;
> + const char *header;
> + char *temp_source;
> + int num_uniforms_used = 0;
> +
> + if(use_gs) {

There should always be a space between 'if' and '('

> - for (i = 0; i < 3; i++) {
> - GLint ref_vs, ref_fs;
> + if(use_gs) {
> + num_uniforms_used = 7;
> + printf("v g f\n");
> + }
> + else {

Usually we cuddle the braces like "} else {"

With the one functional fix and the little style nits fixed, this would
be:

Reviewed-by: Eric Anholt 


pgpHDw5ucWS4z.pgp
Description: PGP signature
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH 1/2] GLSL 1.50: Test that version 140 and version 150 shaders can be linked together

2013-10-07 Thread Paul Berry
On 27 September 2013 11:55, Nicholas Mack  wrote:

> ---
>  .../glsl-1.50/linker/versions-mingled.shader_test  | 29
> ++
>  1 file changed, 29 insertions(+)
>  create mode 100644
> tests/spec/glsl-1.50/linker/versions-mingled.shader_test
>
> diff --git a/tests/spec/glsl-1.50/linker/versions-mingled.shader_test
> b/tests/spec/glsl-1.50/linker/versions-mingled.shader_test
> new file mode 100644
> index 000..543a778
> --- /dev/null
> +++ b/tests/spec/glsl-1.50/linker/versions-mingled.shader_test
> @@ -0,0 +1,29 @@
> +# Tests that GLSL 1.40 and GLSL 1.50 shaders may be linked together
> +#
> +# GLSL 1.50 Spec, 3.3 ():
>

Were you meaning to put something between the parentheses?  (The section
name, "Preprocessor", perhaps?)

The same comment applies to patch 2.

With that fixed, the series is:

Reviewed-by: Paul Berry 


> +# "Shaders declaring version 1.40 of the shading language can be linked
> with
> +#  shaders declaring version 1.50 in the same program."
> +[require]
> +GLSL >= 1.50
> +
> +[vertex shader]
> +#version 140
> +
> +in vec4 a;
> +
> +void main()
> +{
> +   gl_Position = a;
> +}
> +
> +[fragment shader]
> +#version 150
> +
> +void main()
> +{
> +   gl_FragColor = vec4(1.);
> +}
> +
> +[test]
> +
> +
> --
> 1.8.3.1
>
> ___
> Piglit mailing list
> Piglit@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH] textureSize: Initialize sample_count to 1.

2013-10-07 Thread Paul Berry
On 23 September 2013 20:46, Kenneth Graunke  wrote:

> The multisampling tests initialize the number of miplevels to the number
> of samples.  Since this is zero, we allocate an array of zero miplevels,
> and then try to write to the first element.
>
> Fixes the following Valgrind error:
>
> Invalid write of size 8
>at 0x403123: compute_miplevel_info (common.c:163)
>by 0x402B9B: piglit_init (textureSize.c:455)
>by 0x4EA6B89: run_test (piglit_fbo_framework.c:50)
>by 0x4EA4BEE: piglit_gl_test_run (piglit-framework-gl.c:141)
>by 0x401FC7: main (textureSize.c:68)
>  Address 0xa04d040 is 0 bytes after a block of size 0 alloc'd
>at 0x4C2757B: malloc (in
> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
>by 0x40310A: compute_miplevel_info (common.c:161)
>by 0x402B9B: piglit_init (textureSize.c:455)
>by 0x4EA6B89: run_test (piglit_fbo_framework.c:50)
>by 0x4EA4BEE: piglit_gl_test_run (piglit-framework-gl.c:141)
>by 0x401FC7: main (textureSize.c:68)
>
> Signed-off-by: Kenneth Graunke 
> Cc: Chris Forbes 
> ---
>  tests/texturing/shaders/textureSize.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/tests/texturing/shaders/textureSize.c
> b/tests/texturing/shaders/textureSize.c
> index f010d9c..85a11d3 100644
> --- a/tests/texturing/shaders/textureSize.c
> +++ b/tests/texturing/shaders/textureSize.c
> @@ -432,6 +432,8 @@ piglit_init(int argc, char **argv)
> int prog;
> int tex_location;
>
> +   sample_count = 1;
> +
> require_GL_features(test_stage);
>
> if (sampler.target == GL_TEXTURE_CUBE_MAP_ARRAY)
>

It looks like the textureSize test creates its textures using common.c's
upload_miplevel_data(), which always passes a sample count of 4 to
glTexImage{2,3}DMultisample().  Would it be better to set sample_count to 4
to match this?

In addition, maybe we should change upload_miplevel_data() so that it
passes sample_count to glTexImage{2,3}DMultisample() rather than hardcoding
a sample count of 4.
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH 3/4] util: Add a -list-subtests option that will list all the subtests

2013-10-07 Thread Chad Versace

On 10/07/2013 04:19 PM, Ian Romanick wrote:

On 10/07/2013 11:02 AM, Chad Versace wrote:

On 10/04/2013 06:11 PM, Ian Romanick wrote:

From: Ian Romanick 

This required some ugly hacking about to get the list of subtests to
process_args.  Suggestions?


Let's avoid these ugly hacks. Here's my suggestion, which covers patches
2 and 3.


My troll bait worked. :)


Damn... you caught me...



Patch 2/4 moves `struct piglit_gl_test_config config` out of main() to
file scope. Let's avoid making things global; that leads to a slippery
slope. I fought hard to kill many of Piglit's globals, and I don't welcome
the arrival of new ones. If at all possible, let's leave it in main()
where it is.

To leave 'config' in main(), we need to restructure a few things. First,
piglit_gl_test_config_init() should no longer parse args; instead, it
should only
memset 'config' to 0. That is, let's change its signature from

 void piglit_gl_test_config_init(int *argc, char *argv[], struct
piglit_gl_test_config *config)

to

 void piglit_gl_test_config_init(struct piglit_gl_test_config *config)

Move the argparsing (that is, the call to process_args()) into
piglit_gl_test_run(). That will ensure
that args are parsed *after* the test author has set all config
variables in the CONFIG block.

The CONFIG block in your patch 4/4 should now look like this:

PIGLIT_GL_TEST_CONFIG_BEGIN

 config.subtests = subtests;
 config.supports_gl_compat_version = 10;
 config.window_visual = PIGLIT_GL_VISUAL_RGB;

PIGLIT_GL_TEST_CONFIG_END


I like this.  This is the way I originally wanted to structure things,
but there were issues.


The config is no longer defined with file-scope, so piglit_init() should
execute subtests
like this:

 result = piglit_run_subtests(PIGLIT_SKIP);

piglit_run_selected_subtests() should access `config->subtests` through
the global
"test context object", piglit-framework-gl.c:`struct piglit_gl_framework
*gl_fw`,
like this:

 enum piglit_result
 piglit_run_selected_subtests(enum piglit_result previous_result)
 {
 enum piglit_result result = previous_result;
 const struct piglit_gl_subtest *subtests gl_fw->config->subtests;
 const char **selected_subtests = gl_fw->config->selected_subtests;

 ...
 }


I have somewhat mixed feelings about this... I liked that the old
piglit_run_selected_subtests was both more primitive (flexible) and more
explicit.  This is the birth of this tool, and I'm not sure how the next
user will want to use it.  Hmm...

A third option is an accessor that lets the test get config or maybe
just the list of selected tests from the implicit test context object.


Introducing an accessor for the config makes sense to me.


At this point, it's no longer necessary for the subtests array to be
global,
so you could even do the below if you wanted, but that's really up to
personal
taste.

PIGLIT_GL_TEST_CONFIG_BEGIN

 config.supports_gl_compat_version = 10;
 config.window_visual = PIGLIT_GL_VISUAL_RGB;

 config.subtests = {
 {
 "Cannot delete while active",
 "delete-inactive-only",
 delete_inactive_only
 },
 ...,
 };

PIGLIT_GL_TEST_CONFIG_END


I think that's C99 syntax, so we probably can't use it in piglit.


Argh, that's not valid syntax anywhere. You can only initialize an array
like above at the point of variable declaration. However, such initialization
is legal in C89.

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH] shaders: add test for bool casting of large integers.

2013-10-07 Thread Dave Airlie
From: Dave Airlie 

I noticed the TGSI convertor just does INEG then AND 0x3f80, which works
for small values, but fails for larger ints.

This seems to fail on nvidia (4.3.0 NVIDIA 325.15) and on ironlake with mesa
9.2.

Signed-off-by: Dave Airlie 
---
 tests/shaders/glsl-fs-i2b-large-int.shader_test | 32 +
 1 file changed, 32 insertions(+)
 create mode 100644 tests/shaders/glsl-fs-i2b-large-int.shader_test

diff --git a/tests/shaders/glsl-fs-i2b-large-int.shader_test 
b/tests/shaders/glsl-fs-i2b-large-int.shader_test
new file mode 100644
index 000..96369da
--- /dev/null
+++ b/tests/shaders/glsl-fs-i2b-large-int.shader_test
@@ -0,0 +1,32 @@
+# validate a bug in the TGSI conversion where it just did AND (float)1.0
+# but for large integers this would fail, we should clamp to 1 first
+# looks like nobody passes this from my first pass testing.
+
+[require]
+GLSL >= 1.30
+
+[vertex shader]
+void main()
+{
+   gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+#version 130
+
+uniform int arg0;
+uniform int arg1;
+
+void main()
+{
+   bool t = bool(arg0);
+   bool f = bool(arg1);
+
+   gl_FragColor = vec4(1.0 - float(t), float(t) / 2.0, float(f), 1.0 - 
float(f));
+}
+
+[test]
+uniform int arg0 0x0ff1
+uniform int arg1 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 0.5 0.0 1.0
-- 
1.8.3.1

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH 3/4] util: Add a -list-subtests option that will list all the subtests

2013-10-07 Thread Ian Romanick
On 10/07/2013 11:02 AM, Chad Versace wrote:
> On 10/04/2013 06:11 PM, Ian Romanick wrote:
>> From: Ian Romanick 
>>
>> This required some ugly hacking about to get the list of subtests to
>> process_args.  Suggestions?
> 
> Let's avoid these ugly hacks. Here's my suggestion, which covers patches
> 2 and 3.

My troll bait worked. :)

> Patch 2/4 moves `struct piglit_gl_test_config config` out of main() to
> file scope. Let's avoid making things global; that leads to a slippery
> slope. I fought hard to kill many of Piglit's globals, and I don't welcome
> the arrival of new ones. If at all possible, let's leave it in main()
> where it is.
> 
> To leave 'config' in main(), we need to restructure a few things. First,
> piglit_gl_test_config_init() should no longer parse args; instead, it
> should only
> memset 'config' to 0. That is, let's change its signature from
> 
> void piglit_gl_test_config_init(int *argc, char *argv[], struct
> piglit_gl_test_config *config)
> 
> to
> 
> void piglit_gl_test_config_init(struct piglit_gl_test_config *config)
> 
> Move the argparsing (that is, the call to process_args()) into
> piglit_gl_test_run(). That will ensure
> that args are parsed *after* the test author has set all config
> variables in the CONFIG block.
> 
> The CONFIG block in your patch 4/4 should now look like this:
> 
> PIGLIT_GL_TEST_CONFIG_BEGIN
> 
> config.subtests = subtests;
> config.supports_gl_compat_version = 10;
> config.window_visual = PIGLIT_GL_VISUAL_RGB;
> 
> PIGLIT_GL_TEST_CONFIG_END

I like this.  This is the way I originally wanted to structure things,
but there were issues.

> The config is no longer defined with file-scope, so piglit_init() should
> execute subtests
> like this:
> 
> result = piglit_run_subtests(PIGLIT_SKIP);
> 
> piglit_run_selected_subtests() should access `config->subtests` through
> the global
> "test context object", piglit-framework-gl.c:`struct piglit_gl_framework
> *gl_fw`,
> like this:
> 
> enum piglit_result
> piglit_run_selected_subtests(enum piglit_result previous_result)
> {
> enum piglit_result result = previous_result;
> const struct piglit_gl_subtest *subtests gl_fw->config->subtests;
> const char **selected_subtests = gl_fw->config->selected_subtests;
>
> ...
> }

I have somewhat mixed feelings about this... I liked that the old
piglit_run_selected_subtests was both more primitive (flexible) and more
explicit.  This is the birth of this tool, and I'm not sure how the next
user will want to use it.  Hmm...

A third option is an accessor that lets the test get config or maybe
just the list of selected tests from the implicit test context object.

> At this point, it's no longer necessary for the subtests array to be
> global,
> so you could even do the below if you wanted, but that's really up to
> personal
> taste.
> 
> PIGLIT_GL_TEST_CONFIG_BEGIN
> 
> config.supports_gl_compat_version = 10;
> config.window_visual = PIGLIT_GL_VISUAL_RGB;
> 
> config.subtests = {
> {
> "Cannot delete while active",
> "delete-inactive-only",
> delete_inactive_only
> },
> ...,
> };
> 
> PIGLIT_GL_TEST_CONFIG_END

I think that's C99 syntax, so we probably can't use it in piglit.

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH] GLSL: Test that input layout qualifiers cannot be used on variable declarations

2013-10-07 Thread Paul Berry
On 20 September 2013 12:31, Nicholas Mack  wrote:

> ---
>  ...-layout-qualifiers-with-variable-declarations.geom | 19
> +++
>  ...-layout-qualifiers-with-variable-declarations.geom | 19
> +++
>  2 files changed, 38 insertions(+)
>  create mode 100644
> tests/spec/glsl-1.50/compiler/incorrect-in-layout-qualifiers-with-variable-declarations.geom
>  create mode 100644
> tests/spec/glsl-1.50/compiler/incorrect-out-layout-qualifiers-with-variable-declarations.geom
>
> diff --git
> a/tests/spec/glsl-1.50/compiler/incorrect-in-layout-qualifiers-with-variable-declarations.geom
> b/tests/spec/glsl-1.50/compiler/incorrect-in-layout-qualifiers-with-variable-declarations.geom
> new file mode 100644
> index 000..f26b60d
> --- /dev/null
> +++
> b/tests/spec/glsl-1.50/compiler/incorrect-in-layout-qualifiers-with-variable-declarations.geom
> @@ -0,0 +1,19 @@
> +// [config]
> +// expect_result: fail
> +// glsl_version: 1.50
> +// check_link: true
>

This needs to be "check_link: false".  Otherwise the test will erroneously
pass due to lacking the necessary input/output layout qualifiers.

A similar change needs to be made to
incorrect-out-layout-qualifiers-with-variable-declarations.geom.

With that change, this patch is:

Reviewed-by: Paul Berry 


> +// [end config]
> +//
> +// Tests that input layout qualifiers cannot be used on a variable
> declaration.
> +//
> +// GLSLangSpec 1.50, section 4.3.8.2 (Output Layout Qualifiers):
> +// "Geometry shaders allow input layout qualifiers only on the interface
> +//  qualifier in, not on an input block,block member, or variable."
> +
> +#version 150
> +
> +layout(points) in float c[];
> +
> +void main()
> +{
> +}
> diff --git
> a/tests/spec/glsl-1.50/compiler/incorrect-out-layout-qualifiers-with-variable-declarations.geom
> b/tests/spec/glsl-1.50/compiler/incorrect-out-layout-qualifiers-with-variable-declarations.geom
> new file mode 100644
> index 000..161de1c
> --- /dev/null
> +++
> b/tests/spec/glsl-1.50/compiler/incorrect-out-layout-qualifiers-with-variable-declarations.geom
> @@ -0,0 +1,19 @@
> +// [config]
> +// expect_result: fail
> +// glsl_version: 1.50
> +// check_link: true
> +// [end config]
> +//
> +// Tests that output layout qualifiers cannot be used on a variable
> declaration.
> +//
> +// GLSLangSpec 1.50, section 4.3.8.2 (Output Layout Qualifiers):
> +// "Geometry shaders can have output layout qualifiers only on the
> interface
> +//  qualifier out, not on an output block or variable declaration."
> +
> +#version 150
> +
> +layout(points) out float c;
> +
> +void main()
> +{
> +}
> --
> 1.8.3.1
>
> ___
> Piglit mailing list
> Piglit@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH] Test that invariant qualifier is available to all shaders

2013-10-07 Thread Paul Berry
On 19 September 2013 11:36, Steve Miller  wrote:

>  GLSL 1.50 section 4.6.1 (The Invariant Qualifier) says:
>To ensure that a particular output variable is invariant, it is
> necessary
>to use the invariant qualifier. It can either be used to qualify a
>previously declared variable as being invariant
>invariant gl_Position; // make existing gl_Position be invariant
>out vec3 Color; // make existing Color be invariant
>invariant Color;
>or as part of a declaration when a variable is declared
>invariant centroid out vec3 Color;
>The invariant qualifier must appear before any interpolation qualifiers
> or
>storage qualifiers when combined with a declaration. Only variables
> output
>from a shader (including those that are then input to a subsequent
> shader)
>can be candidates for invariance. This includes user-defined output
> variables
>and the built-in output variables. For variables leaving one shader and
> coming
>into another shader, the invariant keyword has to be used in both
> shaders,
>or a link error will result.
> ---
>  .../invariant-qualifier-everywhere.shader_test | 83
> +
>  ...fier-everywhere-gs-fs-inconsistency.shader_test | 83
> +
>  ...fier-everywhere-vs-gs-inconsistency.shader_test | 84
> ++
>  3 files changed, 250 insertions(+)
>  create mode 100644
> tests/spec/glsl-1.50/execution/invariant-qualifier-everywhere.shader_test
>  create mode 100644
> tests/spec/glsl-1.50/linker/invariant-qualifier-everywhere-gs-fs-inconsistency.shader_test
>  create mode 100644
> tests/spec/glsl-1.50/linker/invariant-qualifier-everywhere-vs-gs-inconsistency.shader_test
>

Thanks, Steve.  I've made a minor correction and pushed this patch to
piglit master.


>
> diff --git
> a/tests/spec/glsl-1.50/execution/invariant-qualifier-everywhere.shader_test
> b/tests/spec/glsl-1.50/execution/invariant-qualifier-everywhere.shader_test
> new file mode 100644
> index 000..3cee960
> --- /dev/null
> +++
> b/tests/spec/glsl-1.50/execution/invariant-qualifier-everywhere.shader_test
> @@ -0,0 +1,83 @@
> +# Test that invariant qualifier is available to all shaders
> +#
> +# GLSL 1.50 section 4.6.1 (The Invariant Qualifier) says:
> +#   To ensure that a particular output variable is invariant, it is
> necessary
> +#   to use the invariant qualifier. It can either be used to qualify a
> +#   previously declared variable as being invariant
> +#   invariant gl_Position; // make existing gl_Position be invariant
> +#   out vec3 Color; // make existing Color be invariant
> +#   invariant Color;
> +#   or as part of a declaration when a variable is declared
> +#   invariant centroid out vec3 Color;
> +#   The invariant qualifier must appear before any interpolation
> qualifiers or
> +#   storage qualifiers when combined with a declaration. Only variables
> output
> +#   from a shader (including those that are then input to a subsequent
> shader)
> +#   can be candidates for invariance. This includes user-defined output
> variables
> +#   and the built-in output variables. For variables leaving one shader
> and coming
> +#   into another shader, the invariant keyword has to be used in both
> shaders,
> +#   or a link error will result.
> +#
> +# Test is expected to pass.
> +
> +[require]
> +GL >= 3.2
> +GLSL >= 1.50
> +
> +[vertex shader]
> +#version 150
> +
> +in vec4 vertex;
> +invariant out vec4 pos;
> +invariant gl_Position;
> +invariant out vec4 extra01;
> +
> +void main()
> +{
> +gl_Position = vertex;
> +pos = vertex;
> +}
> +
> +[geometry shader]
> +#version 150
> +
> +layout(triangles) in;
> +layout(triangles, max_vertices=3) out;
> +
> +invariant in vec4 pos[];
> +invariant in vec4 extra01[];
> +invariant out vec4 extra02;
> +
> +
> +void main()
> +{
> +for(int i = 0; i < 3; i++) {
> +gl_Position = pos[i] * 0.5;
> +extra02 = extra01[i] * 0.5;
> +EmitVertex();
> +}
> +
> +}
> +
> +
> +[fragment shader]
> +#version 150
> +
> +in vec4 extra02;
> +invariant extra02; //should be legal according to example
> +out vec4 FragColor;
> +
> +void main()
> +{
> +FragColor = vec4(extra02);
> +}
> +
> +[vertex data]
> +vertex/float/2
> +-1.0 -1.0
> + 1.0 -1.0
> + 1.0  1.0
> +-1.0  1.0
> +
> +[test]
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe all rgba 0.5 0.5 0.5 0.5
> diff --git
> a/tests/spec/glsl-1.50/linker/invariant-qualifier-everywhere-gs-fs-inconsistency.shader_test
> b/tests/spec/glsl-1.50/linker/invariant-qualifier-everywhere-gs-fs-inconsistency.shader_test
> new file mode 100644
> index 000..6454283
> --- /dev/null
> +++
> b/tests/spec/glsl-1.50/linker/invariant-qualifier-everywhere-gs-fs-inconsistency.shader_test
> @@ -0,0 +1,83 @@
> +# Test that invariant qualifier is available to all shaders
> +#
> +# GLSL 1.50 section 4.6.1 (The Invariant Qualifier) says:
> +#   To ensure that a particular output variable is invariant, i

Re: [Piglit] [PATCH] GS: Test that EndPrimitive() is optional for geometry output layout of "points"

2013-10-07 Thread Paul Berry
On 17 September 2013 16:21, Nicholas Mack  wrote:

> ---
>  tests/all.tests|   1 +
>  .../glsl-1.50/execution/geometry/CMakeLists.gl.txt |   1 +
>  ...ometry-end-primitive-optional-with-points-out.c | 161
> +
>  3 files changed, 163 insertions(+)
>  create mode 100644
> tests/spec/glsl-1.50/execution/geometry/geometry-end-primitive-optional-with-points-out.c
>

Reviewed-by: Paul Berry 


>
> diff --git a/tests/all.tests b/tests/all.tests
> index 7057134..708e94f 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -950,6 +950,7 @@ for draw in ['', 'indexed']:
>   'core {0} {1}').format(draw, prim))
>  spec['glsl-1.50']['built-in constants'] =
> concurrent_test('built-in-constants
> tests/spec/glsl-1.50/minimum-maximums.txt')
>  spec['glsl-1.50']['gs-emits-too-few-verts'] =
> concurrent_test('glsl-1.50-gs-emits-too-few-verts')
> +spec['glsl-1.50']['gs-end-primitive-optional-with-points-out'] =
> concurrent_test('glsl-1.50-geometry-end-primitive-optional-with-points-out')
>  spec['glsl-1.50']['getshaderiv-may-return-GS'] =
> concurrent_test('glsl-1.50-getshaderiv-may-return-GS')
>  spec['glsl-1.50']['query-gs-prim-types'] =
> concurrent_test('glsl-1.50-query-gs-prim-types')
>
> diff --git a/tests/spec/glsl-1.50/execution/geometry/CMakeLists.gl.txt
> b/tests/spec/glsl-1.50/execution/geometry/CMakeLists.gl.txt
> index 3d2ed79..2557d4e 100644
> --- a/tests/spec/glsl-1.50/execution/geometry/CMakeLists.gl.txt
> +++ b/tests/spec/glsl-1.50/execution/geometry/CMakeLists.gl.txt
> @@ -11,6 +11,7 @@ ${OPENGL_glu_LIBRARY}
>  )
>
>  piglit_add_executable (glsl-1.50-geometry-end-primitive end-primitive.c)
> +piglit_add_executable
> (glsl-1.50-geometry-end-primitive-optional-with-points-out
> geometry-end-primitive-optional-with-points-out.c)
>  piglit_add_executable (glsl-1.50-geometry-primitive-id-restart
> primitive-id-restart.c)
>  piglit_add_executable (glsl-1.50-geometry-primitive-types
> primitive-types.c)
>  piglit_add_executable (glsl-1.50-gs-emits-too-few-verts
> gs-emits-too-few-verts.c)
> diff --git
> a/tests/spec/glsl-1.50/execution/geometry/geometry-end-primitive-optional-with-points-out.c
> b/tests/spec/glsl-1.50/execution/geometry/geometry-end-primitive-optional-with-points-out.c
> new file mode 100644
> index 000..d6c4b44
> --- /dev/null
> +++
> b/tests/spec/glsl-1.50/execution/geometry/geometry-end-primitive-optional-with-points-out.c
> @@ -0,0 +1,161 @@
> +/**
> + * Copyright © 2013 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the
> next
> + * paragraph) shall be included in all copies or substantial portions of
> the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +/**
> + * Test that when the GS output layout is "points" EndPrimitive() is
> optional.
> + *
> + * From the GLSL 1.50 spec, section 8.10 (Geometry Shader Functions):
> + *
> + * "If the output layout is declared to be “points”, calling
> EndPrimitive()
> + *  is optional."
> + */
> +
> +#include "piglit-util-gl-common.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +   config.supports_gl_compat_version = 32;
> +config.supports_gl_core_version = 32;
> +
> +   config.window_visual = PIGLIT_GL_VISUAL_RGB |
> PIGLIT_GL_VISUAL_DOUBLE;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +static const char *vstext =
> +   "#version 150\n"
> +   "in vec3 vertex;\n"
> +   "out vec3 pos;\n"
> +   "void main() {\n"
> +   "   gl_Position = vec4(vertex, 1.);\n"
> +   "   pos = vertex;\n"
> +   "}\n";
> +
> +static const char *gstext =
> +   "#version 150\n"
> +   "layout(triangles) in;\n"
> +   "layout(points, max_vertices = 3) out;\n"
> +   "in vec3 pos[];\n"
> +   "void main() {\n"
> +   "   for(int i = 0; i < 3; i++) {\n"
> +   "   gl_Position = vec4(pos[i], 1.);\n"
> +   "   EmitVertex();\n"
> +   "   }\n"
> +   "}\n";
> +
> +static const c

Re: [Piglit] [PATCH 1/3 v2] GS: Test that geometry ins/outs can have flat/smooth/noperspective qualifiers

2013-10-07 Thread Paul Berry
On 17 September 2013 14:03, Nicholas Mack  wrote:

> v2: Modify test to also test for correct interpolation of data being passed
> ---
>  .../gs-also-uses-smooth-flat-noperspective.geom| 25 ++
>  ...also-uses-smooth-flat-noperspective.shader_test | 95
> ++
>  2 files changed, 120 insertions(+)
>  create mode 100644
> tests/spec/glsl-1.50/compiler/gs-also-uses-smooth-flat-noperspective.geom
>  create mode 100644
> tests/spec/glsl-1.50/execution/gs-also-uses-smooth-flat-noperspective.shader_test
>

Thanks!

Reviewed-by: Paul Berry 


>
> diff --git
> a/tests/spec/glsl-1.50/compiler/gs-also-uses-smooth-flat-noperspective.geom
> b/tests/spec/glsl-1.50/compiler/gs-also-uses-smooth-flat-noperspective.geom
> new file mode 100644
> index 000..f1ab41e
> --- /dev/null
> +++
> b/tests/spec/glsl-1.50/compiler/gs-also-uses-smooth-flat-noperspective.geom
> @@ -0,0 +1,25 @@
> +// [config]
> +// expect_result: pass
> +// glsl_version: 1.50
> +// check_link: true
> +// [end config]
> +
> +#version 150
> +
> +layout(points) in;
> +layout(points, max_vertices = 1) out;
> +
> +flat in int a[];
> +noperspective in int b[];
> +smooth in int c[];
> +
> +flat out int aa;
> +noperspective out int bb;
> +smooth out int cc;
> +
> +void main()
> +{
> +   aa = a[0];
> +   bb = b[0];
> +   cc = c[0];
> +}
> diff --git
> a/tests/spec/glsl-1.50/execution/gs-also-uses-smooth-flat-noperspective.shader_test
> b/tests/spec/glsl-1.50/execution/gs-also-uses-smooth-flat-noperspective.shader_test
> new file mode 100644
> index 000..fcc1081
> --- /dev/null
> +++
> b/tests/spec/glsl-1.50/execution/gs-also-uses-smooth-flat-noperspective.shader_test
> @@ -0,0 +1,95 @@
> +# Test that the qualifiers 'smooth', 'flat', and 'noperspective' can
> appear on
> +#  geometry shader ins and outs.
> +#
> +# From the GLSL 1.50 specification, section 4.3 ("Storage Qualifiers"):
> +#
> +# "Outputs from shader (out) and inputs to a shader (in) can be further
> +#  qualified with one of these interpolation qualifiers:
> +#  smooth
> +#  flat
> +#  noperspective"
> +
> +[require]
> +GL >= 3.2
> +GLSL >= 1.50
> +
> +[vertex shader]
> +
> +uniform mat4 mvp;
> +
> +in vec4 vertex;
> +in vec3 input_data;
> +
> +out vec4 pos;
> +flat out float a;
> +smooth out float b;
> +noperspective out float c;
> +
> +void main()
> +{
> +   gl_Position = vertex * mvp;
> +   pos = vertex * mvp;
> +   a = input_data.r;
> +   b = input_data.g;
> +   c = input_data.b;
> +}
> +
> +[geometry shader]
> +
> +layout(triangles) in;
> +layout(triangle_strip, max_vertices = 3) out;
> +
> +in vec4 pos[];
> +flat in float a[];
> +smooth in float b[];
> +noperspective in float c[];
> +
> +flat out float aa;
> +smooth out float bb;
> +noperspective out float cc;
> +
> +void main()
> +{
> +   for(int i = 0; i < 3; i++) {
> +   gl_Position = pos[i];
> +   aa = a[i];
> +   bb = b[i];
> +   cc = c[i];
> +   EmitVertex();
> +   }
> +}
> +
> +[fragment shader]
> +
> +flat in float aa;
> +smooth in float bb;
> +noperspective in float cc;
> +
> +out vec4 color;
> +
> +void main()
> +{
> +   color = vec4(aa, bb, cc, 1.0);
> +}
> +
> +[vertex data]
> +vertex/float/3  input_data/float/3
> + 0.0  6.0 -2.0  0.25 1.0 0.0
> +-3.0 -3.0 -1.0  0.50 0.0 0.0
> + 9.0 -9.0 -3.0  0.75 0.0 1.0
> +
> +[test]
> +uniform mat4 mvp 1 0 0 0 0 1 0 0 0 0 -2 -1 0 0 -3 0
> +clear color 0.0 0.0 0.0 0.0
> +clear
> +draw arrays GL_TRIANGLE_FAN 0 3
> +relative probe rgba (0., 0.) (0.75,
> 0.1667, 0., 1.0)
> +relative probe rgba (0.636363636364, 0.181818181818) (0.75,
> 0.1667, 0.545454545455, 1.0)
> +relative probe rgba (0.769230769231, 0.153846153846) (0.75,
> 0.1667, 0.692307692308, 1.0)
> +relative probe rgba (0.8667, 0.1333) (0.75,
> 0.1667, 0.8,1.0)
> +relative probe rgba (0.5,0.4   ) (0.75,
> 0., 0.3,1.0)
> +relative probe rgba (0.6667, 0.) (0.75,
> 0., 0.5,1.0)
> +relative probe rgba (0.785714285714, 0.285714285714) (0.75,
> 0., 0.642857142857, 1.0)
> +relative probe rgba (0.545454545455, 0.545454545455) (0.75, 0.5,
>0.272727272727, 1.0)
> +relative probe rgba (0.692307692308, 0.461538461538) (0.75, 0.5,
>0.461538461538, 1.0)
> +relative probe rgba (0.5833, 0.6667) (0.75,
> 0.6667, 0.25,   1.0)
> --
> 1.8.3.1
>
> ___
> Piglit mailing list
> Piglit@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH] gl3.2/glsl1.50: test that uniform variables in a named uniform block cannot be accessed or modified by glUniform* commands

2013-10-07 Thread Paul Berry
On 17 September 2013 09:42, Steve Miller  wrote:

> Section 2.11.4 (Uniform Variables) of the GL 3.2 spec says:
>  "Uniforms in a named uniform block are not assigned a location and may
>   not be modified using the Uniform* commands."
>

Thanks, Steve.  I've made some minor corrections and pushed the patch with
my reviewed-by.


> ---
>  tests/all.tests|   1 +
>  tests/spec/glsl-1.50/execution/CMakeLists.gl.txt   |   1 +
>  .../glsl-1.50/execution/vs-named-block-no-modify.c | 152
> +
>  3 files changed, 154 insertions(+)
>  create mode 100644
> tests/spec/glsl-1.50/execution/vs-named-block-no-modify.c
>
> diff --git a/tests/all.tests b/tests/all.tests
> index 7057134..51671b5 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -942,6 +942,7 @@ add_shader_test_dir(spec['glsl-1.50'],
> recursive=True)
>  spec['glsl-1.50']['execution']['get-active-attrib-array'] =
> concurrent_test('glsl-1.50-get-active-attrib-array')
>  spec['glsl-1.50']['execution']['vs-input-arrays'] =
> concurrent_test('glsl-1.50-vs-input-arrays')
> +spec['glsl-1.50']['execution']['vs-named-block-no-modify'] =
> concurrent_test('vs-named-block-no-modify')
>  for draw in ['', 'indexed']:
>  for prim in ['GL_LINES_ADJACENCY', 'GL_LINE_STRIP_ADJACENCY',
>   'GL_TRIANGLES_ADJACENCY', 'GL_TRIANGLE_STRIP_ADJACENCY']:
> diff --git a/tests/spec/glsl-1.50/execution/CMakeLists.gl.txt
> b/tests/spec/glsl-1.50/execution/CMakeLists.gl.txt
> index 67a5e00..693f69a 100644
> --- a/tests/spec/glsl-1.50/execution/CMakeLists.gl.txt
> +++ b/tests/spec/glsl-1.50/execution/CMakeLists.gl.txt
> @@ -12,3 +12,4 @@ ${OPENGL_glu_LIBRARY}
>
>  piglit_add_executable (glsl-1.50-vs-input-arrays vs-input-arrays.c)
>  piglit_add_executable (glsl-1.50-get-active-attrib-array
> get-active-attrib-array.c)
> +piglit_add_executable (glsl-1.50-vs-named-block-no-modify
> vs-named-block-no-modify.c)
> diff --git a/tests/spec/glsl-1.50/execution/vs-named-block-no-modify.c
> b/tests/spec/glsl-1.50/execution/vs-named-block-no-modify.c
> new file mode 100644
> index 000..f25cfd0
> --- /dev/null
> +++ b/tests/spec/glsl-1.50/execution/vs-named-block-no-modify.c
> @@ -0,0 +1,152 @@
> +/*
> + * Copyright © 2013 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the
> next
> + * paragraph) shall be included in all copies or substantial portions of
> the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +
> +/**
> + * \file named-block-no-modify.c
> + *
> + * Test that uniform variables containted within a named uniform block
> cannot be
> + * accessed by the glUniform* commands.
> + *
> + * Section 2.11.4 (Uniform Variables) of the GL 3.2 spec says:
> + *  "Uniforms in a named uniform block are not assigned a location and may
> + *   not be modified using the Uniform* commands."
> + *
> + * Test relies on the behavior of glGetUniform returning -1 for uniforms
> + * that have not been assigned a location, such as those in a named
> uniform
> + * block.
> +*/
> +
> +#include "piglit-util-gl-common.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +   config.supports_gl_core_version = 32;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +/* the operations in this shader are not strictly relevant, only that they
> + * do not get discarded */
> +static const char vs_text[] =
> +   "#version 150\n"
> +   "\n"
> +   "in vec4 piglit_vertex;\n"
> +   "\n"
> +   "uniform testBlock {\n"
> +   "   int a;\n"
> +   "   float b;\n"
> +   "   mat4 c;\n"
> +   "};\n"
> +   "\n"
> +   "flat out int oa;\n"
> +   "out float ob;\n"
> +   "out mat4 oc;\n"
> +   "\n"
> +   "void main() {\n"
> +   "   gl_Position = piglit_vertex;\n"
> +   "   oa = a + 1;\n"
> +   "   ob = b * 2;\n"
> +   "   oc[0] = c[0] * 1;\n"
> +   "   oc[1] = c[1] * 2;\n"
> +   "   oc[2] = c[2] * 3;\n"
> +   "   oc[3] 

Re: [Piglit] [PATCH 3/4] util: Add a -list-subtests option that will list all the subtests

2013-10-07 Thread Chad Versace

On 10/04/2013 06:11 PM, Ian Romanick wrote:

From: Ian Romanick 

This required some ugly hacking about to get the list of subtests to
process_args.  Suggestions?


Let's avoid these ugly hacks. Here's my suggestion, which covers patches 2 and 
3.

Patch 2/4 moves `struct piglit_gl_test_config config` out of main() to
file scope. Let's avoid making things global; that leads to a slippery
slope. I fought hard to kill many of Piglit's globals, and I don't welcome
the arrival of new ones. If at all possible, let's leave it in main() where it 
is.

To leave 'config' in main(), we need to restructure a few things. First,
piglit_gl_test_config_init() should no longer parse args; instead, it should 
only
memset 'config' to 0. That is, let's change its signature from

void piglit_gl_test_config_init(int *argc, char *argv[], struct 
piglit_gl_test_config *config)

to

void piglit_gl_test_config_init(struct piglit_gl_test_config *config)

Move the argparsing (that is, the call to process_args()) into 
piglit_gl_test_run(). That will ensure
that args are parsed *after* the test author has set all config variables in 
the CONFIG block.

The CONFIG block in your patch 4/4 should now look like this:

PIGLIT_GL_TEST_CONFIG_BEGIN

config.subtests = subtests;
config.supports_gl_compat_version = 10;
config.window_visual = PIGLIT_GL_VISUAL_RGB;

PIGLIT_GL_TEST_CONFIG_END


The config is no longer defined with file-scope, so piglit_init() should 
execute subtests
like this:

result = piglit_run_subtests(PIGLIT_SKIP);

piglit_run_selected_subtests() should access `config->subtests` through the 
global
"test context object", piglit-framework-gl.c:`struct piglit_gl_framework 
*gl_fw`,
like this:

enum piglit_result
piglit_run_selected_subtests(enum piglit_result previous_result)
{
enum piglit_result result = previous_result;
const struct piglit_gl_subtest *subtests 
gl_fw->config->subtests;
const char **selected_subtests = 
gl_fw->config->selected_subtests;

...
}


At this point, it's no longer necessary for the subtests array to be global,
so you could even do the below if you wanted, but that's really up to personal
taste.

PIGLIT_GL_TEST_CONFIG_BEGIN

config.supports_gl_compat_version = 10;
config.window_visual = PIGLIT_GL_VISUAL_RGB;

config.subtests = {
{
"Cannot delete while active",
"delete-inactive-only",
delete_inactive_only
},
...,
};

PIGLIT_GL_TEST_CONFIG_END


___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH 2/4] util: Add common framework for command-line invoked subtests

2013-10-07 Thread Chad Versace

On 10/04/2013 06:10 PM, Ian Romanick wrote:

From: Ian Romanick 

There are two parts to this.

First, command line options of the form "-subtest foo" have their
argument (the "foo" part) stored in a list in the
piglit_gl_test_config.  Tests can use this functionality without having
to use any of the other parts.  This allows every piglit test to have
the same syntax for specifying which subtests to run.

Second, tests can create a list of piglit_gl_subtest structures.  Each
structure describes a single subtest:  the name (as it will apear in the
log), the command-line name (as supplied to -subtest), and the function
that implements the test.  Helper function use this table and the list
of tests specified by -subtest options to run a group of tests.

The next patch shows an example of using this functionality.

Signed-off-by: Ian Romanick 
---
  tests/util/piglit-framework-gl.c | 96 ++--
  tests/util/piglit-framework-gl.h | 36 ++-
  2 files changed, 127 insertions(+), 5 deletions(-)

diff --git a/tests/util/piglit-framework-gl.c b/tests/util/piglit-framework-gl.c
index 2a315be..975c1a9 100644
--- a/tests/util/piglit-framework-gl.c
+++ b/tests/util/piglit-framework-gl.c
@@ -40,7 +40,8 @@ int piglit_width;
  int piglit_height;

  static void
-process_args(int *argc, char *argv[], unsigned *force_samples);
+process_args(int *argc, char *argv[], unsigned *force_samples,
+struct piglit_gl_test_config *config);

  void
  piglit_gl_test_config_init(int *argc, char *argv[],
@@ -50,7 +51,7 @@ piglit_gl_test_config_init(int *argc, char *argv[],

memset(config, 0, sizeof(*config));

-   process_args(argc, argv, &force_samples);
+   process_args(argc, argv, &force_samples, config);

if (force_samples > 1)
config->window_samples = force_samples;
@@ -72,7 +73,8 @@ delete_arg(char *argv[], int argc, int arg)
   * length is returned in @a argc.
   */
  static void
-process_args(int *argc, char *argv[], unsigned *force_samples)
+process_args(int *argc, char *argv[], unsigned *force_samples,
+struct piglit_gl_test_config *config)
  {
int j;

@@ -120,6 +122,33 @@ process_args(int *argc, char *argv[], unsigned 
*force_samples)
*force_samples = atoi(argv[j]+9);
delete_arg(argv, *argc, j--);
*argc -= 1;
+   } else if (!strcmp(argv[j], "-subtest")) {
+   int i;
+
+   j++;
+   if (j >= *argc) {
+   fprintf(stderr,
+   "-subtest requires an argument\n");
+   piglit_report_result(PIGLIT_FAIL);
+   }
+
+   config->selected_subtests =
+   realloc(config->selected_subtests,
+   sizeof(char *)
+   * (config->num_selected_subtests + 1));
+   
config->selected_subtests[config->num_selected_subtests] =
+   argv[j];
+
+   config->num_selected_subtests++;
+
+   /* Remove 2 arguments (hence the 'i - 2') from the
+* command line.
+*/
+   for (i = j + 1; i < *argc; i++) {
+   argv[i - 2] = argv[i];
+   }
+   *argc -= 2;
+   j -= 2;
}
}
  }
@@ -219,3 +248,64 @@ piglit_destroy_dma_buf(struct piglit_dma_buf *buf)
if (gl_fw->destroy_dma_buf)
gl_fw->destroy_dma_buf(buf);
  }
+
+const struct piglit_gl_subtest *
+piglit_find_subtest(const struct piglit_gl_subtest *subtests, const char *name)
+{
+   unsigned i;
+
+   for (i = 0; subtests[i].subtest != NULL; i++) {
+   if (strcmp(subtests[i].option, name) == 0)
+   return &subtests[i];
+   }
+
+   return NULL;
+}
+
+enum piglit_result
+piglit_run_selected_subtests(const struct piglit_gl_subtest *all_subtests,
+const char **selected_subtests,
+size_t num_selected_subtests,
+enum piglit_result previous_result)
+{
+   enum piglit_result result = previous_result;
+
+   if (num_selected_subtests) {
+   unsigned i;
+
+   for (i = 0; i < num_selected_subtests; i++) {
+   enum piglit_result subtest_result;
+   const char *const name = selected_subtests[i];
+   const struct piglit_gl_subtest *subtest =
+   piglit_find_subtest(all_subtests, name);
+
+   if (subtest == NULL) {
+   fprintf(stderr,
+   "Unknown 

Re: [Piglit] [PATCH 1/4] util: Add utility function to accumulate results of subtests

2013-10-07 Thread Chad Versace

On 10/07/2013 09:02 AM, Eric Anholt wrote:

Ian Romanick  writes:


From: Ian Romanick 


This looks a lot like piglit_merge_result.


Agreed. Let's re-use piglit_merge_result().

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH 1/4] util: Add utility function to accumulate results of subtests

2013-10-07 Thread Eric Anholt
Ian Romanick  writes:

> From: Ian Romanick 

This looks a lot like piglit_merge_result.


pgpcE5xiQ7TU_.pgp
Description: PGP signature
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH 5/5] arb_texture_query_levels: add execution tests

2013-10-07 Thread Ian Romanick
On 10/04/2013 10:04 PM, Matt Turner wrote:
> On Fri, Oct 4, 2013 at 9:08 PM, Chris Forbes  wrote:
>> Ensure that the returned level count is correct in various situations.
>>
>> Signed-off-by: Chris Forbes 
>> ---
>>  .../execution/fs-baselevel.shader_test | 40 +++
>>  .../execution/fs-maxlevel.shader_test  | 40 +++
>>  .../execution/fs-miptree.shader_test   | 39 +++
>>  .../execution/fs-nomips.shader_test| 39 +++
>>  .../execution/vs-baselevel.shader_test | 44 
>> +
>>  .../execution/vs-maxlevel.shader_test  | 45 
>> ++
>>  .../execution/vs-miptree.shader_test   | 43 
>> +
>>  .../execution/vs-nomips.shader_test| 43 
>> +
>>  8 files changed, 333 insertions(+)
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/fs-baselevel.shader_test
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/fs-maxlevel.shader_test
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/fs-miptree.shader_test
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/fs-nomips.shader_test
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/vs-baselevel.shader_test
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/vs-maxlevel.shader_test
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/vs-miptree.shader_test
>>  create mode 100644 
>> tests/spec/arb_texture_query_levels/execution/vs-nomips.shader_test
>>
>> diff --git 
>> a/tests/spec/arb_texture_query_levels/execution/fs-baselevel.shader_test 
>> b/tests/spec/arb_texture_query_levels/execution/fs-baselevel.shader_test
>> new file mode 100644
>> index 000..0dfee0c
>> --- /dev/null
>> +++ b/tests/spec/arb_texture_query_levels/execution/fs-baselevel.shader_test
>> @@ -0,0 +1,40 @@
>> +[require]
>> +GLSL >= 1.30
>> +GL_ARB_texture_query_levels
>> +
>> +[vertex shader]
>> +in vec4 vertex;
>> +
>> +void main() {
>> +gl_Position = vertex;
>> +}
> 
> Use [vertex shader passthrough] instead?

+1

> I guess we don't have any tests for 3D, cube, or shadow textures
> because shader runner doesn't support them? I'm kind of iffy about
> whether it's worth having execution tests for them too.

I think I'd rather see a geometry shader test than tests for other
sampler types.

> Regardless, the series is
> 
> Reviewed-by: Matt Turner 
> ___
> Piglit mailing list
> Piglit@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH V9] KHR_debug: test ObjectLabel(), GetObjectLabel(), ObjectPtrLabel() and GetObjectPtrLabel()

2013-10-07 Thread Eric Anholt
I've pushed the test now.  I made some trivial fixes on the way:
whitespace consistency, but also fixing duplication of the extension
name in the summary results.

Thanks for all your work on this!

diff --git a/tests1   /all.tests b/tests/all.tests
index 3e5e1a3..cec532a 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1319,7 +1319,7 @@ add_plain_test(arb_debug_output, 
'arb_debug_output-api_error')
 # Group KHR_debug
 khr_debug = Group()
 spec['KHR_debug'] = khr_debug
-add_plain_test(khr_debug, 'khr_debug-object-label')
+khr_debug['object-label'] = concurrent_test('khr_debug-object-label')
 
 # Group ARB_occlusion_query2
 arb_occlusion_query2 = Group()
diff --git a/tests/spec/khr_debug/debug-object-label.c 
b/tests/spec/khr_debug/debug-object-label.c
index 6905619..2fabebd 100644
--- a/tests/spec/khr_debug/debug-object-label.c
+++ b/tests/spec/khr_debug/debug-object-label.c
@@ -73,7 +73,7 @@ test_object_ptr_label()
 
if (!piglit_check_gl_error(GL_INVALID_VALUE)) {
fprintf(stderr, "GL_INVALID_VALUE should be generated when 
ObjectPtrLabel()"
-   " ptr is not the name of a sync object\n");
+   " ptr is not the name of a sync object\n");
pass = false;
}
 
@@ -282,7 +282,7 @@ test_object_label()
GLchar label[TestLabelLen + 1];
GLchar *bigLabel;
bool pass = true;
-int maximumLabelLengthTest = 1024; /* Be defensive about the size 
label length test to avoid memory issues */
+   int maximumLabelLengthTest = 1024; /* Be defensive about the size label 
length test to avoid memory issues */
 
puts("Test ObjectLabel");
 
@@ -320,7 +320,7 @@ test_object_label()
}
else {
printf("MAX_LABEL_LENGTH test skipped as implementations 
MAX_LABEL_LENGTH=%i and max piglit test length=%i\n",
-   maxLabelLength, maximumLabelLengthTest);
+  maxLabelLength, maximumLabelLengthTest);
}
 
/* If  is NULL, any debug label is effectively removed from the 
object.


pgpD3ES6VwnFW.pgp
Description: PGP signature
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


Re: [Piglit] [PATCH 4/5] arb_texture_query_levels: add compiler tests for textureQueryLevels()

2013-10-07 Thread Ian Romanick
On 10/04/2013 09:08 PM, Chris Forbes wrote:
> diff --git 
> a/tests/spec/arb_texture_query_levels/compiler/builtin-functions-float-samplers.frag
>  
> b/tests/spec/arb_texture_query_levels/compiler/builtin-functions-float-samplers.frag
> new file mode 100644
> index 000..d6a19ba
> --- /dev/null
> +++ 
> b/tests/spec/arb_texture_query_levels/compiler/builtin-functions-float-samplers.frag
> @@ -0,0 +1,46 @@
> +// [config]
> +// expect_result: pass
> +// glsl_version: 1.30
> +// require_extensions: GL_ARB_texture_query_levels 
> GL_ARB_texture_cube_map_array
> +// [end config]
> +
> +#version 130
> +#extension GL_ARB_texture_query_levels: require
> +#extension GL_ARB_texture_cube_map_array: require

Does all the hardware that supports one also support the other?  If not,
then we should split the GL_ARB_texture_cube_map_array tests out into
separate .frag and .vert files.

Also, we should all .geom versions for 1.50. :)  That should just be a
sed job.

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH 8/8] GL3.2 GL_ARB_sync: Test that the correct error messages are returned from invalid input for WaitSync

2013-10-07 Thread Nicholas Mack
v2: Fix comments, remove redundant code

v3: Add to all.tests
---
 tests/all.tests   |  1 +
 tests/spec/arb_sync/CMakeLists.gl.txt |  1 +
 tests/spec/arb_sync/WaitSync-errors.c | 82 +++
 3 files changed, 84 insertions(+)
 create mode 100644 tests/spec/arb_sync/WaitSync-errors.c

diff --git a/tests/all.tests b/tests/all.tests
index e56ae38..f4c0079 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1108,6 +1108,7 @@ arb_sync['IsSync'] = concurrent_test('arb_sync-IsSync')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
 arb_sync['sync-initialize'] = concurrent_test('arb_sync-sync-initialize')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
+arb_sync['WaitSync-errors'] = concurrent_test('arb_sync-WaitSync-errors')
 add_plain_test(arb_sync, 'sync_api')
 
 # Group ARB_ES2_compatibility
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index 9855d69..5385fa0 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -19,3 +19,4 @@ piglit_add_executable (arb_sync-is-sync IsSync.c)
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
 piglit_add_executable (arb_sync-sync-initialize sync-initialize.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
+piglit_add_executable (arb_sync-WaitSync-errors WaitSync-errors.c)
diff --git a/tests/spec/arb_sync/WaitSync-errors.c 
b/tests/spec/arb_sync/WaitSync-errors.c
new file mode 100644
index 000..a6f9976
--- /dev/null
+++ b/tests/spec/arb_sync/WaitSync-errors.c
@@ -0,0 +1,82 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * Test WaitSync() returns correct error codes
+ *
+ * Section 5.2.1(Waiting for Sync Objects) of OpenGL 3.2 Core says:
+ * "If sync is not the name of a sync object, an INVALID_VALUE error is
+ *  generated. If timeout is not TIMEOUT_IGNORED or flags is not zero, an
+ *  INVALID_VALUE error is generated."
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_compat_version = 10;
+config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsync a;
+   GLsync b = (GLsync)20;
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   a = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+
+   /* test that valid parameters passed results in NO_ERROR */
+   glWaitSync(a, 0, GL_TIMEOUT_IGNORED);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+   /* test that invalid sync results in INVALID_VALUE */
+   glWaitSync(b, 0, GL_TIMEOUT_IGNORED);
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+
+   /* test that invalid flag value results in INVALID_VALUE */
+   glWaitSync(a, 3, GL_TIMEOUT_IGNORED);
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+
+   /* test that invalid timeout value results in INVALID_VALUE */
+   glWaitSync(a, 0, 15);
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+
+   glDeleteSync(a);
+
+   piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
-- 
1.8.3.1

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH 7/8] GL3.2 GL_ARB_sync: Test that a sync object is initialized with the correct properties

2013-10-07 Thread Nicholas Mack
v2: Fix comments, add extra checks for length variable being modified

v3: Start some rendering to insure initialized values and add to all.tests
---
 tests/all.tests   |   1 +
 tests/spec/arb_sync/CMakeLists.gl.txt |   1 +
 tests/spec/arb_sync/sync-initialize.c | 134 ++
 3 files changed, 136 insertions(+)
 create mode 100644 tests/spec/arb_sync/sync-initialize.c

diff --git a/tests/all.tests b/tests/all.tests
index a842790..e56ae38 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1106,6 +1106,7 @@ arb_sync['FenceSync-errors'] = 
concurrent_test('arb_sync-FenceSync-errors')
 arb_sync['GetSynciv-errors'] = concurrent_test('arb_sync-GetSynciv-errors')
 arb_sync['IsSync'] = concurrent_test('arb_sync-IsSync')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
+arb_sync['sync-initialize'] = concurrent_test('arb_sync-sync-initialize')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
 add_plain_test(arb_sync, 'sync_api')
 
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index 038e0e1..9855d69 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -17,4 +17,5 @@ piglit_add_executable (arb_sync-fence-errors 
FenceSync-errors.c)
 piglit_add_executable (arb_sync-get-sync-errors GetSynciv-errors.c)
 piglit_add_executable (arb_sync-is-sync IsSync.c)
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
+piglit_add_executable (arb_sync-sync-initialize sync-initialize.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
diff --git a/tests/spec/arb_sync/sync-initialize.c 
b/tests/spec/arb_sync/sync-initialize.c
new file mode 100644
index 000..706db02
--- /dev/null
+++ b/tests/spec/arb_sync/sync-initialize.c
@@ -0,0 +1,134 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * \file
+ * Test that a sync is initialized correctly with FenceSync
+ *
+ * Section 5.2(Sync Objects and Fences) of OpenGL 3.2 Core says:
+ * "Table 5.1: Initial properties of a sync object created with FenceSync."
+ *
+ *  Property Name  Property Value
+ * --
+ *  OBJECT_TYPESYNC_FENCE
+ *  SYNC_CONDITION 
+ *  SYNC_STATUSUNSIGNALED
+ *  SYNC_FLAGS 
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_compat_version = 10;
+config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsizei length = -5;
+   GLint value;
+   GLsync sync;
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   /* Start some rendering that will not end before this test finishes
+* in order to make sure the fence sync is still set to initial values
+*/
+   piglit_draw_rect(-1, -1, 2, 2);
+
+   /* Create a new fence sync */
+   sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+
+   /* Test initialized as fence type */
+   glGetSynciv(sync, GL_OBJECT_TYPE, 1, &length, &value);
+   if(length != 1) {
+   printf("length should be 1 but incorrectly returned: %d\n",
+   length);
+   pass = false;
+   }
+   if(value != GL_SYNC_FENCE) {
+   printf("Expected GL_SYNC_FENCE but returned: %s\n",
+   piglit_get_gl_enum_name(value));
+   pass = false;
+   }
+
+   /* Test initialized to given condition */
+   length = -5;
+   glGetSynciv(sync, GL_SYNC_CONDITION, 1, &length, &value);
+   if(length != 1) {
+  

[Piglit] [PATCH 3/8] GL3.2 GL_ARB_sync: Basic test for DeleteSync

2013-10-07 Thread Nicholas Mack
v2: Fix comments, add test for passing invalid sync to IsSync(), change variable
types.

v3: Minor fixes and add to all.tests
---
 tests/all.tests   |  1 +
 tests/spec/arb_sync/CMakeLists.gl.txt |  1 +
 tests/spec/arb_sync/DeleteSync.c  | 78 +++
 3 files changed, 80 insertions(+)
 create mode 100644 tests/spec/arb_sync/DeleteSync.c

diff --git a/tests/all.tests b/tests/all.tests
index 0118cc9..1572088 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1101,6 +1101,7 @@ arb_sync = Group()
 spec['ARB_sync'] = arb_sync
 arb_sync['ClientWaitSync-errors'] = 
concurrent_test('arb_sync-ClientWaitSync-errors')
 arb_sync['ClientWaitSync-returns'] = 
concurrent_test('arb_sync-ClientWaitSync-returns')
+arb_sync['DeleteSync'] = concurrent_test('arb_sync-DeleteSync')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
 add_plain_test(arb_sync, 'sync_api')
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index ff8ca85..54637eb 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -12,5 +12,6 @@ link_libraries (
 
 piglit_add_executable (arb_sync-client-wait-errors ClientWaitSync-errors.c)
 piglit_add_executable (arb_sync-client-wait-returns ClientWaitSync-returns.c)
+piglit_add_executable (arb_sync-delete-sync DeleteSync.c)
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
diff --git a/tests/spec/arb_sync/DeleteSync.c b/tests/spec/arb_sync/DeleteSync.c
new file mode 100644
index 000..7e4be41
--- /dev/null
+++ b/tests/spec/arb_sync/DeleteSync.c
@@ -0,0 +1,78 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * \file
+ * Test DeleteSync() returns correct error messages
+ *
+ * Section 5.2(Sync Objects and Fences) on p243 of OpenGL 3.2 Core says:
+ * "DeleteSync will silently ignore a sync value of zero. An INVALID_VALUE
+ *  error is generated if sync is neither zero nor the name of a sync object."
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+   config.supports_gl_compat_version = 10;
+   config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsync sync;
+   GLsync invalid = (GLsync) GL_FRONT;
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   /* Test for successful function calls
+* DeleteSync will silently ignore a sync value of zero
+*/
+   glDeleteSync(0);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+   sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+   glDeleteSync(sync);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+   /* Check if sync was deleted */
+   pass = !glIsSync(sync) && pass;
+
+   /* Test for unsuccessful function calls */
+   glDeleteSync(invalid);
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+
+   piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
-- 
1.8.3.1

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH 4/8] GL3.2 GL_ARB_sync: Test for the correct error messages caused by invalid input to FenceSync

2013-10-07 Thread Nicholas Mack
v2: Fix comments, remove unnecessary tests.

v3: Added to all.tests

Reviewed-by: Chad Versace 
---
 tests/all.tests|  1 +
 tests/spec/arb_sync/CMakeLists.gl.txt  |  1 +
 tests/spec/arb_sync/FenceSync-errors.c | 72 ++
 3 files changed, 74 insertions(+)
 create mode 100644 tests/spec/arb_sync/FenceSync-errors.c

diff --git a/tests/all.tests b/tests/all.tests
index 1572088..d6fb319 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1102,6 +1102,7 @@ spec['ARB_sync'] = arb_sync
 arb_sync['ClientWaitSync-errors'] = 
concurrent_test('arb_sync-ClientWaitSync-errors')
 arb_sync['ClientWaitSync-returns'] = 
concurrent_test('arb_sync-ClientWaitSync-returns')
 arb_sync['DeleteSync'] = concurrent_test('arb_sync-DeleteSync')
+arb_sync['FenceSync-errors'] = concurrent_test('arb_sync-FenceSync-errors')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
 add_plain_test(arb_sync, 'sync_api')
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index 54637eb..bbeab54 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -13,5 +13,6 @@ link_libraries (
 piglit_add_executable (arb_sync-client-wait-errors ClientWaitSync-errors.c)
 piglit_add_executable (arb_sync-client-wait-returns ClientWaitSync-returns.c)
 piglit_add_executable (arb_sync-delete-sync DeleteSync.c)
+piglit_add_executable (arb_sync-fence-errors FenceSync-errors.c)
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
diff --git a/tests/spec/arb_sync/FenceSync-errors.c 
b/tests/spec/arb_sync/FenceSync-errors.c
new file mode 100644
index 000..ec33017
--- /dev/null
+++ b/tests/spec/arb_sync/FenceSync-errors.c
@@ -0,0 +1,72 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * \file
+ * Test FenceSync() returns correct error messages for invalid input
+ *
+ * Section 5.2(Sync Objects and Fences) of OpenGL 3.2 Core says:
+ * "An INVALID_ENUM error is generated if condition is not
+ *  SYNC_GPU_COMMANDS_COMPLETE. If flags is not zero, an INVALID_VALUE
+ *  error is generated."
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_compat_version = 10;
+config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsync a, b;
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   /* test that an invalid condition results in INVALID_ENUM */
+   a = glFenceSync(GL_NONE, 0);
+   pass = piglit_check_gl_error(GL_INVALID_ENUM) && pass;
+   glDeleteSync(a);
+
+   /* test that invalid flag value results in INVALID_VALUE */
+   b = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 1);
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+   glDeleteSync(b);
+
+   piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
-- 
1.8.3.1

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH 6/8] GL3.2 GL_ARB_sync: Test that IsSync returns true/false if it is given a valid/invalid sync object name

2013-10-07 Thread Nicholas Mack
v2: Fix comments, initialize variables

v3: Minor fixes and added to all.tests
---
 tests/all.tests   |  1 +
 tests/spec/arb_sync/CMakeLists.gl.txt |  1 +
 tests/spec/arb_sync/IsSync.c  | 83 +++
 3 files changed, 85 insertions(+)
 create mode 100644 tests/spec/arb_sync/IsSync.c

diff --git a/tests/all.tests b/tests/all.tests
index ee2c8df..a842790 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1104,6 +1104,7 @@ arb_sync['ClientWaitSync-returns'] = 
concurrent_test('arb_sync-ClientWaitSync-re
 arb_sync['DeleteSync'] = concurrent_test('arb_sync-DeleteSync')
 arb_sync['FenceSync-errors'] = concurrent_test('arb_sync-FenceSync-errors')
 arb_sync['GetSynciv-errors'] = concurrent_test('arb_sync-GetSynciv-errors')
+arb_sync['IsSync'] = concurrent_test('arb_sync-IsSync')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
 add_plain_test(arb_sync, 'sync_api')
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index b6840e1..038e0e1 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -15,5 +15,6 @@ piglit_add_executable (arb_sync-client-wait-returns 
ClientWaitSync-returns.c)
 piglit_add_executable (arb_sync-delete-sync DeleteSync.c)
 piglit_add_executable (arb_sync-fence-errors FenceSync-errors.c)
 piglit_add_executable (arb_sync-get-sync-errors GetSynciv-errors.c)
+piglit_add_executable (arb_sync-is-sync IsSync.c)
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
diff --git a/tests/spec/arb_sync/IsSync.c b/tests/spec/arb_sync/IsSync.c
new file mode 100644
index 000..1191d76
--- /dev/null
+++ b/tests/spec/arb_sync/IsSync.c
@@ -0,0 +1,83 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * \file
+ * Test IsSync()
+ *
+ * Section 6.1.7(Sync Object Queries) of OpenGL 3.2 Core says:
+ * "The command
+ * boolean IsSync( sync sync );
+ *  returns TRUE if sync is the name of a sync object. If sync is not the
+ *  name of a sync object, or if an error condition occurs, IsSync returns
+ *  FALSE (note that zero is not the name of a sync object)."
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+   config.supports_gl_compat_version = 10;
+   config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsync valid_sync;
+   GLsync invalid_sync = (GLsync)GL_BACK;
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   /* Create valid sync object */
+   valid_sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+
+   /* Check if a valid name returns true */
+   pass = glIsSync(valid_sync) && pass;
+
+   /* Check if invalid names return false
+* From the GL 3.2 Core specification:
+*  "If  is not the name of a sync object, or if an error
+*   condition occurs, IsSync returns FALSE (note that zero is not
+*   the name of a sync object)."
+*/
+   pass = !glIsSync(invalid_sync) && pass;
+
+   pass = !glIsSync(0) && pass;
+
+   glDeleteSync(valid_sync);
+
+   piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
-- 
1.8.3.1

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH 5/8] GL3.2 GL_ARB_sync: Test that GetSynciv sets correct error codes.

2013-10-07 Thread Nicholas Mack
v2: Fix comments, initialize variables

v3: Minor fixes and add to all.tests
---
 tests/all.tests|  1 +
 tests/spec/arb_sync/CMakeLists.gl.txt  |  1 +
 tests/spec/arb_sync/GetSynciv-errors.c | 91 ++
 3 files changed, 93 insertions(+)
 create mode 100644 tests/spec/arb_sync/GetSynciv-errors.c

diff --git a/tests/all.tests b/tests/all.tests
index d6fb319..ee2c8df 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1103,6 +1103,7 @@ arb_sync['ClientWaitSync-errors'] = 
concurrent_test('arb_sync-ClientWaitSync-err
 arb_sync['ClientWaitSync-returns'] = 
concurrent_test('arb_sync-ClientWaitSync-returns')
 arb_sync['DeleteSync'] = concurrent_test('arb_sync-DeleteSync')
 arb_sync['FenceSync-errors'] = concurrent_test('arb_sync-FenceSync-errors')
+arb_sync['GetSynciv-errors'] = concurrent_test('arb_sync-GetSynciv-errors')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
 add_plain_test(arb_sync, 'sync_api')
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index bbeab54..b6840e1 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -14,5 +14,6 @@ piglit_add_executable (arb_sync-client-wait-errors 
ClientWaitSync-errors.c)
 piglit_add_executable (arb_sync-client-wait-returns ClientWaitSync-returns.c)
 piglit_add_executable (arb_sync-delete-sync DeleteSync.c)
 piglit_add_executable (arb_sync-fence-errors FenceSync-errors.c)
+piglit_add_executable (arb_sync-get-sync-errors GetSynciv-errors.c)
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
diff --git a/tests/spec/arb_sync/GetSynciv-errors.c 
b/tests/spec/arb_sync/GetSynciv-errors.c
new file mode 100644
index 000..472c05e
--- /dev/null
+++ b/tests/spec/arb_sync/GetSynciv-errors.c
@@ -0,0 +1,91 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * \file
+ * Test GetSynciv() sets correct error codes
+ *
+ * Section 6.1.7(Sync Object Queries) of OpenGL 3.2 Core says:
+ *  (For GetSynciv) "If sync is not the name of a sync object, an INVALID_VALUE
+ *  error is generated. If pname is not one of the values described above, an
+ *  INVALID_ENUM error is generated."
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+   config.supports_gl_compat_version = 10;
+   config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsync valid_fence;
+   GLsync invalid_fence = (GLsync) 0x1373;
+
+   GLsizei len;
+   GLint val;
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   valid_fence = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+
+   /* test that invalid sync results in INVALID_VALUE */
+   glGetSynciv(invalid_fence, GL_SYNC_STATUS, 1, &len, &val);
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+
+   /* test valid pname values result in NO_ERROR */
+   glGetSynciv(valid_fence, GL_OBJECT_TYPE, 1, &len, &val);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+   glGetSynciv(valid_fence, GL_SYNC_STATUS, 1, &len, &val);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+   glGetSynciv(valid_fence, GL_SYNC_CONDITION, 1, &len, &val);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+   glGetSynciv(valid_fence, GL_SYNC_FLAGS, 1, &len, &val);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+   /* test that invalid pname results in INVALID_ENUM */
+   glGetSync

[Piglit] [PATCH 2/8] GL3.2 GL_ARB_sync: Test for valid return values from ClientWaitSync

2013-10-07 Thread Nicholas Mack
v2: Fix comments, initialize variables.  Still need to figure out if GPU 
commands
needed before testing these.

v3: Rewrite test cases, fix comment and config block and add to all.tests
---
 tests/all.tests  |   1 +
 tests/spec/arb_sync/CMakeLists.gl.txt|   3 +-
 tests/spec/arb_sync/ClientWaitSync-returns.c | 195 +++
 3 files changed, 198 insertions(+), 1 deletion(-)
 create mode 100644 tests/spec/arb_sync/ClientWaitSync-returns.c

diff --git a/tests/all.tests b/tests/all.tests
index 4aa77f4..0118cc9 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1100,6 +1100,7 @@ 
import_glsl_parser_tests(spec['ARB_shader_stencil_export'],
 arb_sync = Group()
 spec['ARB_sync'] = arb_sync
 arb_sync['ClientWaitSync-errors'] = 
concurrent_test('arb_sync-ClientWaitSync-errors')
+arb_sync['ClientWaitSync-returns'] = 
concurrent_test('arb_sync-ClientWaitSync-returns')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
 add_plain_test(arb_sync, 'sync_api')
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index 05f0972..ff8ca85 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -10,6 +10,7 @@ link_libraries (
${OPENGL_glu_LIBRARY}
 )
 
+piglit_add_executable (arb_sync-client-wait-errors ClientWaitSync-errors.c)
+piglit_add_executable (arb_sync-client-wait-returns ClientWaitSync-returns.c)
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
-piglit_add_executable (arb_sync-ClientWaitSync-errors ClientWaitSync-errors.c)
diff --git a/tests/spec/arb_sync/ClientWaitSync-returns.c 
b/tests/spec/arb_sync/ClientWaitSync-returns.c
new file mode 100644
index 000..e801e04
--- /dev/null
+++ b/tests/spec/arb_sync/ClientWaitSync-returns.c
@@ -0,0 +1,195 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * \file
+ * Test ClientWaitSync() returns correct values
+ *
+ *
+ * Section 5.2.1(Waiting for Sync Objects) of OpenGL 3.2 Core says:
+ * "ClientWaitSync returns one of four status values. A return value of
+ *  ALREADY_SIGNALED indicates that sync was signaled at the time
+ *  ClientWaitSync was called. ALREADY_SIGNALED will always be
+ *  returned if sync was signaled, even if the value of timeout is
+ *  zero. A return value of TIMEOUT_EXPIRED indicates that the
+ *  specified timeout period expired before sync was signaled. A re-
+ *  turn value of CONDITION_SATISFIED indicates that sync was signaled
+ *  before the timeout expired. Finally, if an error occurs, in
+ *  addition to generating a GL error as specified below,
+ *  ClientWaitSync immediately returns WAIT_FAILED withoutblocking."
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+   config.supports_gl_compat_version = 10;
+   config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+/* One second in nanoseconds */
+#define ONE_SECOND 10
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsync fence1,  fence2,  fence3;
+   GLenum status1, status2, status3;
+   /* requires Posix clock API
+   timespec startTime, endTime;
+   int timeStatus = -1, seconds_elapsed = -1;
+   */
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   /* Test Case 1: Verify that fence times out correctly after set time */
+
+   /* queue a draw command */
+   piglit_draw_rect(-1, -1, 2, 2);
+
+   /* create fence sync */
+   fence1 = glFe

[Piglit] [PATCH 1/8] GL3.2 GL_ARB_sync: Test to check the correct error messages are returned for invalid inputs for ClientWaitSync

2013-10-07 Thread Nicholas Mack
v2: Fix comments, initialize variables, rewrite loop through all bit masks

v3: Remove redundant code, minor fixes, and add to all.tests
---
 tests/all.tests |  1 +
 tests/spec/arb_sync/CMakeLists.gl.txt   |  1 +
 tests/spec/arb_sync/ClientWaitSync-errors.c | 96 +
 3 files changed, 98 insertions(+)
 create mode 100644 tests/spec/arb_sync/ClientWaitSync-errors.c

diff --git a/tests/all.tests b/tests/all.tests
index c45f1cb..4aa77f4 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -1099,6 +1099,7 @@ 
import_glsl_parser_tests(spec['ARB_shader_stencil_export'],
 # Group ARB_sync
 arb_sync = Group()
 spec['ARB_sync'] = arb_sync
+arb_sync['ClientWaitSync-errors'] = 
concurrent_test('arb_sync-ClientWaitSync-errors')
 arb_sync['repeat-wait'] = concurrent_test('arb_sync-repeat-wait')
 arb_sync['timeout-zero'] = concurrent_test('arb_sync-timeout-zero')
 add_plain_test(arb_sync, 'sync_api')
diff --git a/tests/spec/arb_sync/CMakeLists.gl.txt 
b/tests/spec/arb_sync/CMakeLists.gl.txt
index dd4cf35..05f0972 100644
--- a/tests/spec/arb_sync/CMakeLists.gl.txt
+++ b/tests/spec/arb_sync/CMakeLists.gl.txt
@@ -12,3 +12,4 @@ link_libraries (
 
 piglit_add_executable (arb_sync-repeat-wait repeat-wait.c)
 piglit_add_executable (arb_sync-timeout-zero timeout-zero.c)
+piglit_add_executable (arb_sync-ClientWaitSync-errors ClientWaitSync-errors.c)
diff --git a/tests/spec/arb_sync/ClientWaitSync-errors.c 
b/tests/spec/arb_sync/ClientWaitSync-errors.c
new file mode 100644
index 000..2f75fbf
--- /dev/null
+++ b/tests/spec/arb_sync/ClientWaitSync-errors.c
@@ -0,0 +1,96 @@
+/**
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * \file
+ * Test ClientWaitSync() returns correct error messages for invalid input
+ *
+ *
+ * Section 5.2.1(Waiting for Sync Objects) of OpenGL 3.2 Core says:
+ * "If  is not the name of a sync object, an INVALID_VALUE error
+ *  is generated. If  contains any bits other than
+ *  SYNC_FLUSH_COMMANDS_BIT, an INVALID_VALUE error is generated."
+ *
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+config.supports_gl_compat_version = 10;
+config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+enum piglit_result
+piglit_display(void)
+{
+   /* UNREACHED */
+   return PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+   bool pass = true;
+   GLsync a = (GLsync)0xDEADBEEF;
+   GLenum status;
+   int i;
+
+   if (piglit_get_gl_version() < 32) {
+   piglit_require_extension("GL_ARB_sync");
+   }
+
+   /* sync not set up yet so this should fail with both GL error and
+* respond GL_WAIT_FAILED
+*/
+   status = glClientWaitSync(a, GL_SYNC_FLUSH_COMMANDS_BIT, 0);
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+   if (status != GL_WAIT_FAILED) {
+   printf("Expected GL_WAIT_FAILED but returned: %s\n",
+   piglit_get_gl_enum_name(status));
+   pass = false;
+   }
+
+   a = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+
+   /* test that valid sync results in NO_ERROR */
+   status = glClientWaitSync(a, GL_SYNC_FLUSH_COMMANDS_BIT, 0);
+   pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+   /* test that invalid flag value results in INVALID_VALUE */
+   for (i = 0; i < sizeof(GLbitfield) * 8; i++) {
+   GLbitfield mask = 1 << i;
+   /* Skip over the valid bit */
+   if (mask == GL_SYNC_FLUSH_COMMANDS_BIT) {
+   continue;
+   }
+   status = glClientWaitSync(a, mask, 0);
+   if(status != GL_WAIT_FAILED) pass = false;
+   pass = piglit_check_gl_error(GL_INVALID_VALUE) && pass;
+   }
+
+   glDeleteSync(a);
+
+   piglit_repor

Re: [Piglit] [PATCH 1/5] shader_runner: add ability to specify GL_TEXTURE_BASE_LEVEL

2013-10-07 Thread Ian Romanick
Oof.  I think we made a mistake when we first started adding the
glTexParameter values.  I'd rather see a table-based approach somewhat
like 7ec46686.  It would be slightly more tricky for glTexParameter
because some parameters want to be integer, and some want to be float.
Maybe use a table like

struct TexParameter_target_table {
const char *name;
GLenum pname;

enum {
is_float,
is_int
} type;

unsigned value_count; // number of values passed to glTexParameter?v
};

We could put the existing names in the table with both the existing
spelling and the GL_... spelling.

I don't think we need to keep the #ifdef around the LOD bias, but we may
need an '#ifndef  #define...' block.  The implementation will
generate an error, so anyone using lod_bias will know the test is broken
anyway... the error just won't be as friendly.

On 10/04/2013 09:08 PM, Chris Forbes wrote:
> Signed-off-by: Chris Forbes 
> ---
>  tests/shaders/shader_runner.c | 5 +
>  1 file changed, 5 insertions(+)
> 
> diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
> index ba76cd0..ca571ec 100644
> --- a/tests/shaders/shader_runner.c
> +++ b/tests/shaders/shader_runner.c
> @@ -1585,6 +1585,11 @@ handle_texparameter(const char *line)
>   printf("lod_bias feature is only available in desktop GL\n");
>   piglit_report_result(PIGLIT_SKIP);
>  #endif
> + } else if (string_match("base_level ", line)) {
> + line += strlen("base_level ");
> + glTexParameteri(target, GL_TEXTURE_BASE_LEVEL,
> + strtol(line, NULL, 10));
> + return;
>   } else {
>   fprintf(stderr, "unknown texture parameter in `%s'\n", line);
>   piglit_report_result(PIGLIT_FAIL);
> 

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit