On 20/01/18 20:11, Jason Ekstrand wrote:
> The new anv_extensions_gen.py is the code generator while the old
> anv_extensions.py file is purely declarative.
> ---
>  src/intel/Makefile.vulkan.am           |   3 +-
>  src/intel/vulkan/anv_extensions.py     | 154 ---------------------------
>  src/intel/vulkan/anv_extensions_gen.py | 184 
> +++++++++++++++++++++++++++++++++
>  src/intel/vulkan/meson.build           |   3 +-
>  4 files changed, 188 insertions(+), 156 deletions(-)
>  create mode 100644 src/intel/vulkan/anv_extensions_gen.py
>
> diff --git a/src/intel/Makefile.vulkan.am b/src/intel/Makefile.vulkan.am
> index 811faab..cacd049 100644
> --- a/src/intel/Makefile.vulkan.am
> +++ b/src/intel/Makefile.vulkan.am
> @@ -36,7 +36,8 @@ vulkan/anv_entrypoints.c: vulkan/anv_entrypoints_gen.py \
>               --outdir $(builddir)/vulkan
>  vulkan/anv_entrypoints.h: vulkan/anv_entrypoints.c
>  
> -vulkan/anv_extensions.c: vulkan/anv_extensions.py \
> +vulkan/anv_extensions.c: vulkan/anv_extensions_gen.py \
> +                      vulkan/anv_extensions.py \
>                        $(vulkan_api_xml) \
>                        $(vk_android_native_buffer_xml)
>       $(MKDIR_GEN)

There is a bug in the autotools build, it is needed to update the
command to generate the files:

diff --git a/src/intel/Makefile.vulkan.am b/src/intel/Makefile.vulkan.am
index 7157772062c..7823b608804 100644
--- a/src/intel/Makefile.vulkan.am
+++ b/src/intel/Makefile.vulkan.am
@@ -41,7 +41,7 @@ vulkan/anv_extensions.c: vulkan/anv_extensions_gen.py \
                         $(vulkan_api_xml) \
                         $(vk_android_native_buffer_xml)
        $(MKDIR_GEN)
-       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_extensions.py \
+       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_extensions_gen.py \
                --xml $(vulkan_api_xml) \
                --xml $(vk_android_native_buffer_xml) \
                --out-c $@
@@ -51,7 +51,7 @@ vulkan/anv_extensions.h: vulkan/anv_extensions_gen.py \
                         $(vulkan_api_xml) \
                         $(vk_android_native_buffer_xml)
        $(MKDIR_GEN)
-       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_extensions.py \
+       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_extensions_gen.py \
                --xml $(vulkan_api_xml) \
                --xml $(vk_android_native_buffer_xml) \
                --out-h $@

Sam

