From: Jason Ekstrand Date: Fri, 22 Sep 2017 14:36:39 +0000 (-0700) Subject: anv/extensions: Add support for multiple API versions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=05fc377f2e927c65efa67897c6bb35ff65bcd1e8;p=mesa.git anv/extensions: Add support for multiple API versions Reviewed-by: Lionel Landwerlin Reviewed-by: Samuel Iglesias Gonsálvez --- diff --git a/src/intel/vulkan/anv_extensions.py b/src/intel/vulkan/anv_extensions.py index 5a36708a0a1..b402b0c9cb3 100644 --- a/src/intel/vulkan/anv_extensions.py +++ b/src/intel/vulkan/anv_extensions.py @@ -29,18 +29,34 @@ import copy import re import xml.etree.cElementTree as et -MAX_API_VERSION = '1.0.57' +def _bool_to_c_expr(b): + if b is True: + return 'true'; + elif b is False: + return 'false'; + else: + return b; class Extension: def __init__(self, name, ext_version, enable): self.name = name self.ext_version = int(ext_version) - if enable is True: - self.enable = 'true'; - elif enable is False: - self.enable = 'false'; - else: - self.enable = enable; + self.enable = _bool_to_c_expr(enable) + +class ApiVersion: + def __init__(self, max_patch_version, enable): + self.max_patch_version = max_patch_version + self.enable = _bool_to_c_expr(enable) + +# Supported API versions. Each one is the maximum patch version for the given +# version. Version come in increasing order and each version is available if +# it's provided "enable" condition is true and all previous versions are +# available. +API_VERSIONS = [ + ApiVersion('1.0.57', True), +] + +MAX_API_VERSION = None # Computed later # On Android, we disable all surface and swapchain extensions. Android's Vulkan # loader implements VK_KHR_surface and VK_KHR_swapchain, and applications @@ -132,4 +148,9 @@ class VkVersion: return self.__int_ver().__cmp__(other.__int_ver()) -MAX_API_VERSION = VkVersion(MAX_API_VERSION) + +MAX_API_VERSION = VkVersion('0.0.0') +for version in API_VERSIONS: + version.max_patch_version = VkVersion(version.max_patch_version) + assert version.max_patch_version > MAX_API_VERSION + MAX_API_VERSION = version.max_patch_version diff --git a/src/intel/vulkan/anv_extensions_gen.py b/src/intel/vulkan/anv_extensions_gen.py index 33827ecd015..1796437dc7c 100644 --- a/src/intel/vulkan/anv_extensions_gen.py +++ b/src/intel/vulkan/anv_extensions_gen.py @@ -147,9 +147,17 @@ const struct anv_instance_extension_table anv_instance_extensions_supported = { }; uint32_t -anv_physical_device_api_version(struct anv_physical_device *dev) +anv_physical_device_api_version(struct anv_physical_device *device) { - return ${MAX_API_VERSION.c_vk_version()}; + uint32_t version = 0; + +%for version in API_VERSIONS: + if (!(${version.enable})) + return version; + version = ${version.max_patch_version.c_vk_version()}; + +%endfor + return version; } const VkExtensionProperties anv_device_extensions[ANV_DEVICE_EXTENSION_COUNT] = { @@ -188,6 +196,7 @@ if __name__ == '__main__': assert ext.type == 'instance' or ext.type == 'device' template_env = { + 'API_VERSIONS': API_VERSIONS, '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'],