[Piglit] [PATCH] Add a test runner for the Vulkan CTS
Dylan Baker
baker.dylan.c at gmail.com
Tue Mar 15 17:45:00 UTC 2016
Quoting Jason Ekstrand (2016-03-15 10:32:57)
> This is mostly a copy-and-paste of the original GLES3 dEQP runner with a
> few added tidbits that makes running the Vulkan CTS easier. The two
> force-skip cases were very useful in the early days when lots of tests were
> still in development and may no longer be needed. However, I have a
> feeling that we will yet want them.
> ---
> tests/deqp_vk.py | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 91 insertions(+)
> create mode 100644 tests/deqp_vk.py
>
> diff --git a/tests/deqp_vk.py b/tests/deqp_vk.py
> new file mode 100644
> index 0000000..bc84229
> --- /dev/null
> +++ b/tests/deqp_vk.py
> @@ -0,0 +1,91 @@
> +# Copyright 2014, 2015 Intel Corporation
> +#
> +# 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 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.
> +
> +"""Piglit integrations for dEQP VK tests."""
> +
> +import xml.etree.cElementTree as ET
> +import re
> +
> +from framework.test import deqp
> +
> +__all__ = ['profile']
> +
> +# Path to the deqp-gles3 executable.
> +_DEQP_VK_EXE = deqp.get_option('PIGLIT_DEQP_VK_EXE',
> + ('deqp-vk', 'exe'))
> +
> +_EXTRA_ARGS = deqp.get_option('PIGLIT_DEQP_VK_EXTRA_ARGS',
> + ('deqp-vk', 'extra_args'),
> + default='').split()
> +
> +
> +def _get_test_case(root, root_group, outputfile):
> + """Parser the test case list of Google Android CTS,
> + and store the test case list to dEQP-VK-cases.txt
> + """
> + for child in root:
> + root_group.append(child.get('name'))
> + if child.tag == "Test":
> + outputfile.write('TEST: {}\n'.format('.'.join(root_group)))
> + del root_group[-1]
> + else:
> + _get_test_case(child, root_group, outputfile)
> + del root_group[-1]
> +
> +
> +def _load_test_hierarchy(mustpass, case_list):
> + """Google have added a subset of dEQP to CTS test, the case list is stored
> + at some xml files. Such as: com.drawelements.deqp.gles3.xml This function
> + is used to parser the file, and generate a new dEQP-VK-cases.txt which
> + only contain the subset of dEQP.
> + """
> + tree = ET.parse(mustpass)
> + root = tree.getroot()
> + root_group = []
> + with open(case_list, 'w') as f:
> + _get_test_case(root, root_group, f)
> +
> +_deqp_assert = re.compile(r'deqp-vk: external/vulkancts/.*: Assertion `.*\' failed.')
> +
> +class DEQPVKTest(deqp.DEQPBaseTest):
> + timeout = 60
> + deqp_bin = _DEQP_VK_EXE
> + extra_args = [x for x in _EXTRA_ARGS if not x.startswith('--deqp-case')]
> +
> +
> + def __init__(self, *args, **kwargs):
> + super(DEQPVKTest, self).__init__(*args, **kwargs)
> +
> + def interpret_result(self):
> + if 'Failed to compile shader at vkGlslToSpirV' in self.result.out:
> + self.result.result = 'skip'
> + self.result.out += '\n\nMarked as skip because GLSLang failed to compile shaders'
> + elif _deqp_assert.search(self.result.err):
> + self.result.result = 'skip'
> + self.result.out += '\n\nMarked as skip because of a internal dEQP assertion'
> + else:
> + super(DEQPVKTest, self).interpret_result()
> +
> +
> +profile = deqp.make_profile( # pylint: disable=invalid-name
> + deqp.iter_deqp_test_cases(
> + deqp.gen_caselist_txt(_DEQP_VK_EXE, 'dEQP-VK-cases.txt',
> + _EXTRA_ARGS)),
> + DEQPVKTest)
> --
> 2.5.0.400.gff86faf
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/piglit
This looks fine, there are a few little tid-bits I'll update for
upstream piglit changes and push.
Dylan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20160315/d5267ba4/attachment.sig>
More information about the Piglit
mailing list