Monado OpenXR Runtime
vk_extensions_helpers.c File Reference

Helper functions for Vulkan extension handling during initialization. More...

#include "util/u_pretty_print.h"
#include "vk_extensions_helpers.h"
#include <stdio.h>
Include dependency graph for vk_extensions_helpers.c:

Functions

static struct u_extension_listbuild_extension_list (struct vk_bundle *vk, struct u_extension_list *available_ext_list, struct u_extension_list *required_ext_list, struct u_extension_list *optional_ext_list, vk_should_skip_ext_func_t skip_func, struct u_extension_list **out_skipped_ext_list)
 
struct u_extension_listvk_convert_extension_properties_to_string_list (VkExtensionProperties *props, uint32_t prop_count)
 Convert VkExtensionProperties array to u_extension_list. More...
 
void vk_log_extension_list (struct vk_bundle *vk, struct u_extension_list *ext_list, struct u_extension_list *optional_ext_list, struct u_extension_list *skipped_ext_list, const char *ext_type_name, enum u_logging_level log_level)
 Log an extension list using pretty printing. More...
 
VkResult vk_check_required_extensions (struct vk_bundle *vk, struct u_extension_list *available_ext_list, struct u_extension_list *required_ext_list, const char *ext_type_name)
 Check if all required extensions are present in the available extensions list. More...
 
VkResult vk_build_instance_extensions_with_skip (struct vk_bundle *vk, struct u_extension_list *required_instance_ext_list, struct u_extension_list *optional_instance_ext_list, vk_should_skip_ext_func_t skip_func, struct u_extension_list **out_instance_ext_list)
 Build instance extensions from required and optional instance extensions with skip callback. More...
 
VkResult vk_build_device_extensions_with_skip (struct vk_bundle *vk, VkPhysicalDevice physical_device, struct u_extension_list *required_device_ext_list, struct u_extension_list *optional_device_ext_list, vk_should_skip_ext_func_t skip_func, struct u_extension_list **out_device_ext_list)
 Build device extensions from required and optional device extensions with skip callback. More...
 

Detailed Description

Helper functions for Vulkan extension handling during initialization.

Author
Jakob Bornecrantz jakob.nosp@m.@col.nosp@m.labor.nosp@m.a.co.nosp@m.m

Function Documentation

◆ vk_build_device_extensions_with_skip()

VkResult vk_build_device_extensions_with_skip ( struct vk_bundle vk,
VkPhysicalDevice  physical_device,
struct u_extension_list required_device_ext_list,
struct u_extension_list optional_device_ext_list,
vk_should_skip_ext_func_t  skip_func,
struct u_extension_list **  out_device_ext_list 
)

Build device extensions from required and optional device extensions with skip callback.

This function enumerates available device extensions, checks required ones, and builds a final list. Returns VK_SUCCESS if successful.

This internal function, typically called from vk_create_device().

Parameters
skip_funcCallback to determine if an optional extension should be skipped, must not be NULL.

References u_extension_list::u_extension_list_destroy(), vk_check_required_extensions(), VK_CHK_AND_RET, vk_convert_extension_properties_to_string_list(), and vk_enumerate_physical_device_extension_properties().

◆ vk_build_instance_extensions_with_skip()

VkResult vk_build_instance_extensions_with_skip ( struct vk_bundle vk,
struct u_extension_list required_instance_ext_list,
struct u_extension_list optional_instance_ext_list,
vk_should_skip_ext_func_t  skip_func,
struct u_extension_list **  out_instance_ext_list 
)

Build instance extensions from required and optional instance extensions with skip callback.

This function enumerates available instance extensions, checks required ones, and builds a final list. Returns VK_SUCCESS if successful. Only requires vk_get_loader_functions to have been called.

This internal function, use vk_build_instance_extensions() instead.

Parameters
skip_funcCallback to determine if an optional extension should be skipped, must not be NULL.

References u_extension_list::u_extension_list_destroy(), vk_check_required_extensions(), VK_CHK_AND_RET, vk_convert_extension_properties_to_string_list(), and vk_enumerate_instance_extensions_properties().

Referenced by vk_build_instance_extensions().

◆ vk_check_required_extensions()

VkResult vk_check_required_extensions ( struct vk_bundle vk,
struct u_extension_list available_ext_list,
struct u_extension_list required_ext_list,
const char *  ext_type_name 
)

Check if all required extensions are present in the available extensions list.

Prints a clear error message with all missing extensions if not all required extensions are available. Returns VK_SUCCESS if all required extensions are available, VK_ERROR_EXTENSION_NOT_PRESENT otherwise.

Referenced by vk_build_device_extensions_with_skip(), vk_build_instance_extensions_with_skip(), and vk_check_required_instance_extensions().

◆ vk_convert_extension_properties_to_string_list()

◆ vk_log_extension_list()

void vk_log_extension_list ( struct vk_bundle vk,
struct u_extension_list ext_list,
struct u_extension_list optional_ext_list,
struct u_extension_list skipped_ext_list,
const char *  ext_type_name,
enum u_logging_level  log_level 
)

Log an extension list using pretty printing.

The list will be sorted and logged at the specified log level. The argument skipped_ext_list is used to distinguish between skipped and unsupported extensions (must not be NULL).