Commit 05fc377f authored by Jason Ekstrand's avatar Jason Ekstrand

anv/extensions: Add support for multiple API versions

Reviewed-by: Lionel Landwerlin's avatarLionel Landwerlin <>
Reviewed-by: Samuel Iglesias Gonsálvez's avatarSamuel Iglesias Gonsálvez <>
parent 8efa173e
......@@ -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';
return b;
class Extension:
def __init__(self, name, ext_version, enable): = name
self.ext_version = int(ext_version)
if enable is True:
self.enable = 'true';
elif enable is False:
self.enable = 'false';
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.
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('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
......@@ -147,9 +147,17 @@ const struct anv_instance_extension_table anv_instance_extensions_supported = {
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()};
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 = {
'instance_extensions': [e for e in EXTENSIONS if e.type == 'instance'],
'device_extensions': [e for e in EXTENSIONS if e.type == 'device'],
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment