summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2017-09-22 07:36:39 -0700
committerJason Ekstrand <jason.ekstrand@intel.com>2018-03-07 12:13:47 -0800
commit05fc377f2e927c65efa67897c6bb35ff65bcd1e8 (patch)
tree36e0c33b72a89a3c0f279b54ce806b1302e90ebd /src
parent8efa173ed2d42dd817462eaa1ab3a4746458e551 (diff)
anv/extensions: Add support for multiple API versions
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/anv_extensions.py37
-rw-r--r--src/intel/vulkan/anv_extensions_gen.py13
2 files changed, 40 insertions, 10 deletions
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'],