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:
parent
4c6f5375a6
commit
91fc472601
|
@ -63,10 +63,14 @@ struct vkd3d_optional_extension_info
|
||||||
{
|
{
|
||||||
const char *extension_name;
|
const char *extension_name;
|
||||||
ptrdiff_t vulkan_info_offset;
|
ptrdiff_t vulkan_info_offset;
|
||||||
|
uint64_t required_config_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define VK_EXTENSION(name, member) \
|
#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[] =
|
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)
|
for (i = 0; i < optional_extension_count; ++i)
|
||||||
{
|
{
|
||||||
const char *extension_name = optional_extensions[i].extension_name;
|
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;
|
ptrdiff_t offset = optional_extensions[i].vulkan_info_offset;
|
||||||
bool *supported = (void *)((uintptr_t)vulkan_info + offset);
|
bool *supported = (void *)((uintptr_t)vulkan_info + offset);
|
||||||
|
|
||||||
|
if (!has_required_flags)
|
||||||
|
continue;
|
||||||
|
|
||||||
if ((*supported = has_extension(extensions, count, extension_name)))
|
if ((*supported = has_extension(extensions, count, extension_name)))
|
||||||
{
|
{
|
||||||
TRACE("Found %s extension.\n", debugstr_a(extension_name));
|
TRACE("Found %s extension.\n", debugstr_a(extension_name));
|
||||||
|
|
Loading…
Reference in New Issue