vkd3d: Add mechanism for conditional extensions

Add a way to enable an extension via config flags.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
This commit is contained in:
Joshua Ashton 2021-03-01 18:27:35 +00:00 committed by Hans-Kristian Arntzen
parent 4c6f5375a6
commit 91fc472601
1 changed files with 10 additions and 1 deletions

View File

@ -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));