[Piglit] [PATCH 6/8] Import VkRunner

Dylan Baker dylan at pnwbakers.com
Thu Apr 5 18:14:45 UTC 2018


Quoting Neil Roberts (2018-04-04 15:56:53)
[snip]
> diff --git a/tests/vulkan/vkrunner/make-formats.py b/tests/vulkan/vkrunner/make-formats.py
> new file mode 100755
> index 000000000..6bb1030c0
> --- /dev/null
> +++ b/tests/vulkan/vkrunner/make-formats.py
> @@ -0,0 +1,93 @@
> +#!/usr/bin/python3

Unfortunately python scripts in piglit need to be python 2/3 compatible, I've
also got a few style nits.

Please use all of the future imports like the other scripts do

> +
> +import re
> +import sys
> +
> +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]+)$')

module constants should be ALL_CAPS

> +
> +swizzles = [ 'RGBA', 'BGRA', 'ARGB', 'ABGR' ]

no spaces between [ and '

two newlines between toplevel classes and functions

> +
> +def get_formats(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)

no parens around returns or yields uless they're returning a tuple please.

> +
> +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 "RGBA".find(letter) == -1:

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)
> +
> +formats = sorted(set(get_formats(sys.stdin)))
> +
> +print("""/* Automatically generated by make-formats.py */
> +static const struct vr_format
> +formats[] = {""")

mako is already a requirement for piglit, can we use it instead of printing a
file? It's much easier to understand and edit after the fact.

Also please use a main function and the if __name__ == "__main__" idiom.

Dylan

> +
> +for name in formats:
> +    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
> +
> +    print("""  {{
> +               .vk_format = VK_FORMAT_{},
> +               .name = "{}",
> +               .packed_size = {},
> +               .swizzle = VR_FORMAT_SWIZZLE_{},
> +               .mode = VR_FORMAT_MODE_{},
> +               .n_components = {},
> +               .components = {{""".format(
> +                    name,
> +                    name,
> +                    packed_size,
> +                    swizzle,
> +                    parts[1],
> +                    len(components)))
> +
> +    for letter, size in components:
> +        print("\t\t\t{{ .bits = {} }},".format(size))
> +
> +    print("""          }
> +       },""")
> +
> +print("};")

[snip]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20180405/a0708b2a/attachment.sig>


More information about the Piglit mailing list