[Mesa-dev] [PATCH] anv/entrypoints_gen: Dedent the C code
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Wed Sep 20 10:53:42 UTC 2017
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
On 19/09/17 22:49, Jason Ekstrand wrote:
> This makes the C code be justified over to the left.
> ---
> src/intel/vulkan/anv_entrypoints_gen.py | 392 ++++++++++++++++----------------
> 1 file changed, 196 insertions(+), 196 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py
> index 983be09..7ff4569 100644
> --- a/src/intel/vulkan/anv_entrypoints_gen.py
> +++ b/src/intel/vulkan/anv_entrypoints_gen.py
> @@ -37,206 +37,206 @@ from anv_extensions import *
> # function and a power-of-two size table. The prime numbers are determined
> # experimentally.
>
> -TEMPLATE_H = Template(textwrap.dedent("""\
> - /* This file generated from ${filename}, don't edit directly. */
> -
> - struct anv_dispatch_table {
> - union {
> - void *entrypoints[${len(entrypoints)}];
> - struct {
> - % for _, name, _, _, _, guard in entrypoints:
> - % if guard is not None:
> - #ifdef ${guard}
> - PFN_vk${name} ${name};
> - #else
> - void *${name};
> - # endif
> - % else:
> - PFN_vk${name} ${name};
> - % endif
> - % endfor
> - };
> - };
> - };
> -
> - % for type_, name, args, num, h, guard in entrypoints:
> - % if guard is not None:
> - #ifdef ${guard}
> - % endif
> - ${type_} anv_${name}(${args});
> - ${type_} gen7_${name}(${args});
> - ${type_} gen75_${name}(${args});
> - ${type_} gen8_${name}(${args});
> - ${type_} gen9_${name}(${args});
> - ${type_} gen10_${name}(${args});
> - % if guard is not None:
> - #endif // ${guard}
> - % endif
> - % endfor
> - """), output_encoding='utf-8')
> -
> -TEMPLATE_C = Template(textwrap.dedent(u"""\
> - /*
> - * Copyright © 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 (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.
> - */
> -
> - /* This file generated from ${filename}, don't edit directly. */
> -
> - #include "anv_private.h"
> -
> - struct anv_entrypoint {
> - uint32_t name;
> - uint32_t hash;
> - };
> -
> - /* We use a big string constant to avoid lots of reloctions from the entry
> - * point table to lots of little strings. The entries in the entry point table
> - * store the index into this big string.
> - */
> -
> - static const char strings[] =
> - % for _, name, _, _, _, _ in entrypoints:
> - "vk${name}\\0"
> - % endfor
> - ;
> -
> - static const struct anv_entrypoint entrypoints[] = {
> - % for _, name, _, num, h, _ in entrypoints:
> - [${num}] = { ${offsets[num]}, ${'{:0=#8x}'.format(h)} }, /* vk${name} */
> - % endfor
> - };
> -
> - /* Weak aliases for all potential implementations. These will resolve to
> - * NULL if they're not defined, which lets the resolve_entrypoint() function
> - * either pick the correct entry point.
> - */
> -
> - % for layer in ['anv', 'gen7', 'gen75', 'gen8', 'gen9', 'gen10']:
> - % for type_, name, args, _, _, guard in entrypoints:
> +TEMPLATE_H = Template("""\
> +/* This file generated from ${filename}, don't edit directly. */
> +
> +struct anv_dispatch_table {
> + union {
> + void *entrypoints[${len(entrypoints)}];
> + struct {
> + % for _, name, _, _, _, guard in entrypoints:
> % if guard is not None:
> - #ifdef ${guard}
> - % endif
> - ${type_} ${layer}_${name}(${args}) __attribute__ ((weak));
> - % if guard is not None:
> - #endif // ${guard}
> - % endif
> - % endfor
> -
> - const struct anv_dispatch_table ${layer}_layer = {
> - % for _, name, args, _, _, guard in entrypoints:
> - % if guard is not None:
> - #ifdef ${guard}
> - % endif
> - .${name} = ${layer}_${name},
> - % if guard is not None:
> - #endif // ${guard}
> - % endif
> - % endfor
> - };
> - % endfor
> -
> - static void * __attribute__ ((noinline))
> - anv_resolve_entrypoint(const struct gen_device_info *devinfo, uint32_t index)
> - {
> - if (devinfo == NULL) {
> - return anv_layer.entrypoints[index];
> - }
> -
> - switch (devinfo->gen) {
> - case 10:
> - if (gen10_layer.entrypoints[index])
> - return gen10_layer.entrypoints[index];
> - /* fall through */
> - case 9:
> - if (gen9_layer.entrypoints[index])
> - return gen9_layer.entrypoints[index];
> - /* fall through */
> - case 8:
> - if (gen8_layer.entrypoints[index])
> - return gen8_layer.entrypoints[index];
> - /* fall through */
> - case 7:
> - if (devinfo->is_haswell && gen75_layer.entrypoints[index])
> - return gen75_layer.entrypoints[index];
> -
> - if (gen7_layer.entrypoints[index])
> - return gen7_layer.entrypoints[index];
> - /* fall through */
> - case 0:
> - return anv_layer.entrypoints[index];
> - default:
> - unreachable("unsupported gen\\n");
> - }
> - }
> -
> - /* Hash table stats:
> - * size ${hash_size} entries
> - * collisions entries:
> - % for i in xrange(10):
> - * ${i}${'+' if i == 9 else ''} ${collisions[i]}
> - % endfor
> - */
> -
> - #define none ${'{:#x}'.format(none)}
> - static const uint16_t map[] = {
> - % for i in xrange(0, hash_size, 8):
> - % for j in xrange(i, i + 8):
> - ## This is 6 because the 0x is counted in the length
> - % if mapping[j] & 0xffff == 0xffff:
> - none,
> +#ifdef ${guard}
> + PFN_vk${name} ${name};
> +#else
> + void *${name};
> +# endif
> % else:
> - ${'{:0=#6x}'.format(mapping[j] & 0xffff)},
> + PFN_vk${name} ${name};
> % endif
> % endfor
> - % endfor
> - };
> -
> - void *
> - anv_lookup_entrypoint(const struct gen_device_info *devinfo, const char *name)
> - {
> - static const uint32_t prime_factor = ${prime_factor};
> - static const uint32_t prime_step = ${prime_step};
> - const struct anv_entrypoint *e;
> - uint32_t hash, h, i;
> - const char *p;
> -
> - hash = 0;
> - for (p = name; *p; p++)
> - hash = hash * prime_factor + *p;
> -
> - h = hash;
> - do {
> - i = map[h & ${hash_mask}];
> - if (i == none)
> - return NULL;
> - e = &entrypoints[i];
> - h += prime_step;
> - } while (e->hash != hash);
> -
> - if (strcmp(name, strings + e->name) != 0)
> - return NULL;
> -
> - return anv_resolve_entrypoint(devinfo, i);
> - }"""), output_encoding='utf-8')
> + };
> + };
> +};
> +
> +% for type_, name, args, num, h, guard in entrypoints:
> + % if guard is not None:
> +#ifdef ${guard}
> + % endif
> + ${type_} anv_${name}(${args});
> + ${type_} gen7_${name}(${args});
> + ${type_} gen75_${name}(${args});
> + ${type_} gen8_${name}(${args});
> + ${type_} gen9_${name}(${args});
> + ${type_} gen10_${name}(${args});
> + % if guard is not None:
> +#endif // ${guard}
> + % endif
> +% endfor
> +""", output_encoding='utf-8')
> +
> +TEMPLATE_C = Template(u"""\
> +/*
> + * Copyright © 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 (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.
> + */
> +
> +/* This file generated from ${filename}, don't edit directly. */
> +
> +#include "anv_private.h"
> +
> +struct anv_entrypoint {
> + uint32_t name;
> + uint32_t hash;
> +};
> +
> +/* We use a big string constant to avoid lots of reloctions from the entry
> + * point table to lots of little strings. The entries in the entry point table
> + * store the index into this big string.
> + */
> +
> +static const char strings[] =
> +% for _, name, _, _, _, _ in entrypoints:
> + "vk${name}\\0"
> +% endfor
> +;
> +
> +static const struct anv_entrypoint entrypoints[] = {
> +% for _, name, _, num, h, _ in entrypoints:
> + [${num}] = { ${offsets[num]}, ${'{:0=#8x}'.format(h)} }, /* vk${name} */
> +% endfor
> +};
> +
> +/* Weak aliases for all potential implementations. These will resolve to
> + * NULL if they're not defined, which lets the resolve_entrypoint() function
> + * either pick the correct entry point.
> + */
> +
> +% for layer in ['anv', 'gen7', 'gen75', 'gen8', 'gen9', 'gen10']:
> + % for type_, name, args, _, _, guard in entrypoints:
> + % if guard is not None:
> +#ifdef ${guard}
> + % endif
> + ${type_} ${layer}_${name}(${args}) __attribute__ ((weak));
> + % if guard is not None:
> +#endif // ${guard}
> + % endif
> + % endfor
> +
> + const struct anv_dispatch_table ${layer}_layer = {
> + % for _, name, args, _, _, guard in entrypoints:
> + % if guard is not None:
> +#ifdef ${guard}
> + % endif
> + .${name} = ${layer}_${name},
> + % if guard is not None:
> +#endif // ${guard}
> + % endif
> + % endfor
> + };
> +% endfor
> +
> +static void * __attribute__ ((noinline))
> +anv_resolve_entrypoint(const struct gen_device_info *devinfo, uint32_t index)
> +{
> + if (devinfo == NULL) {
> + return anv_layer.entrypoints[index];
> + }
> +
> + switch (devinfo->gen) {
> + case 10:
> + if (gen10_layer.entrypoints[index])
> + return gen10_layer.entrypoints[index];
> + /* fall through */
> + case 9:
> + if (gen9_layer.entrypoints[index])
> + return gen9_layer.entrypoints[index];
> + /* fall through */
> + case 8:
> + if (gen8_layer.entrypoints[index])
> + return gen8_layer.entrypoints[index];
> + /* fall through */
> + case 7:
> + if (devinfo->is_haswell && gen75_layer.entrypoints[index])
> + return gen75_layer.entrypoints[index];
> +
> + if (gen7_layer.entrypoints[index])
> + return gen7_layer.entrypoints[index];
> + /* fall through */
> + case 0:
> + return anv_layer.entrypoints[index];
> + default:
> + unreachable("unsupported gen\\n");
> + }
> +}
> +
> +/* Hash table stats:
> + * size ${hash_size} entries
> + * collisions entries:
> +% for i in xrange(10):
> + * ${i}${'+' if i == 9 else ''} ${collisions[i]}
> +% endfor
> + */
> +
> +#define none ${'{:#x}'.format(none)}
> +static const uint16_t map[] = {
> +% for i in xrange(0, hash_size, 8):
> + % for j in xrange(i, i + 8):
> + ## This is 6 because the 0x is counted in the length
> + % if mapping[j] & 0xffff == 0xffff:
> + none,
> + % else:
> + ${'{:0=#6x}'.format(mapping[j] & 0xffff)},
> + % endif
> + % endfor
> +% endfor
> +};
> +
> +void *
> +anv_lookup_entrypoint(const struct gen_device_info *devinfo, const char *name)
> +{
> + static const uint32_t prime_factor = ${prime_factor};
> + static const uint32_t prime_step = ${prime_step};
> + const struct anv_entrypoint *e;
> + uint32_t hash, h, i;
> + const char *p;
> +
> + hash = 0;
> + for (p = name; *p; p++)
> + hash = hash * prime_factor + *p;
> +
> + h = hash;
> + do {
> + i = map[h & ${hash_mask}];
> + if (i == none)
> + return NULL;
> + e = &entrypoints[i];
> + h += prime_step;
> + } while (e->hash != hash);
> +
> + if (strcmp(name, strings + e->name) != 0)
> + return NULL;
> +
> + return anv_resolve_entrypoint(devinfo, i);
> +}""", output_encoding='utf-8')
>
> NONE = 0xffff
> HASH_SIZE = 256
More information about the mesa-dev
mailing list