KHR_parallel_shader_compiler: new test (v2)

Submitted by Marek Olšák on Feb. 25, 2019, 6:27 p.m.

Details

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

Not browsing as part of any series.

Commit Message

Marek Olšák Feb. 25, 2019, 6:27 p.m.
From: Marek Olšák <marek.olsak@amd.com>

v2: test glGetIntegerv after every every change of the thread count
    spaces -> tabs
---
 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  | 115 ++++++++++++++++++
 6 files changed, 134 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 dfad8b8c8..3c879c930 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..459803a16
--- /dev/null
+++ b/tests/spec/khr_parallel_shader_compile/basic.c
@@ -0,0 +1,115 @@ 
+/*
+ * 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);
+}
+
+static void
+check_max_shader_compiler_threads(unsigned expected)
+{
+	GLint threads;
+	glGetIntegerv(GL_MAX_SHADER_COMPILER_THREADS_KHR, &threads);
+	if (!piglit_check_gl_error(GL_NO_ERROR))
+		piglit_report_result(PIGLIT_FAIL);
+
+	if (threads != expected)
+		piglit_report_result(PIGLIT_FAIL);
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+	piglit_require_extension("GL_KHR_parallel_shader_compile");
+
+	/* Test the query. */
+	check_max_shader_compiler_threads(0xffffffff);
+
+	/* 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);
+	check_max_shader_compiler_threads(1);
+
+	for (unsigned i = 0; i < 40; i++)
+		create_program(counter++);
+	glMaxShaderCompilerThreadsKHR(20);
+	check_max_shader_compiler_threads(20);
+
+	for (unsigned i = 0; i < 40; i++)
+		create_program(counter++);
+	glMaxShaderCompilerThreadsKHR(2);
+	check_max_shader_compiler_threads(2);
+
+	piglit_report_result(PIGLIT_PASS);
+}
+
+enum piglit_result
+piglit_display(void)
+{
+	return PIGLIT_FAIL;
+}