KHR_parallel_shader_compiler: new test

Submitted by Marek Olšák on Nov. 29, 2018, 2:55 a.m.

Details

Message ID 20181129025527.17715-1-maraeo@gmail.com
State New
Headers show
Series "KHR_parallel_shader_compiler: new test" ( rev: 1 ) in Piglit

Not browsing as part of any series.

Commit Message

Marek Olšák Nov. 29, 2018, 2:55 a.m.
From: Marek Olšák <marek.olsak@amd.com>

---
 tests/opengl.py                               |   6 +
 tests/spec/CMakeLists.txt                     |   1 +
 .../CMakeLists.gl.txt                         |   7 ++
 .../CMakeLists.gles2.txt                      |   4 +
 .../CMakeLists.txt                            |   1 +
 .../spec/khr_parallel_shader_compile/basic.c  | 105 ++++++++++++++++++
 6 files changed, 124 insertions(+)
 create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
 create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
 create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.txt
 create mode 100644 tests/spec/khr_parallel_shader_compile/basic.c

Patch hide | download patch | download mbox

diff --git a/tests/opengl.py b/tests/opengl.py
index b2e5cf7fd..06f323378 100644
--- a/tests/opengl.py
+++ b/tests/opengl.py
@@ -4388,20 +4388,26 @@  with profile.test_list.group_manager(
 with profile.test_list.group_manager(
         PiglitGLTest, grouptools.join('spec', 'oes_draw_texture')) as g:
     g(['oes_draw_texture'])
 
 with profile.test_list.group_manager(
         PiglitGLTest,
         grouptools.join('spec', 'oes_compressed_etc1_rgb8_texture')) as g:
     g(['oes_compressed_etc1_rgb8_texture-basic'], 'basic')
     g(['oes_compressed_etc1_rgb8_texture-miptree'], 'miptree')
 
+with profile.test_list.group_manager(
+         PiglitGLTest,
+         grouptools.join('spec', 'khr_parallel_shader_compile')) as g:
+    g(['khr_parallel_shader_compile-basic'], 'basic')
+    g(['khr_parallel_shader_compile-basic_gles2'], 'basic_gles2')
+
 with profile.test_list.group_manager(
          PiglitGLTest,
          grouptools.join('spec', 'khr_texture_compression_astc')) as g:
     g(['arb_texture_compression-invalid-formats', 'astc'], 'invalid formats')
     g(['khr_compressed_astc-array_gl'], 'array-gl')
     g(['khr_compressed_astc-array_gles3'], 'array-gles')
     g(['khr_compressed_astc-basic_gl'], 'basic-gl')
     g(['khr_compressed_astc-basic_gles2'], 'basic-gles')
     g(['void-extent-dl-bug'], 'void-extent-dl-bug')
 
diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt
index 74edc5f24..093deb77b 100644
--- a/tests/spec/CMakeLists.txt
+++ b/tests/spec/CMakeLists.txt
@@ -179,10 +179,11 @@  add_subdirectory (arb_texture_barrier)
 add_subdirectory (intel_conservative_rasterization)
 add_subdirectory (arb_post_depth_coverage)
 add_subdirectory (arb_fragment_shader_interlock)
 add_subdirectory (ext_occlusion_query_boolean)
 add_subdirectory (ext_disjoint_timer_query)
 add_subdirectory (intel_blackhole_render)
 add_subdirectory (ext_texture_norm16)
 add_subdirectory (ext_render_snorm)
 add_subdirectory (ext_texture_compression_bptc)
 add_subdirectory (ext_texture_compression_rgtc)
+add_subdirectory (khr_parallel_shader_compile)
diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
new file mode 100644
index 000000000..aeb5719a1
--- /dev/null
+++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
@@ -0,0 +1,7 @@ 
+link_libraries (
+	piglitutil_${piglit_target_api}
+)
+
+piglit_add_executable(khr_parallel_shader_compile-basic basic.c)
+
+# vim: ft=cmake:
diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
new file mode 100644
index 000000000..7b2f68f20
--- /dev/null
+++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
@@ -0,0 +1,4 @@ 
+link_libraries(piglitutil_${piglit_target_api})
+piglit_add_executable(khr_parallel_shader_compile-basic_gles2 basic.c)
+
+# vim: ft=cmake:
diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt
new file mode 100644
index 000000000..144a306f4
--- /dev/null
+++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt
@@ -0,0 +1 @@ 
+piglit_include_target_api()
diff --git a/tests/spec/khr_parallel_shader_compile/basic.c b/tests/spec/khr_parallel_shader_compile/basic.c
new file mode 100644
index 000000000..a1258fb91
--- /dev/null
+++ b/tests/spec/khr_parallel_shader_compile/basic.c
@@ -0,0 +1,105 @@ 
+/*
+ * Copyright © 2018 Advanced Micro Devices, Inc.
+ *
+ * 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.
+ */
+
+#include "piglit-util-gl.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+	config.supports_gl_compat_version = 10;
+	config.supports_gl_es_version = 30;
+
+	config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
+	config.khr_no_error_support = PIGLIT_NO_ERRORS;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static void
+create_program(float f)
+{
+	char vscode[4096], fscode[4096];
+
+	snprintf(vscode, sizeof(vscode),
+		 "void main() { gl_Position = vec4(%f); }", f);
+	snprintf(fscode, sizeof(fscode),
+		 "void main() { gl_FragColor = vec4(%f); }", f);
+
+	piglit_build_simple_program(vscode, fscode);
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+	piglit_require_extension("GL_KHR_parallel_shader_compile");
+
+	/* Test the query. */
+	GLint threads;
+	glGetIntegerv(GL_MAX_SHADER_COMPILER_THREADS_KHR, &threads);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
+
+	/* Test the initial compilation completion status. */
+	GLint status;
+	GLuint shader = glCreateShader(GL_VERTEX_SHADER);
+	glGetShaderiv(shader, GL_COMPLETION_STATUS_KHR, &status);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
+	if (status != GL_TRUE) {
+		puts("glGetShaderiv incorrect initial completion status");
+		piglit_report_result(PIGLIT_FAIL);
+	}
+
+	GLuint program = glCreateProgram();
+	glGetProgramiv(program, GL_COMPLETION_STATUS_KHR, &status);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
+	if (status != GL_TRUE) {
+		puts("glGetProgramiv incorrect initial completion status");
+		piglit_report_result(PIGLIT_FAIL);
+	}
+
+	/* Change the thread count to test that the driver doesn't crash.
+	 * Drivers are not required to obey this.
+	 */
+	unsigned counter = 0;
+        for (unsigned i = 0; i < 40; i++)
+		create_program(counter++);
+	glMaxShaderCompilerThreadsKHR(1);
+
+	for (unsigned i = 0; i < 40; i++)
+		create_program(counter++);
+	glMaxShaderCompilerThreadsKHR(20);
+
+	for (unsigned i = 0; i < 40; i++)
+		create_program(counter++);
+	glMaxShaderCompilerThreadsKHR(2);
+
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
+	piglit_report_result(PIGLIT_PASS);
+}
+
+enum piglit_result
+piglit_display(void)
+{
+	return PIGLIT_FAIL;
+}

Comments

On 11/28/18 6:55 PM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak@amd.com>
> 
> ---
>  tests/opengl.py                               |   6 +
>  tests/spec/CMakeLists.txt                     |   1 +
>  .../CMakeLists.gl.txt                         |   7 ++
>  .../CMakeLists.gles2.txt                      |   4 +
>  .../CMakeLists.txt                            |   1 +
>  .../spec/khr_parallel_shader_compile/basic.c  | 105 ++++++++++++++++++
>  6 files changed, 124 insertions(+)
>  create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
>  create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
>  create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.txt
>  create mode 100644 tests/spec/khr_parallel_shader_compile/basic.c
> 
> diff --git a/tests/opengl.py b/tests/opengl.py
> index b2e5cf7fd..06f323378 100644
> --- a/tests/opengl.py
> +++ b/tests/opengl.py
> @@ -4388,20 +4388,26 @@ with profile.test_list.group_manager(
>  with profile.test_list.group_manager(
>          PiglitGLTest, grouptools.join('spec', 'oes_draw_texture')) as g:
>      g(['oes_draw_texture'])
>  
>  with profile.test_list.group_manager(
>          PiglitGLTest,
>          grouptools.join('spec', 'oes_compressed_etc1_rgb8_texture')) as g:
>      g(['oes_compressed_etc1_rgb8_texture-basic'], 'basic')
>      g(['oes_compressed_etc1_rgb8_texture-miptree'], 'miptree')
>  
> +with profile.test_list.group_manager(
> +         PiglitGLTest,
> +         grouptools.join('spec', 'khr_parallel_shader_compile')) as g:
> +    g(['khr_parallel_shader_compile-basic'], 'basic')
> +    g(['khr_parallel_shader_compile-basic_gles2'], 'basic_gles2')
> +
>  with profile.test_list.group_manager(
>           PiglitGLTest,
>           grouptools.join('spec', 'khr_texture_compression_astc')) as g:
>      g(['arb_texture_compression-invalid-formats', 'astc'], 'invalid formats')
>      g(['khr_compressed_astc-array_gl'], 'array-gl')
>      g(['khr_compressed_astc-array_gles3'], 'array-gles')
>      g(['khr_compressed_astc-basic_gl'], 'basic-gl')
>      g(['khr_compressed_astc-basic_gles2'], 'basic-gles')
>      g(['void-extent-dl-bug'], 'void-extent-dl-bug')
>  
> diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt
> index 74edc5f24..093deb77b 100644
> --- a/tests/spec/CMakeLists.txt
> +++ b/tests/spec/CMakeLists.txt
> @@ -179,10 +179,11 @@ add_subdirectory (arb_texture_barrier)
>  add_subdirectory (intel_conservative_rasterization)
>  add_subdirectory (arb_post_depth_coverage)
>  add_subdirectory (arb_fragment_shader_interlock)
>  add_subdirectory (ext_occlusion_query_boolean)
>  add_subdirectory (ext_disjoint_timer_query)
>  add_subdirectory (intel_blackhole_render)
>  add_subdirectory (ext_texture_norm16)
>  add_subdirectory (ext_render_snorm)
>  add_subdirectory (ext_texture_compression_bptc)
>  add_subdirectory (ext_texture_compression_rgtc)
> +add_subdirectory (khr_parallel_shader_compile)
> diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
> new file mode 100644
> index 000000000..aeb5719a1
> --- /dev/null
> +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
> @@ -0,0 +1,7 @@
> +link_libraries (
> +	piglitutil_${piglit_target_api}
> +)
> +
> +piglit_add_executable(khr_parallel_shader_compile-basic basic.c)
> +
> +# vim: ft=cmake:
> diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
> new file mode 100644
> index 000000000..7b2f68f20
> --- /dev/null
> +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
> @@ -0,0 +1,4 @@
> +link_libraries(piglitutil_${piglit_target_api})
> +piglit_add_executable(khr_parallel_shader_compile-basic_gles2 basic.c)
> +
> +# vim: ft=cmake:
> diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.txt b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt
> new file mode 100644
> index 000000000..144a306f4
> --- /dev/null
> +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt
> @@ -0,0 +1 @@
> +piglit_include_target_api()
> diff --git a/tests/spec/khr_parallel_shader_compile/basic.c b/tests/spec/khr_parallel_shader_compile/basic.c
> new file mode 100644
> index 000000000..a1258fb91
> --- /dev/null
> +++ b/tests/spec/khr_parallel_shader_compile/basic.c
> @@ -0,0 +1,105 @@
> +/*
> + * Copyright © 2018 Advanced Micro Devices, Inc.
> + *
> + * 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.
> + */
> +
> +#include "piglit-util-gl.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> +	config.supports_gl_compat_version = 10;
> +	config.supports_gl_es_version = 30;
> +
> +	config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
> +	config.khr_no_error_support = PIGLIT_NO_ERRORS;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +static void
> +create_program(float f)
> +{
> +	char vscode[4096], fscode[4096];
> +
> +	snprintf(vscode, sizeof(vscode),
> +		 "void main() { gl_Position = vec4(%f); }", f);
> +	snprintf(fscode, sizeof(fscode),
> +		 "void main() { gl_FragColor = vec4(%f); }", f);
> +
> +	piglit_build_simple_program(vscode, fscode);
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> +	piglit_require_extension("GL_KHR_parallel_shader_compile");
> +
> +	/* Test the query. */
> +	GLint threads;
> +	glGetIntegerv(GL_MAX_SHADER_COMPILER_THREADS_KHR, &threads);
> +	if (!piglit_check_gl_error(GL_NO_ERROR))
> +		piglit_report_result(PIGLIT_FAIL);
> +
> +	/* Test the initial compilation completion status. */
> +	GLint status;
> +	GLuint shader = glCreateShader(GL_VERTEX_SHADER);
> +	glGetShaderiv(shader, GL_COMPLETION_STATUS_KHR, &status);
> +	if (!piglit_check_gl_error(GL_NO_ERROR))
> +		piglit_report_result(PIGLIT_FAIL);
> +	if (status != GL_TRUE) {
> +		puts("glGetShaderiv incorrect initial completion status");
> +		piglit_report_result(PIGLIT_FAIL);
> +	}
> +
> +	GLuint program = glCreateProgram();
> +	glGetProgramiv(program, GL_COMPLETION_STATUS_KHR, &status);
> +	if (!piglit_check_gl_error(GL_NO_ERROR))
> +		piglit_report_result(PIGLIT_FAIL);
> +	if (status != GL_TRUE) {
> +		puts("glGetProgramiv incorrect initial completion status");
> +		piglit_report_result(PIGLIT_FAIL);
> +	}
> +
> +	/* Change the thread count to test that the driver doesn't crash.
> +	 * Drivers are not required to obey this.
> +	 */
> +	unsigned counter = 0;
> +        for (unsigned i = 0; i < 40; i++)

It looks like the rest of the file uses tabs for indentation, but this
for-loop uses spaces.

> +		create_program(counter++);
> +	glMaxShaderCompilerThreadsKHR(1);

Based on my understanding of the spec, the driver may not change the
number of threads after glCompileShader or glLinkShader is called, but
the query should return... the most recently set value?  It's not
entirely clear to me whether the query is supposed to just echo back the
value that was set or return the actual.  Most other things in OpenGL
just echo back the value that was set, so that would be my guess.
Assuming that's correct, we should check that here and after the other
calls to gLMaxShaderCompilerThreadsKHR.

> +
> +	for (unsigned i = 0; i < 40; i++)
> +		create_program(counter++);
> +	glMaxShaderCompilerThreadsKHR(20);
> +
> +	for (unsigned i = 0; i < 40; i++)
> +		create_program(counter++);
> +	glMaxShaderCompilerThreadsKHR(2);
> +
> +	if (!piglit_check_gl_error(GL_NO_ERROR))
> +		piglit_report_result(PIGLIT_FAIL);
> +	piglit_report_result(PIGLIT_PASS);
> +}
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> +	return PIGLIT_FAIL;
> +}
On Thu, Jan 3, 2019 at 2:38 PM Ian Romanick <idr@freedesktop.org> wrote:

> On 11/28/18 6:55 PM, Marek Olšák wrote:
> > From: Marek Olšák <marek.olsak@amd.com>
> >
> > ---
> >  tests/opengl.py                               |   6 +
> >  tests/spec/CMakeLists.txt                     |   1 +
> >  .../CMakeLists.gl.txt                         |   7 ++
> >  .../CMakeLists.gles2.txt                      |   4 +
> >  .../CMakeLists.txt                            |   1 +
> >  .../spec/khr_parallel_shader_compile/basic.c  | 105 ++++++++++++++++++
> >  6 files changed, 124 insertions(+)
> >  create mode 100644
> tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
> >  create mode 100644
> tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
> >  create mode 100644 tests/spec/khr_parallel_shader_compile/CMakeLists.txt
> >  create mode 100644 tests/spec/khr_parallel_shader_compile/basic.c
> >
> > diff --git a/tests/opengl.py b/tests/opengl.py
> > index b2e5cf7fd..06f323378 100644
> > --- a/tests/opengl.py
> > +++ b/tests/opengl.py
> > @@ -4388,20 +4388,26 @@ with profile.test_list.group_manager(
> >  with profile.test_list.group_manager(
> >          PiglitGLTest, grouptools.join('spec', 'oes_draw_texture')) as g:
> >      g(['oes_draw_texture'])
> >
> >  with profile.test_list.group_manager(
> >          PiglitGLTest,
> >          grouptools.join('spec', 'oes_compressed_etc1_rgb8_texture')) as
> g:
> >      g(['oes_compressed_etc1_rgb8_texture-basic'], 'basic')
> >      g(['oes_compressed_etc1_rgb8_texture-miptree'], 'miptree')
> >
> > +with profile.test_list.group_manager(
> > +         PiglitGLTest,
> > +         grouptools.join('spec', 'khr_parallel_shader_compile')) as g:
> > +    g(['khr_parallel_shader_compile-basic'], 'basic')
> > +    g(['khr_parallel_shader_compile-basic_gles2'], 'basic_gles2')
> > +
> >  with profile.test_list.group_manager(
> >           PiglitGLTest,
> >           grouptools.join('spec', 'khr_texture_compression_astc')) as g:
> >      g(['arb_texture_compression-invalid-formats', 'astc'], 'invalid
> formats')
> >      g(['khr_compressed_astc-array_gl'], 'array-gl')
> >      g(['khr_compressed_astc-array_gles3'], 'array-gles')
> >      g(['khr_compressed_astc-basic_gl'], 'basic-gl')
> >      g(['khr_compressed_astc-basic_gles2'], 'basic-gles')
> >      g(['void-extent-dl-bug'], 'void-extent-dl-bug')
> >
> > diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt
> > index 74edc5f24..093deb77b 100644
> > --- a/tests/spec/CMakeLists.txt
> > +++ b/tests/spec/CMakeLists.txt
> > @@ -179,10 +179,11 @@ add_subdirectory (arb_texture_barrier)
> >  add_subdirectory (intel_conservative_rasterization)
> >  add_subdirectory (arb_post_depth_coverage)
> >  add_subdirectory (arb_fragment_shader_interlock)
> >  add_subdirectory (ext_occlusion_query_boolean)
> >  add_subdirectory (ext_disjoint_timer_query)
> >  add_subdirectory (intel_blackhole_render)
> >  add_subdirectory (ext_texture_norm16)
> >  add_subdirectory (ext_render_snorm)
> >  add_subdirectory (ext_texture_compression_bptc)
> >  add_subdirectory (ext_texture_compression_rgtc)
> > +add_subdirectory (khr_parallel_shader_compile)
> > diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
> b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
> > new file mode 100644
> > index 000000000..aeb5719a1
> > --- /dev/null
> > +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gl.txt
> > @@ -0,0 +1,7 @@
> > +link_libraries (
> > +     piglitutil_${piglit_target_api}
> > +)
> > +
> > +piglit_add_executable(khr_parallel_shader_compile-basic basic.c)
> > +
> > +# vim: ft=cmake:
> > diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
> b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
> > new file mode 100644
> > index 000000000..7b2f68f20
> > --- /dev/null
> > +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.gles2.txt
> > @@ -0,0 +1,4 @@
> > +link_libraries(piglitutil_${piglit_target_api})
> > +piglit_add_executable(khr_parallel_shader_compile-basic_gles2 basic.c)
> > +
> > +# vim: ft=cmake:
> > diff --git a/tests/spec/khr_parallel_shader_compile/CMakeLists.txt
> b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt
> > new file mode 100644
> > index 000000000..144a306f4
> > --- /dev/null
> > +++ b/tests/spec/khr_parallel_shader_compile/CMakeLists.txt
> > @@ -0,0 +1 @@
> > +piglit_include_target_api()
> > diff --git a/tests/spec/khr_parallel_shader_compile/basic.c
> b/tests/spec/khr_parallel_shader_compile/basic.c
> > new file mode 100644
> > index 000000000..a1258fb91
> > --- /dev/null
> > +++ b/tests/spec/khr_parallel_shader_compile/basic.c
> > @@ -0,0 +1,105 @@
> > +/*
> > + * Copyright © 2018 Advanced Micro Devices, Inc.
> > + *
> > + * 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.
> > + */
> > +
> > +#include "piglit-util-gl.h"
> > +
> > +PIGLIT_GL_TEST_CONFIG_BEGIN
> > +
> > +     config.supports_gl_compat_version = 10;
> > +     config.supports_gl_es_version = 30;
> > +
> > +     config.window_visual = PIGLIT_GL_VISUAL_RGB |
> PIGLIT_GL_VISUAL_DOUBLE;
> > +     config.khr_no_error_support = PIGLIT_NO_ERRORS;
> > +
> > +PIGLIT_GL_TEST_CONFIG_END
> > +
> > +static void
> > +create_program(float f)
> > +{
> > +     char vscode[4096], fscode[4096];
> > +
> > +     snprintf(vscode, sizeof(vscode),
> > +              "void main() { gl_Position = vec4(%f); }", f);
> > +     snprintf(fscode, sizeof(fscode),
> > +              "void main() { gl_FragColor = vec4(%f); }", f);
> > +
> > +     piglit_build_simple_program(vscode, fscode);
> > +}
> > +
> > +void
> > +piglit_init(int argc, char **argv)
> > +{
> > +     piglit_require_extension("GL_KHR_parallel_shader_compile");
> > +
> > +     /* Test the query. */
> > +     GLint threads;
> > +     glGetIntegerv(GL_MAX_SHADER_COMPILER_THREADS_KHR, &threads);
> > +     if (!piglit_check_gl_error(GL_NO_ERROR))
> > +             piglit_report_result(PIGLIT_FAIL);
> > +
> > +     /* Test the initial compilation completion status. */
> > +     GLint status;
> > +     GLuint shader = glCreateShader(GL_VERTEX_SHADER);
> > +     glGetShaderiv(shader, GL_COMPLETION_STATUS_KHR, &status);
> > +     if (!piglit_check_gl_error(GL_NO_ERROR))
> > +             piglit_report_result(PIGLIT_FAIL);
> > +     if (status != GL_TRUE) {
> > +             puts("glGetShaderiv incorrect initial completion status");
> > +             piglit_report_result(PIGLIT_FAIL);
> > +     }
> > +
> > +     GLuint program = glCreateProgram();
> > +     glGetProgramiv(program, GL_COMPLETION_STATUS_KHR, &status);
> > +     if (!piglit_check_gl_error(GL_NO_ERROR))
> > +             piglit_report_result(PIGLIT_FAIL);
> > +     if (status != GL_TRUE) {
> > +             puts("glGetProgramiv incorrect initial completion status");
> > +             piglit_report_result(PIGLIT_FAIL);
> > +     }
> > +
> > +     /* Change the thread count to test that the driver doesn't crash.
> > +      * Drivers are not required to obey this.
> > +      */
> > +     unsigned counter = 0;
> > +        for (unsigned i = 0; i < 40; i++)
>
> It looks like the rest of the file uses tabs for indentation, but this
> for-loop uses spaces.
>
> > +             create_program(counter++);
> > +     glMaxShaderCompilerThreadsKHR(1);
>
> Based on my understanding of the spec, the driver may not change the
> number of threads after glCompileShader or glLinkShader is called, but
> the query should return... the most recently set value?  It's not
>

I don't see any such language in the spec.


> entirely clear to me whether the query is supposed to just echo back the
> value that was set or return the actual.  Most other things in OpenGL
> just echo back the value that was set, so that would be my guess.
> Assuming that's correct, we should check that here and after the other
> calls to gLMaxShaderCompilerThreadsKHR.
>

I think the query is supposed to echo back the value from the last call.

Marek