[Piglit] [PATCH] KHR_parallel_shader_compiler: new test

Marek Olšák maraeo at gmail.com
Mon Feb 25 18:26:29 UTC 2019


On Thu, Jan 3, 2019 at 2:38 PM Ian Romanick <idr at freedesktop.org> wrote:

> On 11/28/18 6:55 PM, Marek Olšák wrote:
> > From: Marek Olšák <marek.olsak at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20190225/ec14cb7f/attachment-0001.html>


More information about the Piglit mailing list