> diff --git a/src/intel/vulkan/anv_extensions.py 
> b/src/intel/vulkan/anv_extensions.py
> index adfebca..ae30ec9 100644
> --- a/src/intel/vulkan/anv_extensions.py
> +++ b/src/intel/vulkan/anv_extensions.py
> @@ -130,157 +130,3 @@ class VkVersion:
>          return self.__int_ver().__cmp__(other.__int_ver())
>  
>  MAX_API_VERSION = VkVersion(MAX_API_VERSION)
> -
> -def _init_exts_from_xml(xml):
> -    """ Walk the Vulkan XML and fill out extra extension information. """
> -
> -    xml = et.parse(xml)
> -
> -    ext_name_map = {}
> -    for ext in EXTENSIONS:
> -        ext_name_map[ext.name] = ext
> -
> -    for ext_elem in xml.findall('.extensions/extension'):
> -        ext_name = ext_elem.attrib['name']
> -        if ext_name not in ext_name_map:
> -            continue
> -
> -        # Workaround for VK_ANDROID_native_buffer. Its <extension> element in
> -        # vk.xml lists it as supported="disabled" and provides only a stub
> -        # definition.  Its <extension> element in Mesa's custom
> -        # vk_android_native_buffer.xml, though, lists it as
> -        # supported='android-vendor' and fully defines the extension. We want
> -        # to skip the <extension> element in vk.xml.
> -        if ext_elem.attrib['supported'] == 'disabled':
> -            assert ext_name == 'VK_ANDROID_native_buffer'
> -            continue
> -
> -        ext = ext_name_map[ext_name]
> -        ext.type = ext_elem.attrib['type']
> -
> -_TEMPLATE = COPYRIGHT + """
> -#include "anv_private.h"
> -
> -#include "vk_util.h"
> -
> -/* Convert the VK_USE_PLATFORM_* defines to booleans */
> -%for platform in ['ANDROID', 'WAYLAND', 'XCB', 'XLIB']:
> -#ifdef VK_USE_PLATFORM_${platform}_KHR
> -#   undef VK_USE_PLATFORM_${platform}_KHR
> -#   define VK_USE_PLATFORM_${platform}_KHR true
> -#else
> -#   define VK_USE_PLATFORM_${platform}_KHR false
> -#endif
> -%endfor
> -
> -/* And ANDROID too */
> -#ifdef ANDROID
> -#   undef ANDROID
> -#   define ANDROID true
> -#else
> -#   define ANDROID false
> -#endif
> -
> -#define ANV_HAS_SURFACE (VK_USE_PLATFORM_WAYLAND_KHR || \\
> -                         VK_USE_PLATFORM_XCB_KHR || \\
> -                         VK_USE_PLATFORM_XLIB_KHR)
> -
> -bool
> -anv_instance_extension_supported(const char *name)
> -{
> -%for ext in instance_extensions:
> -    if (strcmp(name, "${ext.name}") == 0)
> -        return ${ext.enable};
> -%endfor
> -    return false;
> -}
> -
> -VkResult anv_EnumerateInstanceExtensionProperties(
> -    const char*                                 pLayerName,
> -    uint32_t*                                   pPropertyCount,
> -    VkExtensionProperties*                      pProperties)
> -{
> -    VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
> -
> -%for ext in instance_extensions:
> -    if (${ext.enable}) {
> -        vk_outarray_append(&out, prop) {
> -            *prop = (VkExtensionProperties) {
> -                .extensionName = "${ext.name}",
> -                .specVersion = ${ext.ext_version},
> -            };
> -        }
> -    }
> -%endfor
> -
> -    return vk_outarray_status(&out);
> -}
> -
> -uint32_t
> -anv_physical_device_api_version(struct anv_physical_device *dev)
> -{
> -    return ${MAX_API_VERSION.c_vk_version()};
> -}
> -
> -bool
> -anv_physical_device_extension_supported(struct anv_physical_device *device,
> -                                        const char *name)
> -{
> -%for ext in device_extensions:
> -    if (strcmp(name, "${ext.name}") == 0)
> -        return ${ext.enable};
> -%endfor
> -    return false;
> -}
> -
> -VkResult anv_EnumerateDeviceExtensionProperties(
> -    VkPhysicalDevice                            physicalDevice,
> -    const char*                                 pLayerName,
> -    uint32_t*                                   pPropertyCount,
> -    VkExtensionProperties*                      pProperties)
> -{
> -    ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice);
> -    VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
> -    (void)device;
> -
> -%for ext in device_extensions:
> -    if (${ext.enable}) {
> -        vk_outarray_append(&out, prop) {
> -            *prop = (VkExtensionProperties) {
> -                .extensionName = "${ext.name}",
> -                .specVersion = ${ext.ext_version},
> -            };
> -        }
> -    }
> -%endfor
> -
> -    return vk_outarray_status(&out);
> -}
> -"""
> -
> -if __name__ == '__main__':
> -    parser = argparse.ArgumentParser()
> -    parser.add_argument('--out', help='Output C file.', required=True)
> -    parser.add_argument('--xml',
> -                        help='Vulkan API XML file.',
> -                        required=True,
> -                        action='append',
> -                        dest='xml_files')
> -    args = parser.parse_args()
> -
> -    for filename in args.xml_files:
> -        _init_exts_from_xml(filename)
> -
> -    for ext in EXTENSIONS:
> -        assert ext.type == 'instance' or ext.type == 'device'
> -
> -    template_env = {
> -        'MAX_API_VERSION': MAX_API_VERSION,
> -        'instance_extensions': [e for e in EXTENSIONS if e.type == 
> 'instance'],
> -        'device_extensions': [e for e in EXTENSIONS if e.type == 'device'],
> -    }
> -
> -    from mako.template import Template
> -
> -    with open(args.out, 'w') as f:
> -        f.write(Template(_TEMPLATE).render(**template_env))
> diff --git a/src/intel/vulkan/anv_extensions_gen.py 
> b/src/intel/vulkan/anv_extensions_gen.py
> new file mode 100644
> index 0000000..a1e8688
> --- /dev/null
> +++ b/src/intel/vulkan/anv_extensions_gen.py
> @@ -0,0 +1,184 @@
> +COPYRIGHT = """\
> +/*
> + * Copyright 2017 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, sub license, 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 NON-INFRINGEMENT.
> + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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.
> + */
> +"""
> +
> +import argparse
> +import xml.etree.cElementTree as et
> +
> +from mako.template import Template
> +
> +from anv_extensions import *
> +
> +def _init_exts_from_xml(xml):
> +    """ Walk the Vulkan XML and fill out extra extension information. """
> +
> +    xml = et.parse(xml)
> +
> +    ext_name_map = {}
> +    for ext in EXTENSIONS:
> +        ext_name_map[ext.name] = ext
> +
> +    for ext_elem in xml.findall('.extensions/extension'):
> +        ext_name = ext_elem.attrib['name']
> +        if ext_name not in ext_name_map:
> +            continue
> +
> +        # Workaround for VK_ANDROID_native_buffer. Its <extension> element in
> +        # vk.xml lists it as supported="disabled" and provides only a stub
> +        # definition.  Its <extension> element in Mesa's custom
> +        # vk_android_native_buffer.xml, though, lists it as
> +        # supported='android-vendor' and fully defines the extension. We want
> +        # to skip the <extension> element in vk.xml.
> +        if ext_elem.attrib['supported'] == 'disabled':
> +            assert ext_name == 'VK_ANDROID_native_buffer'
> +            continue
> +
> +        ext = ext_name_map[ext_name]
> +        ext.type = ext_elem.attrib['type']
> +
> +_TEMPLATE = Template(COPYRIGHT + """
> +#include "anv_private.h"
> +
> +#include "vk_util.h"
> +
> +/* Convert the VK_USE_PLATFORM_* defines to booleans */
> +%for platform in ['ANDROID', 'WAYLAND', 'XCB', 'XLIB']:
> +#ifdef VK_USE_PLATFORM_${platform}_KHR
> +#   undef VK_USE_PLATFORM_${platform}_KHR
> +#   define VK_USE_PLATFORM_${platform}_KHR true
> +#else
> +#   define VK_USE_PLATFORM_${platform}_KHR false
> +#endif
> +%endfor
> +
> +/* And ANDROID too */
> +#ifdef ANDROID
> +#   undef ANDROID
> +#   define ANDROID true
> +#else
> +#   define ANDROID false
> +#endif
> +
> +#define ANV_HAS_SURFACE (VK_USE_PLATFORM_WAYLAND_KHR || \\
> +                         VK_USE_PLATFORM_XCB_KHR || \\
> +                         VK_USE_PLATFORM_XLIB_KHR)
> +
> +bool
> +anv_instance_extension_supported(const char *name)
> +{
> +%for ext in instance_extensions:
> +    if (strcmp(name, "${ext.name}") == 0)
> +        return ${ext.enable};
> +%endfor
> +    return false;
> +}
> +
> +VkResult anv_EnumerateInstanceExtensionProperties(
> +    const char*                                 pLayerName,
> +    uint32_t*                                   pPropertyCount,
> +    VkExtensionProperties*                      pProperties)
> +{
> +    VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
> +
> +%for ext in instance_extensions:
> +    if (${ext.enable}) {
> +        vk_outarray_append(&out, prop) {
> +            *prop = (VkExtensionProperties) {
> +                .extensionName = "${ext.name}",
> +                .specVersion = ${ext.ext_version},
> +            };
> +        }
> +    }
> +%endfor
> +
> +    return vk_outarray_status(&out);
> +}
> +
> +uint32_t
> +anv_physical_device_api_version(struct anv_physical_device *dev)
> +{
> +    return ${MAX_API_VERSION.c_vk_version()};
> +}
> +
> +bool
> +anv_physical_device_extension_supported(struct anv_physical_device *device,
> +                                        const char *name)
> +{
> +%for ext in device_extensions:
> +    if (strcmp(name, "${ext.name}") == 0)
> +        return ${ext.enable};
> +%endfor
> +    return false;
> +}
> +
> +VkResult anv_EnumerateDeviceExtensionProperties(
> +    VkPhysicalDevice                            physicalDevice,
> +    const char*                                 pLayerName,
> +    uint32_t*                                   pPropertyCount,
> +    VkExtensionProperties*                      pProperties)
> +{
> +    ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice);
> +    VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
> +    (void)device;
> +
> +%for ext in device_extensions:
> +    if (${ext.enable}) {
> +        vk_outarray_append(&out, prop) {
> +            *prop = (VkExtensionProperties) {
> +                .extensionName = "${ext.name}",
> +                .specVersion = ${ext.ext_version},
> +            };
> +        }
> +    }
> +%endfor
> +
> +    return vk_outarray_status(&out);
> +}
> +""")
> +
> +if __name__ == '__main__':
> +    parser = argparse.ArgumentParser()
> +    parser.add_argument('--out', help='Output C file.', required=True)
> +    parser.add_argument('--xml',
> +                        help='Vulkan API XML file.',
> +                        required=True,
> +                        action='append',
> +                        dest='xml_files')
> +    args = parser.parse_args()
> +
> +    for filename in args.xml_files:
> +        _init_exts_from_xml(filename)
> +
> +    for ext in EXTENSIONS:
> +        assert ext.type == 'instance' or ext.type == 'device'
> +
> +    template_env = {
> +        'MAX_API_VERSION': MAX_API_VERSION,
> +        'instance_extensions': [e for e in EXTENSIONS if e.type == 
> 'instance'],
> +        'device_extensions': [e for e in EXTENSIONS if e.type == 'device'],
> +    }
> +
> +    with open(args.out, 'w') as f:
> +        f.write(_TEMPLATE.render(**template_env))
> diff --git a/src/intel/vulkan/meson.build b/src/intel/vulkan/meson.build
> index 6bd29da..97cb686 100644
> --- a/src/intel/vulkan/meson.build
> +++ b/src/intel/vulkan/meson.build
> @@ -32,7 +32,8 @@ anv_entrypoints = custom_target(
>  
>  anv_extensions_c = custom_target(
>    'anv_extensions.c',
> -  input : ['anv_extensions.py', vk_api_xml, vk_android_native_buffer_xml],
> +  input : ['anv_extensions_gen.py', vk_api_xml, vk_android_native_buffer_xml,
> +           'anv_extensions.py'],
>    output : 'anv_extensions.c',
>    command : [
>      prog_python2, '@INPUT0@', '--xml', '@INPUT1@', '--xml', '@INPUT2@',


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to