[Piglit] [PATCH] arb_separate_shader_objects: add rendez-vous-by mismatch tests

Andres Gomez agomez at igalia.com
Fri Feb 8 13:25:10 UTC 2019


New tests to check that, with separable program objects, interface
matching by name or location are still checked at link time between
the inner interfaces existing inside the program.

>From the ARB_separate_shader_objects spec v.25:

  " With separable program objects, interfaces between shader stages
    may involve the outputs from one program object and the inputs
    from a second program object.  For such interfaces, it is not
    possible to detect mismatches at link time, because the programs
    are linked separately.  When each such program is linked, all
    inputs or outputs interfacing with another program stage are
    treated as active.  The linker will generate an executable that
    assumes the presence of a compatible program on the other side of
    the interface.  If a mismatch between programs occurs, no GL error
    will be generated, but some or all of the inputs on the interface
    will be undefined."

Cc: Timothy Arceri <tarceri at itsqueeze.com>
Cc: Iago Toral Quiroga <itoral at igalia.com>
Cc: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
Cc: Tapani Pälli <tapani.palli at intel.com>
Cc: Ian Romanick <ian.d.romanick at intel.com>
Cc: Ilia Mirkin <imirkin at alum.mit.edu>
Signed-off-by: Andres Gomez <agomez at igalia.com>
---
 .../CMakeLists.gl.txt                         |   2 +
 .../rendezvous_by_location-invalid.c          | 106 ++++++++++++++++++
 .../rendezvous_by_name-invalid.c              | 103 +++++++++++++++++
 3 files changed, 211 insertions(+)
 create mode 100644 tests/spec/arb_separate_shader_objects/rendezvous_by_location-invalid.c
 create mode 100644 tests/spec/arb_separate_shader_objects/rendezvous_by_name-invalid.c

