<div dir="ltr"><div>Acked-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 9, 2018 at 11:51 PM, Timothy Arceri <span dir="ltr"><<a href="mailto:tarceri@itsqueeze.com" target="_blank">tarceri@itsqueeze.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=78097" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/<wbr>show_bug.cgi?id=78097</a><br>
---<br>
tests/opengl.py | 2 +<br>
tests/spec/gl-3.0/CMakeLists.<wbr>gl.txt | 1 +<br>
tests/spec/gl-3.0/dlist-uint-<wbr>uniforms.c | 305 ++++++++++++++++++++++++<br>
3 files changed, 308 insertions(+)<br>
create mode 100644 tests/spec/gl-3.0/dlist-uint-<wbr>uniforms.c<br>
<br>
diff --git a/tests/opengl.py b/tests/opengl.py<br>
index 347e8c5d4..9c43d32c9 100644<br>
--- a/tests/opengl.py<br>
+++ b/tests/opengl.py<br>
@@ -899,6 +899,8 @@ with profile.test_list.group_<wbr>manager(<br>
g(['clearbuffer-invalid-<wbr>buffer'])<br>
g(['clearbuffer-mixed-format']<wbr>)<br>
g(['clearbuffer-stencil'])<br>
+ g(['gl-3.0-dlist-uint-<wbr>uniforms'],<br>
+ 'dlist-uint-uniforms')<br>
g(['genmipmap-errors'])<br>
g(['getfragdatalocation'])<br>
g(['integer-errors'])<br>
diff --git a/tests/spec/gl-3.0/<wbr>CMakeLists.gl.txt b/tests/spec/gl-3.0/<wbr>CMakeLists.gl.txt<br>
index 6e9635c9c..e9bcb3627 100644<br>
--- a/tests/spec/gl-3.0/<wbr>CMakeLists.gl.txt<br>
+++ b/tests/spec/gl-3.0/<wbr>CMakeLists.gl.txt<br>
@@ -9,6 +9,7 @@ link_libraries (<br>
)<br>
<br>
piglit_add_executable (gl-3.0-bound-resource-limits bound-resource-limits.c)<br>
+piglit_add_executable (gl-3.0-dlist-uint-uniforms dlist-uint-uniforms.c)<br>
piglit_add_executable (gl-3.0-multidrawarrays-<wbr>vertexid multidrawarrays-vertexid.c)<br>
piglit_add_executable (gl-3.0-minmax minmax.c)<br>
piglit_add_executable (gl-3.0-render-integer render-integer.c)<br>
diff --git a/tests/spec/gl-3.0/dlist-<wbr>uint-uniforms.c b/tests/spec/gl-3.0/dlist-<wbr>uint-uniforms.c<br>
new file mode 100644<br>
index 000000000..b1f52c98c<br>
--- /dev/null<br>
+++ b/tests/spec/gl-3.0/dlist-<wbr>uint-uniforms.c<br>
@@ -0,0 +1,305 @@<br>
+/*<br>
+ * Copyright © 2014 Intel Corporation<br>
+ *<br>
+ * Permission is hereby granted, free of charge, to any person obtaining a<br>
+ * copy of this software and associated documentation files (the "Software"),<br>
+ * to deal in the Software without restriction, including without limitation<br>
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,<br>
+ * and/or sell copies of the Software, and to permit persons to whom the<br>
+ * Software is furnished to do so, subject to the following conditions:<br>
+ *<br>
+ * The above copyright notice and this permission notice (including the next<br>
+ * paragraph) shall be included in all copies or substantial portions of the<br>
+ * Software.<br>
+ *<br>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br>
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br>
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL<br>
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br>
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING<br>
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS<br>
+ * IN THE SOFTWARE.<br>
+ */<br>
+<br>
+/**<br>
+ * Verify that unsigned glUniform* commands added in GL 3.0 are compiled into<br>
+ * display lists.<br>
+ *<br>
+ * This test is adapted from tests/spec/arb_separate_<wbr>shader_objects/dlist.c<br>
+ */<br>
+#include "piglit-util-gl.h"<br>
+<br>
+PIGLIT_GL_TEST_CONFIG_BEGIN<br>
+<br>
+ /* No supports_gl_core_version setting because there are no display<br>
+ * lists in core profile.<br>
+ */<br>
+ config.supports_gl_compat_<wbr>version = 30;<br>
+ config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;<br>
+ config.khr_no_error_support = PIGLIT_NO_ERRORS;<br>
+<br>
+PIGLIT_GL_TEST_CONFIG_END<br>
+<br>
+static bool Uniformui(void);<br>
+<br>
+void<br>
+piglit_init(int argc, char **argv)<br>
+{<br>
+ unsigned glsl_version;<br>
+ bool pass = true;<br>
+<br>
+ pass = Uniformui() && pass;<br>
+<br>
+ piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);<br>
+}<br>
+<br>
+enum mode {<br>
+ set_scalar,<br>
+ set_vector,<br>
+ get_and_compare<br>
+};<br>
+<br>
+#define UINT_UNIFORM(type, n, suffix) \<br>
+ do { \<br>
+ type inbuf[n]; \<br>
+ type outbuf[n]; \<br>
+ unsigned jjj; \<br>
+ \<br>
+ for (jjj = 0; jjj < n; jjj++) \<br>
+ outbuf[jjj] = (type) value++; \<br>
+ \<br>
+ switch (m) { \<br>
+ case set_scalar: \<br>
+ switch (n) { \<br>
+ case 1: \<br>
+ glUniform1 ## suffix \<br>
+ (loc, \<br>
+ outbuf[0]); \<br>
+ break; \<br>
+ case 2: \<br>
+ glUniform2 ## suffix \<br>
+ (loc, \<br>
+ outbuf[0], \<br>
+ outbuf[1]); \<br>
+ break; \<br>
+ case 3: \<br>
+ glUniform3 ## suffix \<br>
+ (loc, \<br>
+ outbuf[0], \<br>
+ outbuf[1], \<br>
+ outbuf[2]); \<br>
+ break; \<br>
+ case 4: \<br>
+ glUniform4 ## suffix \<br>
+ (loc, \<br>
+ outbuf[0], \<br>
+ outbuf[1], \<br>
+ outbuf[2], \<br>
+ outbuf[3]); \<br>
+ break; \<br>
+ default: \<br>
+ printf("internal error - " \<br>
+ "cannot set_scalar a " \<br>
+ "%d count\n", n); \<br>
+ pass = false; \<br>
+ break; \<br>
+ } \<br>
+ break; \<br>
+ \<br>
+ case set_vector: \<br>
+ glUniform ## n ## suffix ## v \<br>
+ (loc, 1, outbuf); \<br>
+ break; \<br>
+ \<br>
+ case get_and_compare: \<br>
+ glGetUniform ## suffix ## v \<br>
+ (prog, loc, inbuf); \<br>
+ if (memcmp(inbuf, outbuf, \<br>
+ sizeof(type) * n) != 0) { \<br>
+ printf(" %s data " \<br>
+ "does not match.\n", \<br>
+ name); \<br>
+ pass = false; \<br>
+ } \<br>
+ break; \<br>
+ } \<br>
+ } while (0)<br>
+<br>
+/**<br>
+ * Set or get/verify all the active uniforms in a program<br>
+ *<br>
+ * \param prog Program to operate on<br>
+ * \param base_value Value set (or expected) for the first element of the<br>
+ * first uniform. Each element expects a successively<br>
+ * incremented value.<br>
+ * \param m Mode of operation. Set using scalars (e.g., using<br>
+ * \c glUniform4f), set using vectors (e.g., using<br>
+ * \c glUniform4fv), or get and verify.<br>
+ */<br>
+bool<br>
+process_program_uniforms(<wbr>GLuint prog, unsigned base_value, enum mode m)<br>
+{<br>
+ unsigned num_uniforms;<br>
+ unsigned i;<br>
+ unsigned value;<br>
+ bool pass = true;<br>
+<br>
+ glGetProgramiv(prog, GL_ACTIVE_UNIFORMS, (GLint *) &num_uniforms);<br>
+<br>
+ value = base_value;<br>
+ for (i = 0; i < num_uniforms; i++) {<br>
+ GLint size;<br>
+ GLenum type;<br>
+ char name[64];<br>
+ GLuint loc;<br>
+<br>
+ glGetActiveUniform(prog, i, sizeof(name), NULL,<br>
+ &size, &type, name);<br>
+<br>
+ loc = glGetUniformLocation(prog, name);<br>
+ if (loc == -1) {<br>
+ printf("%s was active, but could not get location.\n",<br>
+ name);<br>
+ pass = false;<br>
+ continue;<br>
+ }<br>
+<br>
+ switch (type) {<br>
+<br>
+ case GL_UNSIGNED_INT:<br>
+ UINT_UNIFORM(unsigned, 1, ui);<br>
+ break;<br>
+ case GL_UNSIGNED_INT_VEC2:<br>
+ UINT_UNIFORM(unsigned, 2, ui);<br>
+ break;<br>
+ case GL_UNSIGNED_INT_VEC3:<br>
+ UINT_UNIFORM(unsigned, 3, ui);<br>
+ break;<br>
+ case GL_UNSIGNED_INT_VEC4:<br>
+ UINT_UNIFORM(unsigned, 4, ui);<br>
+ break;<br>
+ }<br>
+ }<br>
+<br>
+ return pass;<br>
+}<br>
+<br>
+static bool<br>
+process_shader(const char *func, const char *source)<br>
+{<br>
+ static const struct {<br>
+ GLenum list_mode;<br>
+ enum mode setter_mode;<br>
+ const char *setter_mode_name;<br>
+ unsigned base_value;<br>
+ } tests[] = {<br>
+ {<br>
+ GL_COMPILE,<br>
+ set_scalar, "scalar",<br>
+ 5<br>
+ },<br>
+ {<br>
+ GL_COMPILE,<br>
+ set_vector, "vector",<br>
+ 7<br>
+ },<br>
+ {<br>
+ GL_COMPILE_AND_EXECUTE,<br>
+ set_scalar, "scalar",<br>
+ 11<br>
+ },<br>
+ {<br>
+ GL_COMPILE_AND_EXECUTE,<br>
+ set_vector, "vector",<br>
+ 13<br>
+ }<br>
+ };<br>
+<br>
+ bool pass = true;<br>
+<br>
+ printf("Testing gl%s\n", func);<br>
+<br>
+ GLuint vs = piglit_compile_shader_text(GL_<wbr>VERTEX_SHADER, source);<br>
+ GLuint prog = piglit_link_simple_program(vs, 0);<br>
+<br>
+ glUseProgram(prog);<br>
+<br>
+ GLuint list = glGenLists(1);<br>
+<br>
+ for (unsigned i = 0; i < ARRAY_SIZE(tests); i++) {<br>
+ const unsigned post_compile_base_value =<br>
+ (tests[i].list_mode == GL_COMPILE)<br>
+ ? 0 : tests[i].base_value;<br>
+<br>
+ printf(" %s: %s mode\n",<br>
+ piglit_get_gl_enum_name(tests[<wbr>i].list_mode),<br>
+ tests[i].setter_mode_name);<br>
+<br>
+ printf(" pre-initialize\n");<br>
+ pass = process_program_uniforms(prog, 0, tests[i].setter_mode)<br>
+ && pass;<br>
+ pass = process_program_uniforms(prog, 0, get_and_compare)<br>
+ && pass;<br>
+<br>
+ glNewList(list, tests[i].list_mode);<br>
+ printf(" compiling\n");<br>
+ pass = process_program_uniforms(prog,<br>
+ tests[i].base_value,<br>
+ tests[i].setter_mode)<br>
+ && pass;<br>
+ glEndList();<br>
+<br>
+ printf(" post-compile verify\n");<br>
+ pass = process_program_uniforms(prog, post_compile_base_value,<br>
+ get_and_compare)<br>
+ && pass;<br>
+<br>
+ /* Reset the values back. This is useful if GL_COMPILE<br>
+ * executed the commands and for GL_COMPILE_AND_EXECUTE. We<br>
+ * want to know that glCallList changed things.<br>
+ */<br>
+ printf(" restore original values\n");<br>
+ pass = process_program_uniforms(prog, 0, tests[i].setter_mode)<br>
+ && pass;<br>
+ pass = process_program_uniforms(prog, 0, get_and_compare)<br>
+ && pass;<br>
+<br>
+ printf(" post-glCallList verify\n");<br>
+ glCallList(list);<br>
+ pass = process_program_uniforms(prog, tests[i].base_value,<br>
+ get_and_compare)<br>
+ && pass;<br>
+ }<br>
+<br>
+ glDeleteLists(list, 1);<br>
+<br>
+ pass = piglit_check_gl_error(GL_NO_<wbr>ERROR) && pass;<br>
+<br>
+ return pass;<br>
+}<br>
+<br>
+bool<br>
+Uniformui(void)<br>
+{<br>
+ const char *source =<br>
+ "#version 130\n"<br>
+ "uniform uint s;\n"<br>
+ "uniform uvec2 v2;\n"<br>
+ "uniform uvec3 v3;\n"<br>
+ "uniform uvec4 v4;\n"<br>
+ "\n"<br>
+ "void main()\n"<br>
+ "{\n"<br>
+ " gl_Position = vec4(v3, s) + vec4(v2, v2) + vec4(v4);\n"<br>
+ "}\n"<br>
+ ;<br>
+<br>
+ return process_shader(__func__, source);<br>
+}<br>
+<br>
+enum piglit_result<br>
+piglit_display(void)<br>
+{<br>
+ /* NOTREACHED */<br>
+ return PIGLIT_FAIL;<br>
+}<br>
<span class="HOEnZb"><font color="#888888">-- <br>
2.17.0<br>
<br>
______________________________<wbr>_________________<br>
Piglit mailing list<br>
<a href="mailto:Piglit@lists.freedesktop.org">Piglit@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/piglit" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/piglit</a><br>
</font></span></blockquote></div><br></div>