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),
+
+ # DRM_IOCTL_SYNCOBJ_WAIT is required for VK_KHR_external_fence which is a
+ # required core feature in Vulkan 1.1
+ ApiVersion('1.1.0', 'device->has_syncobj_wait'),
+]
+
+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
Extension('VK_KHR_bind_memory2', 1, True),
Extension('VK_KHR_dedicated_allocation', 1, True),
Extension('VK_KHR_descriptor_update_template', 1, True),
+ Extension('VK_KHR_device_group', 1, True),
+ Extension('VK_KHR_device_group_creation', 1, True),
Extension('VK_KHR_external_fence', 1,
'device->has_syncobj_wait'),
Extension('VK_KHR_external_fence_capabilities', 1, True),
Extension('VK_KHR_incremental_present', 1, 'ANV_HAS_SURFACE'),
Extension('VK_KHR_maintenance1', 1, True),
Extension('VK_KHR_maintenance2', 1, True),
+ Extension('VK_KHR_maintenance3', 1, True),
Extension('VK_KHR_push_descriptor', 1, True),
Extension('VK_KHR_relaxed_block_layout', 1, True),
Extension('VK_KHR_sampler_mirror_clamp_to_edge', 1, True),
Extension('VK_KHR_wayland_surface', 6, 'VK_USE_PLATFORM_WAYLAND_KHR'),
Extension('VK_KHR_xcb_surface', 6, 'VK_USE_PLATFORM_XCB_KHR'),
Extension('VK_KHR_xlib_surface', 6, 'VK_USE_PLATFORM_XLIB_KHR'),
- Extension('VK_KHX_multiview', 1, '!ANDROID'),
+ Extension('VK_KHR_multiview', 1, True),
Extension('VK_EXT_debug_report', 8, True),
Extension('VK_EXT_external_memory_dma_buf', 1, True),
Extension('VK_EXT_global_priority', 1,
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