Thanks for making the changes I requested! Reviewed-by: Dylan Baker <dy...@pnwbakers.com>
Quoting Neil Roberts (2018-04-06 05:14:20) > Note that the script is not run automatically as part of the build > process and instead vr-format-table.h is checked into git. > --- > > I’ve split the script out to make it easier to review. > > Thanks for the feedback Dylan. > > tests/vulkan/vkrunner/make-formats.py | 137 > ++++++++++++++++++++++++++++++++++ > 1 file changed, 137 insertions(+) > create mode 100755 tests/vulkan/vkrunner/make-formats.py > > diff --git a/tests/vulkan/vkrunner/make-formats.py > b/tests/vulkan/vkrunner/make-formats.py > new file mode 100755 > index 000000000..01e9000de > --- /dev/null > +++ b/tests/vulkan/vkrunner/make-formats.py > @@ -0,0 +1,137 @@ > +#!/usr/bin/env python > + > +# Copyright (C) 2018 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 (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. > + > +from __future__ import ( > + absolute_import, division, print_function, unicode_literals > +) > + > +# This script is used to generate vr-format-table.h from vulkan.h. It > +# is not run automatically as part of the build process but if need be > +# it can be used to update the file as follows: > +# > +# ./make-formats.py < /usr/include/vulkan/vulkan.h > vr-format-table.h > + > +import re > +import sys > +from mako.template import Template > + > +FORMAT_RE = re.compile(r'\bVK_FORMAT_([A-Z0-9_]+)\b') > +SKIP_RE = re.compile(r'(?:_BLOCK(?:_IMG)?|_KHR|^UNDEFINED|' > + r'^RANGE_SIZE|^MAX_ENUM|_RANGE)$') > +COMPONENT_RE = re.compile('([A-Z]+)([0-9]+)') > +PACK_RE = re.compile('PACK([0-9]+)$') > + > +SWIZZLES = ['RGBA', 'BGRA', 'ARGB', 'ABGR'] > + > +TEMPLATE="""\ > +/* Automatically generated by make-formats.py */ > +static const struct vr_format > +formats[] = { > +% for format in formats: > + { > + .vk_format = VK_FORMAT_${format['name']}, > + .name = "${format['name']}", > + .packed_size = ${format['packed_size']}, > + .swizzle = VR_FORMAT_SWIZZLE_${format['swizzle']}, > + .mode = VR_FORMAT_MODE_${format['mode']}, > + .n_components = ${len(format['components'])}, > + .components = { > + % for letter, size in format['components']: > + { .bits = ${size} }, > + % endfor > + } > + }, > +% endfor > +};""" > + > + > +def get_format_names(data): > + in_enum = False > + > + for line in data: > + if line.startswith('typedef enum VkFormat '): > + in_enum = True > + elif line.startswith('}'): > + in_enum = False > + if not in_enum: > + continue > + > + md = FORMAT_RE.search(line) > + if md is None: > + continue > + name = md.group(1) > + if SKIP_RE.search(name): > + continue > + yield name > + > + > +def get_formats(data): > + for name in sorted(set(get_format_names(data))): > + parts = name.split('_') > + > + components = get_components(parts[0]) > + > + if components is None: > + continue > + > + swizzle = get_swizzle(components) > + > + if len(parts) >= 3: > + md = PACK_RE.match(parts[2]) > + packed_size = int(md.group(1)) > + else: > + packed_size = 0 > + > + yield {'name': name, > + 'packed_size': packed_size, > + 'swizzle': swizzle, > + 'mode': parts[1], > + 'components': components} > + > + > +def get_components(name): > + components = [(md.group(1), int(md.group(2))) > + for md in COMPONENT_RE.finditer(name)] > + for letter, size in components: > + if letter not in "RGBA": > + return None > + return components > + > + > +def get_swizzle(components): > + component_letters = "".join((letter for letter, size in components)) > + for swizzle in SWIZZLES: > + if swizzle.startswith(component_letters): > + return swizzle > + print("Unknown swizzle {}".format(component_letters), > + file=sys.stderr) > + sys.exit(1) > + > + > +def main(): > + template = Template(TEMPLATE) > + print(template.render(formats = get_formats(sys.stdin))) > + > + > +if __name__ == '__main__': > + main() > -- > 2.14.3 > > _______________________________________________ > Piglit mailing list > Piglit@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/piglit
signature.asc
Description: signature
_______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit