| 741 | } |
| 742 | |
| 743 | void application::initialize_vulkan() |
| 744 | { |
| 745 | auto graphics_requirements = xr_system_id.graphics_requirements(); |
| 746 | XrVersion vulkan_version = std::max(app_info.min_vulkan_version, graphics_requirements.minApiVersionSupported); |
| 747 | spdlog::info("OpenXR runtime wants Vulkan {}", xr::to_string(graphics_requirements.minApiVersionSupported)); |
| 748 | spdlog::info("Requesting Vulkan {}", xr::to_string(vulkan_version)); |
| 749 | |
| 750 | std::vector<const char *> layers; |
| 751 | |
| 752 | spdlog::info("Available Vulkan layers:"); |
| 753 | [[maybe_unused]] bool validation_layer_found = false; |
| 754 | |
| 755 | for (vk::LayerProperties & i: vk_context.enumerateInstanceLayerProperties()) |
| 756 | { |
| 757 | spdlog::info(" {}", i.layerName.data()); |
| 758 | if (!strcmp(i.layerName, "VK_LAYER_KHRONOS_validation")) |
| 759 | { |
| 760 | validation_layer_found = true; |
| 761 | } |
| 762 | } |
| 763 | #ifndef NDEBUG |
| 764 | #ifdef __ANDROID__ |
| 765 | if (validation_layer_found) |
| 766 | { |
| 767 | spdlog::info("Using Vulkan validation layer"); |
| 768 | layers.push_back("VK_LAYER_KHRONOS_validation"); |
| 769 | } |
| 770 | #endif |
| 771 | bool debug_report_found = false; |
| 772 | bool debug_utils_found = false; |
| 773 | #endif |
| 774 | |
| 775 | std::vector<const char *> instance_extensions{}; |
| 776 | std::unordered_set<std::string_view> optional_device_extensions{}; |
| 777 | |
| 778 | spdlog::info("Available Vulkan instance extensions:"); |
| 779 | std::vector<std::pair<std::string, int>> extensions; |
| 780 | for (vk::ExtensionProperties & i: vk_context.enumerateInstanceExtensionProperties(nullptr)) |
| 781 | { |
| 782 | extensions.emplace_back(i.extensionName.data(), i.specVersion); |
| 783 | |
| 784 | #ifndef NDEBUG |
| 785 | if (!strcmp(i.extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)) |
| 786 | { |
| 787 | debug_report_found = true; |
| 788 | instance_extensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); |
| 789 | } |
| 790 | |
| 791 | if (!strcmp(i.extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME) and get_hmd_traits().vk_debug_ext_allowed) |
| 792 | { |
| 793 | debug_utils_found = true; |
| 794 | instance_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); |
| 795 | } |
| 796 | #endif |
| 797 | } |
| 798 | std::ranges::sort(extensions); |
| 799 | for (const auto & [extension_name, spec_version]: extensions) |
| 800 | spdlog::info(" {} (version {})", extension_name, spec_version); |
nothing calls this directly
no test coverage detected