<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 3, 2019 at 2:38 PM Ian Romanick <<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 11/28/18 6:55 PM, Marek Olšák wrote:<br>
> From: Marek Olšák <<a href="mailto:marek.olsak@amd.com" target="_blank">marek.olsak@amd.com</a>><br>
> <br>
> ---<br>
>  tests/opengl.py                               |   6 +<br>
>  tests/spec/CMakeLists.txt                     |   1 +<br>
>  .../CMakeLists.gl.txt                         |   7 ++<br>
>  .../CMakeLists.gles2.txt                      |   4 +<br>
>  .../CMakeLists.txt                            |   1 +<br>
>  .../spec/khr_parallel_shader_compile/basic.c  | 105 ++++++++++++++++++<br>
>  6 files changed, 124 insertions(+)<br>
>  create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt<br>
>  create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt<br>
>  create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.txt<br>
>  create mode 100644 tests/spec/khr_parallel_shader_compile/basic.c<br>
> <br>
> diff --git a/tests/opengl.py b/tests/opengl.py<br>
> index b2e5cf7fd..06f323378 100644<br>
> --- a/tests/opengl.py<br>
> +++ b/tests/opengl.py<br>
> @@ -4388,20 +4388,26 @@ with profile.test_list.group_manager(<br>
>  with profile.test_list.group_manager(<br>
>          PiglitGLTest, grouptools.join('spec', 'oes_draw_texture')) as g:<br>
>      g(['oes_draw_texture'])<br>
>  <br>
>  with profile.test_list.group_manager(<br>
>          PiglitGLTest,<br>
>          grouptools.join('spec', 'oes_compressed_etc1_rgb8_texture')) as g:<br>
>      g(['oes_compressed_etc1_rgb8_texture-basic'], 'basic')<br>
>      g(['oes_compressed_etc1_rgb8_texture-miptree'], 'miptree')<br>
>  <br>
> +with profile.test_list.group_manager(<br>
> +         PiglitGLTest,<br>
> +         grouptools.join('spec', 'khr_parallel_shader_compile')) as g:<br>
> +    g(['khr_parallel_shader_compile-basic'], 'basic')<br>
> +    g(['khr_parallel_shader_compile-basic_gles2'], 'basic_gles2')<br>
> +<br>
>  with profile.test_list.group_manager(<br>
>           PiglitGLTest,<br>
>           grouptools.join('spec', 'khr_texture_compression_astc')) as g:<br>
>      g(['arb_texture_compression-invalid-formats', 'astc'], 'invalid formats')<br>
>      g(['khr_compressed_astc-array_gl'], 'array-gl')<br>
>      g(['khr_compressed_astc-array_gles3'], 'array-gles')<br>
>      g(['khr_compressed_astc-basic_gl'], 'basic-gl')<br>
>      g(['khr_compressed_astc-basic_gles2'], 'basic-gles')<br>
>      g(['void-extent-dl-bug'], 'void-extent-dl-bug')<br>
>  <br>
> diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt<br>
> index 74edc5f24..093deb77b 100644<br>
> --- a/tests/spec/CMakeLists.txt<br>
> +++ b/tests/spec/CMakeLists.txt<br>
> @@ -179,10 +179,11 @@ add_subdirectory (arb_texture_barrier)<br>
>  add_subdirectory (intel_conservative_rasterization)<br>
>  add_subdirectory (arb_post_depth_coverage)<br>
>  add_subdirectory (arb_fragment_shader_interlock)<br>
>  add_subdirectory (ext_occlusion_query_boolean)<br>
>  add_subdirectory (ext_disjoint_timer_query)<br>
>  add_subdirectory (intel_blackhole_render)<br>
>  add_subdirectory (ext_texture_norm16)<br>
>  add_subdirectory (ext_render_snorm)<br>
>  add_subdirectory (ext_texture_compression_bptc)<br>
>  add_subdirectory (ext_texture_compression_rgtc)<br>
> +add_subdirectory (khr_parallel_shader_compile)<br>
> diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt<br>
> new file mode 100644<br>
> index 000000000..aeb5719a1<br>
> --- /dev/null<br>
> +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt<br>
> @@ -0,0 +1,7 @@<br>
> +link_libraries (<br>
> +     piglitutil_${piglit_target_api}<br>
> +)<br>
> +<br>
> +piglit_add_executable(khr_parallel_shader_compile-basic basic.c)<br>
> +<br>
> +# vim: ft=cmake:<br>
> diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt<br>
> new file mode 100644<br>
> index 000000000..7b2f68f20<br>
> --- /dev/null<br>
> +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt<br>
> @@ -0,0 +1,4 @@<br>
> +link_libraries(piglitutil_${piglit_target_api})<br>
> +piglit_add_executable(khr_parallel_shader_compile-basic_gles2 basic.c)<br>
> +<br>
> +# vim: ft=cmake:<br>
> diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt<br>
> new file mode 100644<br>
> index 000000000..144a306f4<br>
> --- /dev/null<br>
> +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt<br>
> @@ -0,0 +1 @@<br>
> +piglit_include_target_api()<br>
> diff --git a/tests/spec/khr_parallel_shader_compile/basic.c b/tests/spec/khr_parallel_shader_compile/basic.c<br>
> new file mode 100644<br>
> index 000000000..a1258fb91<br>
> --- /dev/null<br>
> +++ b/tests/spec/khr_parallel_shader_compile/basic.c<br>
> @@ -0,0 +1,105 @@<br>
> +/*<br>
> + * Copyright © 2018 Advanced Micro Devices, Inc.<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>
> +#include "piglit-util-gl.h"<br>
> +<br>
> +PIGLIT_GL_TEST_CONFIG_BEGIN<br>
> +<br>
> +     config.supports_gl_compat_version = 10;<br>
> +     config.supports_gl_es_version = 30;<br>
> +<br>
> +     config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;<br>
> +     config.khr_no_error_support = PIGLIT_NO_ERRORS;<br>
> +<br>
> +PIGLIT_GL_TEST_CONFIG_END<br>
> +<br>
> +static void<br>
> +create_program(float f)<br>
> +{<br>
> +     char vscode[4096], fscode[4096];<br>
> +<br>
> +     snprintf(vscode, sizeof(vscode),<br>
> +              "void main() { gl_Position = vec4(%f); }", f);<br>
> +     snprintf(fscode, sizeof(fscode),<br>
> +              "void main() { gl_FragColor = vec4(%f); }", f);<br>
> +<br>
> +     piglit_build_simple_program(vscode, fscode);<br>
> +}<br>
> +<br>
> +void<br>
> +piglit_init(int argc, char **argv)<br>
> +{<br>
> +     piglit_require_extension("GL_KHR_parallel_shader_compile");<br>
> +<br>
> +     /* Test the query. */<br>
> +     GLint threads;<br>
> +     glGetIntegerv(GL_MAX_SHADER_COMPILER_THREADS_KHR, &threads);<br>
> +     if (!piglit_check_gl_error(GL_NO_ERROR))<br>
> +             piglit_report_result(PIGLIT_FAIL);<br>
> +<br>
> +     /* Test the initial compilation completion status. */<br>
> +     GLint status;<br>
> +     GLuint shader = glCreateShader(GL_VERTEX_SHADER);<br>
> +     glGetShaderiv(shader, GL_COMPLETION_STATUS_KHR, &status);<br>
> +     if (!piglit_check_gl_error(GL_NO_ERROR))<br>
> +             piglit_report_result(PIGLIT_FAIL);<br>
> +     if (status != GL_TRUE) {<br>
> +             puts("glGetShaderiv incorrect initial completion status");<br>
> +             piglit_report_result(PIGLIT_FAIL);<br>
> +     }<br>
> +<br>
> +     GLuint program = glCreateProgram();<br>
> +     glGetProgramiv(program, GL_COMPLETION_STATUS_KHR, &status);<br>
> +     if (!piglit_check_gl_error(GL_NO_ERROR))<br>
> +             piglit_report_result(PIGLIT_FAIL);<br>
> +     if (status != GL_TRUE) {<br>
> +             puts("glGetProgramiv incorrect initial completion status");<br>
> +             piglit_report_result(PIGLIT_FAIL);<br>
> +     }<br>
> +<br>
> +     /* Change the thread count to test that the driver doesn't crash.<br>
> +      * Drivers are not required to obey this.<br>
> +      */<br>
> +     unsigned counter = 0;<br>
> +        for (unsigned i = 0; i < 40; i++)<br>
<br>
It looks like the rest of the file uses tabs for indentation, but this<br>
for-loop uses spaces.<br>
<br>
> +             create_program(counter++);<br>
> +     glMaxShaderCompilerThreadsKHR(1);<br>
<br>
Based on my understanding of the spec, the driver may not change the<br>
number of threads after glCompileShader or glLinkShader is called, but<br>
the query should return... the most recently set value?  It's not<br></blockquote><div><br></div><div>I don't see any such language in the spec.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
entirely clear to me whether the query is supposed to just echo back the<br>
value that was set or return the actual.  Most other things in OpenGL<br>
just echo back the value that was set, so that would be my guess.<br>
Assuming that's correct, we should check that here and after the other<br>
calls to gLMaxShaderCompilerThreadsKHR.<br></blockquote><div><br></div><div>I think the query is supposed to echo back the value from the last call.</div><div><br></div><div>Marek</div></div></div>