[Piglit] [PATCH] all.py: filter directories traversed to find shader tests
Dylan Baker
dylan at pnwbakers.com
Tue Oct 24 17:01:30 UTC 2017
Quoting Brian Paul (2017-10-23 10:47:50)
> The script searches all files under tests/ and generated_tests/ for
> files ending in ".shader_test". For each match, a ShaderTest() object
> is created and added to the test list.
>
> For GL extensions or versions not supported by the driver, this is
> wasted effort.
>
> This patch looks for directories under spec/ and tries to determine if
> the extension/feature is actually supported by the current driver. If
> not, it's skipped.
>
> This somewhat reduces Piglit start up time, but substantially more
> time is spent in the ShaderTest() constructor which actually opens
> and parses each file to determine its GL/ES dependencies. I'll try
> to address that in the future.
>
> v2:
> Use a different approach suggested by Dylan:
> if not is_dirpath_feature_supported(dirpath):
> continue
> Also, fix naming conventions and minor formatting issues.
> ---
> tests/all.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 56 insertions(+), 1 deletion(-)
>
> diff --git a/tests/all.py b/tests/all.py
> index fd3371a..0db1288 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -8,11 +8,13 @@ import collections
> import itertools
> import os
> import platform
> +import re
>
> import six
> from six.moves import range
>
> from framework import grouptools
> +from framework.test import opengl
> from framework import options
> from framework.profile import TestProfile
> from framework.driver_classifier import DriverClassifier
> @@ -204,16 +206,69 @@ def power_set(s):
> result.append(p + [s[-1]])
> return result
>
> +
> +def gl_extension_supported(ext_name):
> + """Is the named OpenGL extension supported?"""
> + return ext_name in wfl_info.gl_extensions
> +
> +def is_feature_directory_supported(dir_name):
> + """Determine if dir_name specifies an OpenGL feature (extension or GL
> + version) which is supported by the host. If we return False, it means
> + the extension/version is definitely not supported. If we return True,
> + it means the extension/version is possibly suppported. We're a little
> + fuzzy because we don't yet parse all the directory name possibilities
> + (like ES tests).
> + """
> + if dir_name[:4] in {"amd_", "arb_", "ati_", "ext_", "khr_", "oes_"}:
> + # The directory is a GL extension name, but of the format "arb_foo_bar"
> + # instead of "GL_ARB_foo_bar". We convert the former into the later
> + # and check if the extension is supported.
> + extName = "GL_" + dir_name[0:4].upper() + dir_name[4:]
If you could convert this to ext_name,
> + return gl_extension_supported(extName)
> + elif re.match("gl-\d\.\d+", dir_name[0:3]):
> + # The directory is a GL version
> + version = dir_name[3:]
> + return float(version) <= float(wfl_info.gl_version)
> + elif re.match("glsl-\d\.\d+", dir_name[0:5]):
> + # The directory is a GLSL version
> + version = dir_name[5:]
> + return float(version) <= float(wfl_info.glsl_version)
> + else:
> + # The directory is something else. Don't skip it.
> + return True
> +
> +
> +def is_dirpath_feature_supported(dirpath):
> + """Examine dirpath to see if it ends in "spec/foobar". If so, check
> + if foobar is a supported extension/version/feature. Return False if
> + foobar is not supported, True otherwise.
> + """
> + p = os.path.split(dirpath)
> + q = os.path.split(p[0])
> + if q[1] == "spec":
> + if not is_feature_directory_supported(p[1]):
> + return False
> + return True
> +
> +
> ######
> # Collecting all tests
> profile = TestProfile() # pylint: disable=invalid-name
>
> shader_tests = collections.defaultdict(list)
>
> +wfl_info = opengl.WflInfo()
> +
> +
> # Find and add all shader tests.
> for basedir in [TESTS_DIR, GENERATED_TESTS_DIR]:
> - for dirpath, _, filenames in os.walk(basedir):
> + for dirpath, dirnames, filenames in os.walk(basedir):
I don't think this change is relavent in v2
With those two changes:
Reviewed-by: Dylan Baker <dylan at pnwbakers.com>
> groupname = grouptools.from_path(os.path.relpath(dirpath, basedir))
> +
> + if not is_dirpath_feature_supported(dirpath):
> + print("Skipping {}".format(dirpath))
> + continue
> +
> for filename in filenames:
> testname, ext = os.path.splitext(filename)
> if ext == '.shader_test':
> --
> 1.9.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20171024/9a22e716/attachment.sig>
More information about the Piglit
mailing list