From 91fc47260159468ecdddd56fd8a225fab2484b74 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Mon, 1 Mar 2021 18:27:35 +0000 Subject: [PATCH] vkd3d: Add mechanism for conditional extensions Add a way to enable an extension via config flags. Signed-off-by: Joshua Ashton --- libs/vkd3d/device.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index ddc1419c..550275e4 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -63,10 +63,14 @@ struct vkd3d_optional_extension_info { const char *extension_name; ptrdiff_t vulkan_info_offset; + uint64_t required_config_flags; }; #define VK_EXTENSION(name, member) \ - {VK_ ## name ## _EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, member)} + {VK_ ## name ## _EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, member), 0} + +#define VK_EXTENSION_COND(name, member, required_flags) \ + {VK_ ## name ## _EXTENSION_NAME, offsetof(struct vkd3d_vulkan_info, member), required_flags} static const struct vkd3d_optional_extension_info optional_instance_extensions[] = { @@ -182,9 +186,14 @@ static unsigned int vkd3d_check_extensions(const VkExtensionProperties *extensio for (i = 0; i < optional_extension_count; ++i) { const char *extension_name = optional_extensions[i].extension_name; + uint64_t required_flags = optional_extensions[i].required_config_flags; + bool has_required_flags = (vkd3d_config_flags & required_flags) == required_flags; ptrdiff_t offset = optional_extensions[i].vulkan_info_offset; bool *supported = (void *)((uintptr_t)vulkan_info + offset); + if (!has_required_flags) + continue; + if ((*supported = has_extension(extensions, count, extension_name))) { TRACE("Found %s extension.\n", debugstr_a(extension_name));