[Piglit] [PATCH] arb_shading_language_420pack: test binding different sampler types to the same tex unit
Timothy Arceri
tarceri at itsqueeze.com
Thu Apr 13 02:00:26 UTC 2017
https://bugs.freedesktop.org/show_bug.cgi?id=97524
---
tests/all.py | 1 +
.../execution/CMakeLists.gl.txt | 1 +
.../execution/active-sampler-conflict.c | 197 +++++++++++++++++++++
3 files changed, 199 insertions(+)
create mode 100644 tests/spec/arb_shading_language_420pack/execution/active-sampler-conflict.c
diff --git a/tests/all.py b/tests/all.py
index ee70431..e54d9f2 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -2447,20 +2447,21 @@ with profile.test_list.group_manager(
with profile.test_list.group_manager(
PiglitGLTest,
grouptools.join('spec', 'ARB_shading_language_420pack')) as g:
g(['built-in-constants',
os.path.join(TESTS_DIR, 'spec', 'arb_shading_language_420pack',
'minimum-maximums.txt')],
'built-in constants')
g(['arb_shading_language_420pack-multiple-layout-qualifiers'],
'multiple layout qualifiers')
+ g(['arb_shading_language_420pack-active-sampler-conflict'], 'active sampler conflict')
g(['arb_shading_language_420pack-binding-layout'], 'binding layout')
# Group ARB_enhanced_layouts
with profile.test_list.group_manager(
PiglitGLTest,
grouptools.join('spec', 'arb_enhanced_layouts')) as g:
g(['arb_enhanced_layouts-explicit-offset-bufferstorage'],
'explicit-offset-bufferstorage')
g(['arb_enhanced_layouts-transform-feedback-layout-qualifiers', 'vs'],
'arb_enhanced_layouts-transform-feedback-layout-qualifiers_vs',
diff --git a/tests/spec/arb_shading_language_420pack/execution/CMakeLists.gl.txt b/tests/spec/arb_shading_language_420pack/execution/CMakeLists.gl.txt
index 73d0e82..61ca4fa 100644
--- a/tests/spec/arb_shading_language_420pack/execution/CMakeLists.gl.txt
+++ b/tests/spec/arb_shading_language_420pack/execution/CMakeLists.gl.txt
@@ -2,14 +2,15 @@ include_directories(
${GLEXT_INCLUDE_DIR}
${OPENGL_INCLUDE_PATH}
${piglit_SOURCE_DIR}/tests/util
)
link_libraries (
piglitutil_${piglit_target_api}
${OPENGL_gl_LIBRARY}
)
+piglit_add_executable (arb_shading_language_420pack-active-sampler-conflict active-sampler-conflict.c)
piglit_add_executable (arb_shading_language_420pack-binding-layout binding-layout.c)
piglit_add_executable (arb_shading_language_420pack-multiple-layout-qualifiers multiple-layout-qualifiers.c)
# vim: ft=cmake:
diff --git a/tests/spec/arb_shading_language_420pack/execution/active-sampler-conflict.c b/tests/spec/arb_shading_language_420pack/execution/active-sampler-conflict.c
new file mode 100644
index 0000000..c786636
--- /dev/null
+++ b/tests/spec/arb_shading_language_420pack/execution/active-sampler-conflict.c
@@ -0,0 +1,197 @@
+/*
+ * Copyright © 2017 Timothy Arceri
+ *
+ * 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.
+ */
+
+/**
+ * \file active-sampler-conflict.c
+ *
+ * Verify results of program validation when a conflicting sampler
+ * configuration is used via the binding layout qualifier.
+ *
+ * Section 11.1.3.11 (Validation) of the OpenGL 4.5 spec says:
+ *
+ * "An INVALID_OPERATION error is generated by any command that trans-
+ * fers vertices to the GL or launches compute work if the current set of
+ * active program objects cannot be executed, for reasons including:
+ *
+ * - any two active samplers in the current program object are
+ * of different types, but refer to the same texture image
+ * unit,"
+ *
+ * Here we test the INVALID_OPERATION by both calling glValidateProgram
+ * and glDrawArrays.
+ */
+#include "piglit-util-gl.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+ config.supports_gl_core_version = 31;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+static const char *vs_code_binding_0 =
+ "#version 140\n"
+ "#extension GL_ARB_shading_language_420pack: require\n"
+ "layout(binding = 0) uniform samplerBuffer buffer;\n"
+ "\n"
+ "void main()\n"
+ "{\n"
+ " gl_Position = texelFetch(buffer, 0);\n"
+ "}\n"
+ ;
+
+static const char *vs_code_binding_1 =
+ "#version 140\n"
+ "#extension GL_ARB_shading_language_420pack: require\n"
+ "layout(binding = 1) uniform samplerBuffer buffer;\n"
+ "\n"
+ "void main()\n"
+ "{\n"
+ " gl_Position = texelFetch(buffer, 0);\n"
+ "}\n"
+ ;
+
+static const char *fs_code_binding_0 =
+ "#version 140\n"
+ "#extension GL_ARB_shading_language_420pack: require\n"
+ "layout(binding = 0) uniform samplerCube cubemapTex;\n"
+ "\n"
+ "void main()\n"
+ "{\n"
+ " gl_FragColor = textureCube(cubemapTex, vec3(gl_FragCoord.xyz));\n"
+ "}\n"
+ ;
+
+static bool
+program_check_status(GLuint prog)
+{
+ GLchar *info = NULL;
+ GLint size;
+ GLint ok;
+
+ glValidateProgram(prog);
+ glGetProgramiv(prog, GL_VALIDATE_STATUS, &ok);
+
+ /* Some drivers return a size of 1 for an empty log. This is the size
+ * of a log that contains only a terminating NUL character.
+ */
+ glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &size);
+ if (size > 1) {
+ info = malloc(size);
+ glGetProgramInfoLog(prog, size, NULL, info);
+ }
+
+ if (!ok) {
+ printf("Failed to validate the program: %s\n",
+ (info != NULL) ? info : "<empty log>");
+ }
+ else if (0 && info != NULL) {
+ /* Enable this to get extra linking info.
+ * Even if there's no link errors, the info log may
+ * have some remarks.
+ */
+ printf("Program validation warning: %s\n", info);
+ }
+
+ free(info);
+
+ return ok;
+}
+
+
+void piglit_init(int argc, char **argv)
+{
+ GLuint prog;
+ bool pass = true;
+
+ piglit_require_extension("GL_ARB_shading_language_420pack");
+
+ GLuint vao;
+ glGenVertexArrays(1, &vao);
+ glBindVertexArray(vao);
+
+ /* First, try an invalid combination */
+ prog = piglit_build_simple_program(vs_code_binding_0,
+ fs_code_binding_0);
+ glUseProgram(prog);
+
+ if (program_check_status(prog)) {
+ fprintf(stderr,
+ "Program was validated with conflicting "
+ "sampler configuration.\n");
+ pass = false;
+ }
+
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
+
+ pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass;
+
+ /* Re-validate the invalid program. */
+ if (program_check_status(prog)) {
+ fprintf(stderr,
+ "Program was validated with conflicting "
+ "sampler configuration (second attempt).\n");
+ pass = false;
+ }
+
+ /* Clean up. */
+ glUseProgram(0);
+ glDeleteProgram(prog);
+
+ /* Now try a valid combination. */
+ prog = piglit_build_simple_program(vs_code_binding_1,
+ fs_code_binding_0);
+ glUseProgram(prog);
+
+ if (!program_check_status(prog)) {
+ fprintf(stderr,
+ "Program was not validated with non-conflicting "
+ "sampler configuration.\n");
+ pass = false;
+ }
+
+
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
+
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ /* Re-validate the valid program. */
+ if (!program_check_status(prog)) {
+ fprintf(stderr,
+ "Program was not validated with non-conflicting "
+ "sampler configuration (second attempt).\n");
+ pass = false;
+ }
+
+ /* Clean up. */
+ glUseProgram(0);
+ glDeleteProgram(prog);
+
+ piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
+
+enum piglit_result
+piglit_display(void)
+{
+ /* Not reached */
+ return PIGLIT_FAIL;
+}
--
2.9.3
More information about the Piglit
mailing list