From 6ac830ccb1a54a821c8d035675425f0d97434faa Mon Sep 17 00:00:00 2001 From: Eric Engestrom Date: Thu, 21 Jul 2022 22:38:27 +0100 Subject: [PATCH] vk/runtime: turn vk.xml extension requirements into asserts More specifically, turn into assert(!ext->KHR_foo || ext->KHR_bar); Signed-off-by: Eric Engestrom Reviewed-by: Samuel Pitoiset Part-of: --- src/vulkan/runtime/vk_device.c | 3 +++ src/vulkan/runtime/vk_instance.c | 2 ++ src/vulkan/util/vk_extensions_gen.py | 12 ++++++++++++ 3 files changed, 17 insertions(+) diff --git a/src/vulkan/runtime/vk_device.c b/src/vulkan/runtime/vk_device.c index 0037629..8cc53de 100644 --- a/src/vulkan/runtime/vk_device.c +++ b/src/vulkan/runtime/vk_device.c @@ -220,6 +220,9 @@ vk_device_init(struct vk_device *device, device->swapchain_private = NULL; #endif /* ANDROID */ + assert_device_extensions_requirements(&physical_device->supported_extensions, + physical_device->instance->supported_extensions); + return VK_SUCCESS; } diff --git a/src/vulkan/runtime/vk_instance.c b/src/vulkan/runtime/vk_instance.c index a17a62e..a24f5b1 100644 --- a/src/vulkan/runtime/vk_instance.c +++ b/src/vulkan/runtime/vk_instance.c @@ -193,6 +193,8 @@ vk_instance_init(struct vk_instance *instance, glsl_type_singleton_init_or_ref(); + assert_instance_extensions_requirements(instance->supported_extensions); + return VK_SUCCESS; } diff --git a/src/vulkan/util/vk_extensions_gen.py b/src/vulkan/util/vk_extensions_gen.py index a9b3770..1792922 100644 --- a/src/vulkan/util/vk_extensions_gen.py +++ b/src/vulkan/util/vk_extensions_gen.py @@ -37,6 +37,7 @@ _TEMPLATE_H = Template(COPYRIGHT + """ #ifndef ${driver.upper()}_EXTENSIONS_H #define ${driver.upper()}_EXTENSIONS_H +#include #include %if driver == 'vk': @@ -56,6 +57,17 @@ struct vk_${type}_extension_table { }; }; }; + +static inline void +assert_${type}_extensions_requirements(const struct vk_${type}_extension_table *${type}_ext${ +', const struct vk_instance_extension_table *instance_ext' if type == 'device' else '' +}) { +% for ext in extensions: + % for req in ext.requires: + assert(!${ext.type}_ext->${ext.name[3:]} || ${req.type}_ext->${req.name[3:]}); + % endfor +% endfor +} ${extension_table('instance', instance_extensions)} -- 2.7.4