42 const std::vector<const char*>& required_extensions)
46 auto vkGetInstanceProcAddr = vk::detail::DynamicLoader().getProcAddress<PFN_vkGetInstanceProcAddr>(
"vkGetInstanceProcAddr");
47 VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
54 vk::ApplicationInfo app_info {};
55 app_info.pApplicationName =
"MayaFlux";
56 app_info.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
57 app_info.pEngineName =
"MayaFlux Engine";
58 app_info.engineVersion = VK_MAKE_VERSION(1, 0, 0);
59 app_info.apiVersion = VK_API_VERSION_1_3;
61 vk::InstanceCreateInfo create_info {};
62 create_info.pApplicationInfo = &app_info;
64 std::vector<const char*> extensions = required_extensions;
66#ifdef MAYAFLUX_PLATFORM_MACOS
67 extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
68 create_info.flags = vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
72 extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
74 create_info.enabledExtensionCount =
static_cast<uint32_t
>(extensions.size());
75 create_info.ppEnabledExtensionNames = extensions.data();
77 vk::DebugUtilsMessengerCreateInfoEXT debug_create_info {};
83 debug_create_info.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose
84 | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError;
86 debug_create_info.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral
87 | vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation
88 | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance;
91 create_info.pNext = &debug_create_info;
94 create_info.enabledLayerCount = 0;
95 create_info.pNext =
nullptr;
102 VULKAN_HPP_DEFAULT_DISPATCHER.init(
m_instance);
104 }
catch (
const std::exception& e) {
106 std::source_location::current(),
107 "Failed to create Vulkan instance: {}", e.what());
158 vk::DebugUtilsMessengerCreateInfoEXT create_info {};
160 create_info.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose
161 | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError;
163 create_info.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral
164 | vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation
165 | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance;
168 create_info.pUserData =
nullptr;
172 }
catch (
const std::exception& e) {
174 std::source_location::current(),
175 "Failed to set up debug messenger: {}", e.what());
static vk::Bool32 debug_callback(vk::DebugUtilsMessageSeverityFlagBitsEXT message_severity, vk::DebugUtilsMessageTypeFlagsEXT message_types, const vk::DebugUtilsMessengerCallbackDataEXT *p_callback_data, void *p_user_data)
Validation layer callback.