[Piglit] [PATCH 1/2] glslparsertest: support compatibility profile tests
Marek Olšák
maraeo at gmail.com
Wed May 23 01:29:01 UTC 2018
From: Marek Olšák <marek.olsak at amd.com>
---
framework/test/glsl_parser_test.py | 5 +++++
tests/glslparsertest/glslparsertest.c | 18 +++++++++++++-----
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/framework/test/glsl_parser_test.py b/framework/test/glsl_parser_test.py
index 46344a8ab..8f2904eb1 100644
--- a/framework/test/glsl_parser_test.py
+++ b/framework/test/glsl_parser_test.py
@@ -58,20 +58,23 @@ def _is_gles_version(version):
assert not isinstance(version, six.binary_type), \
'{}({})'.format(version, type(version))
if isinstance(version, six.text_type):
# GLES 3+ versions should have "es" appended, even though
# glslparsertest doesn't require them. If the version ends in "es" then
# it is a GLES test for sure.
if version.endswith('es'):
return True
+ if version.endswith('compatibility'):
+ return False
+
version = float(version)
return version in [1.0, 3.0, 3.1, 3.2]
class GLSLParserNoConfigError(exceptions.PiglitInternalError):
pass
class GLSLParserInternalError(exceptions.PiglitInternalError):
@@ -105,20 +108,22 @@ class Parser(object):
raise exceptions.PiglitFatalError(
'In file "{}":\n{}'.format(filepath, six.text_type(e)))
self.set_skip_conditions()
def set_skip_conditions(self):
"""Set OpenGL and OpenGL ES fast skipping conditions."""
glsl = self.config['glsl_version']
if _is_gles_version(glsl):
self.glsl_es_version = float(glsl[:3])
+ elif glsl.endswith('compatibility'):
+ self.glsl_version = float(glsl[:3])
else:
self.glsl_version = float(glsl)
req = self.config['require_extensions']
self.gl_required = set(r for r in req.split() if not r.startswith('!'))
# If GLES is requested, but piglit was not built with a gles version,
# then ARB_ES3<ver>_compatibility is required. Add it to
# self.gl_required
if self.glsl_es_version and not _HAS_GLES_BIN:
diff --git a/tests/glslparsertest/glslparsertest.c b/tests/glslparsertest/glslparsertest.c
index 3ad0906b1..61ea46ce2 100644
--- a/tests/glslparsertest/glslparsertest.c
+++ b/tests/glslparsertest/glslparsertest.c
@@ -28,29 +28,33 @@
/** @file glslparsertest.c
*
* Tests that compiling (but not linking or drawing with) a given
* shader either succeeds or fails as expected.
*/
#include <errno.h>
#include "piglit-util-gl.h"
+#define COMPAT_FLAG (1u << 31)
+
static unsigned parse_glsl_version_number(const char *str);
static int process_options(int argc, char **argv);
PIGLIT_GL_TEST_CONFIG_BEGIN
argc = process_options(argc, argv);
if (argc > 3) {
- const unsigned int int_version
+ const unsigned int version
= parse_glsl_version_number(argv[3]);
+ const bool compat = !!(version & COMPAT_FLAG);
+ const unsigned int int_version = version & ~COMPAT_FLAG;
switch (int_version) {
/* This is a hack to support es
*
* This works because version 1.00, 3.00, 3.10, 3.20 (even
* though 3.x should include "es") are unique to GLES, there is
* no desktop OpenGL shader language 1.00, 3.00, 3.10, or 3.20
*/
case 100:
config.supports_gl_compat_version = 10;
config.supports_gl_es_version = 20;
@@ -64,21 +68,21 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
config.supports_gl_es_version = 31;
break;
case 320:
config.supports_gl_compat_version = 10;
config.supports_gl_es_version = 32;
break;
default: {
const unsigned int gl_version
= required_gl_version_from_glsl_version(int_version);
config.supports_gl_compat_version = gl_version;
- if (gl_version < 31)
+ if (gl_version < 31 || compat)
config.supports_gl_core_version = 0;
else
config.supports_gl_core_version = gl_version;
}
break;
}
} else {
config.supports_gl_compat_version = 10;
config.supports_gl_es_version = 20;
}
@@ -398,51 +402,55 @@ static void usage(char *name)
/**
* Process any options and remove them from the argv array. Return
* the new argc.
*/
static int
process_options(int argc, char **argv)
{
int i = 1;
int new_argc = 1;
while (i < argc) {
- if (argv[i][0] == '-') {
+ if (argv[i][0] == '-' && strcmp(argv[i], "-compat") != 0) {
if (strcmp(argv[i], "--check-link") == 0)
check_link = 1;
else
usage(argv[0]);
/* do not retain the option; we've processed it */
i++;
} else {
/* retain the option in the argv array */
argv[new_argc++] = argv[i++];
}
}
return new_argc;
}
static unsigned
parse_glsl_version_number(const char *str)
{
unsigned major = 0;
unsigned minor = 0;
+ unsigned flags = 0;
/* Accept a return value of either 1 or 2 from sscanf(), so
* that the version number may be supplied as either "<int>"
* or "<int>.<int>".
*/
if (sscanf(str, "%u.%u", &major, &minor) == 0) {
printf("Ill-formed GLSL version number: %s\n", str);
piglit_report_result(PIGLIT_FAIL);
}
- return (major * 100) + minor;
+ if (strstr(str, "compatibility"))
+ flags |= COMPAT_FLAG;
+
+ return ((major * 100) + minor) | flags;
}
static unsigned
parse_glsl_version_string(const char *str)
{
if (piglit_is_gles()) {
/* In GLSL ES, the string returned by
* glGetString(GL_SHADING_LANGUAGE_VERSION) is
* prefixed by some text. Verify that the expected
@@ -505,21 +513,21 @@ piglit_init(int argc, char**argv)
filename = argv[1];
if (strcmp(argv[2], "pass") == 0)
expected_pass = 1;
else if (strcmp(argv[2], "fail") == 0)
expected_pass = 0;
else
usage(argv[0]);
if (argc > 3)
- requested_version = parse_glsl_version_number(argv[3]);
+ requested_version = parse_glsl_version_number(argv[3]) & ~COMPAT_FLAG;
gl_version_times_10 = piglit_get_gl_version();
if (gl_version_times_10 < 20
&& !piglit_is_extension_supported("GL_ARB_shader_objects")) {
printf("Requires OpenGL 2.0\n");
piglit_report_result(PIGLIT_SKIP);
}
glsl_version_string = (char *)
--
2.17.0
More information about the Piglit
mailing list