diff --git a/tests/spec/arb_separate_shader_objects/CMakeLists.gl.txt b/tests/spec/arb_separate_shader_objects/CMakeLists.gl.txt
index 1b61f3312..ce257ca2e 100644
--- a/tests/spec/arb_separate_shader_objects/CMakeLists.gl.txt
+++ b/tests/spec/arb_separate_shader_objects/CMakeLists.gl.txt
@@ -20,9 +20,11 @@ piglit_add_executable (arb_separate_shader_object-mixed_explicit_and_non_explici
 piglit_add_executable (arb_separate_shader_object-mix-and-match-tcs-tes mix-and-match-tcs-tes.c)
 piglit_add_executable (arb_separate_shader_object-ProgramUniform-coverage ProgramUniform-coverage.c)
 piglit_add_executable (arb_separate_shader_object-rendezvous_by_location rendezvous_by_location.c sso-common.c)
+piglit_add_executable (arb_separate_shader_object-rendezvous_by_location-invalid rendezvous_by_location-invalid.c)
 piglit_add_executable (arb_separate_shader_object-rendezvous_by_location-3-stages rendezvous_by_location-3-stages.c)
 piglit_add_executable (arb_separate_shader_object-rendezvous_by_location-5-stages rendezvous_by_location-5-stages.c)
 piglit_add_executable (arb_separate_shader_object-rendezvous_by_name rendezvous_by_name.c sso-common.c)
+piglit_add_executable (arb_separate_shader_object-rendezvous_by_name-invalid rendezvous_by_name-invalid.c)
 piglit_add_executable (arb_separate_shader_object-rendezvous_by_name_interpolation rendezvous_by_name_interpolation.c sso-common.c)
 piglit_add_executable (arb_separate_shader_object-uniform-namespace uniform-namespace.c sso-common.c)
 piglit_add_executable (arb_separate_shader_object-UseProgramStages-non-separable UseProgramStages-non-separable.c)
diff --git a/tests/spec/arb_separate_shader_objects/rendezvous_by_location-invalid.c b/tests/spec/arb_separate_shader_objects/rendezvous_by_location-invalid.c
new file mode 100644
index 000000000..7fd7af86d
--- /dev/null
+++ b/tests/spec/arb_separate_shader_objects/rendezvous_by_location-invalid.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright © 2013, 2019 Intel Corporation
+ * Copyright © 2015 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.
+ */
+
+/**
+ * This test uses separable program objects with 2 shaders (VS, GS)
+ * and tests that the same interface matching rules by location apply
+ * in between the VS -> GS interface as if it would not be separable.
+ */
+
+#include "piglit-util-gl.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+	config.supports_gl_compat_version = 0;
+	config.supports_gl_core_version = 32;
+	config.window_visual = PIGLIT_GL_VISUAL_RGBA | PIGLIT_GL_VISUAL_DOUBLE;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static const char *vs_code =
+	"#version 150\n"
+	"#extension GL_ARB_separate_shader_objects: require\n"
+	"#extension GL_ARB_explicit_attrib_location: require\n"
+	"\n"
+	"layout(location = 0) in vec4 piglit_vertex;\n"
+	"\n"
+	"layout(location = 2) out vec3 a;\n"
+	"\n"
+	"void main()\n"
+	"{\n"
+	"    gl_Position = piglit_vertex;\n"
+	"    a = vec3(0.5, 0, 0.3);\n"
+	"}\n"
+	;
+
+static const char *gs_code =
+	"#version 150\n"
+	"#extension GL_ARB_separate_shader_objects: require\n"
+	"#extension GL_ARB_explicit_attrib_location: require\n"
+	"\n"
+	"layout(triangles) in;\n"
+	"layout(triangle_strip, max_vertices = 3) out;\n"
+	"\n"
+	"layout(location = 1) in vec3 va[];\n"
+	"\n"
+	"layout(location = 3) out vec3 ga;\n"
+	"\n"
+	"void main()\n"
+	"{\n"
+	"    for (int i = 0; i < 3; i++) {"
+	"        gl_Position = gl_in[i].gl_Position;\n"
+	"        ga = va[i] * 1.35;\n"
+	"        EmitVertex();\n"
+	"    }\n"
+	"}\n"
+	;
+
+enum piglit_result
+piglit_display(void)
+{
+	/* UNREACHED */
+	return PIGLIT_FAIL;
+}
+
+void piglit_init(int argc, char **argv)
+{
+	GLuint prog;
+	bool pass;
+
+	piglit_require_extension("GL_ARB_separate_shader_objects");
+	piglit_require_extension("GL_ARB_explicit_attrib_location");
+
+	prog = piglit_build_simple_program_unlinked_multiple_shaders(
+				GL_VERTEX_SHADER, vs_code,
+				GL_GEOMETRY_SHADER, gs_code,
+				0);
+
+	glProgramParameteri(prog, GL_PROGRAM_SEPARABLE, GL_TRUE);
+	piglit_check_gl_error(GL_NO_ERROR);
+
+	glLinkProgram(prog);
+	pass = !piglit_link_check_status_quiet(prog);
+
+	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
diff --git a/tests/spec/arb_separate_shader_objects/rendezvous_by_name-invalid.c b/tests/spec/arb_separate_shader_objects/rendezvous_by_name-invalid.c
new file mode 100644
index 000000000..a23a77c54
--- /dev/null
+++ b/tests/spec/arb_separate_shader_objects/rendezvous_by_name-invalid.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright © 2013, 2019 Intel Corporation
+ * Copyright © 2015 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.
+ */
+
+/**
+ * This test uses separable program objects with 2 shaders (VS, GS)
+ * and tests that the same interface matching rules by name apply in
+ * between the VS -> GS interface as if it would not be separable.
+ */
+
+#include "piglit-util-gl.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+	config.supports_gl_compat_version = 0;
+	config.supports_gl_core_version = 32;
+	config.window_visual = PIGLIT_GL_VISUAL_RGBA | PIGLIT_GL_VISUAL_DOUBLE;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static const char *vs_code =
+	"#version 150\n"
+	"#extension GL_ARB_separate_shader_objects: require\n"
+	"\n"
+	"in vec4 piglit_vertex;\n"
+	"\n"
+	"out vec3 a;\n"
+	"\n"
+	"void main()\n"
+	"{\n"
+	"    gl_Position = piglit_vertex;\n"
+	"    a = vec3(0.5, 0, 0.3);\n"
+	"}\n"
+	;
+
+static const char *gs_code =
+	"#version 150\n"
+	"#extension GL_ARB_separate_shader_objects: require\n"
+	"\n"
+	"layout(triangles) in;\n"
+	"layout(triangle_strip, max_vertices = 3) out;\n"
+	"\n"
+	"in vec3 va[];\n"
+	"\n"
+	"out vec3 ga;\n"
+	"\n"
+	"void main()\n"
+	"{\n"
+	"    for (int i = 0; i < 3; i++) {"
+	"        gl_Position = gl_in[i].gl_Position;\n"
+	"        ga = va[i] * 1.35;\n"
+	"        EmitVertex();\n"
+	"    }\n"
+	"}\n"
+	;
+
+enum piglit_result
+piglit_display(void)
+{
+	/* UNREACHED */
+	return PIGLIT_FAIL;
+}
+
+void piglit_init(int argc, char **argv)
+{
+	GLuint prog;
+	bool pass;
+
+	piglit_require_extension("GL_ARB_separate_shader_objects");
+
+	prog = piglit_build_simple_program_unlinked_multiple_shaders(
+				GL_VERTEX_SHADER, vs_code,
+				GL_GEOMETRY_SHADER, gs_code,
+				0);
+
+	glProgramParameteri(prog, GL_PROGRAM_SEPARABLE, GL_TRUE);
+	piglit_check_gl_error(GL_NO_ERROR);
+
+	glLinkProgram(prog);
+	pass = !piglit_link_check_status_quiet(prog);
+
+	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
-- 
2.20.1



More information about the Piglit mailing list