Initialize Vulkan instance.
45{
47
48 auto vkGetInstanceProcAddr = vk::detail::DynamicLoader().getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
49 VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
50
53 return false;
54 }
55
56 vk::ApplicationInfo app_info {};
57 app_info.pApplicationName = "MayaFlux";
58 app_info.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
59 app_info.pEngineName = "MayaFlux Engine";
60 app_info.engineVersion = VK_MAKE_VERSION(1, 0, 0);
61 app_info.apiVersion = VK_API_VERSION_1_3;
62
63 vk::InstanceCreateInfo create_info {};
64 create_info.pApplicationInfo = &app_info;
65
66 std::vector<const char*> extensions = required_extensions;
67
68#ifdef MAYAFLUX_PLATFORM_MACOS
69 extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
70 create_info.flags = vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
71#endif
72
74 extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
75 }
76 create_info.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
77 create_info.ppEnabledExtensionNames = extensions.data();
78
79 vk::DebugUtilsMessengerCreateInfoEXT debug_create_info {};
80
84
85 debug_create_info.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose
86 | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError;
87
88 debug_create_info.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral
89 | vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation
90 | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance;
91
93 create_info.pNext = &debug_create_info;
94
95 } else {
96 create_info.enabledLayerCount = 0;
97 create_info.pNext = nullptr;
98 }
99
100 try {
103
104 VULKAN_HPP_DEFAULT_DISPATCHER.init(
m_instance);
105
106 } catch (const std::exception& e) {
108 std::source_location::current(),
109 "Failed to create Vulkan instance: {}", e.what());
110 }
111
113
116 return false;
117 }
118
119 return true;
120}
#define MF_LOG(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
bool m_validation_enabled
Flag to indicate if validation layers are enabled.
vk::detail::DispatchLoaderDynamic m_dynamic_dispatcher
Dynamic dispatcher for extension functions.
bool check_validation_layer_support(const std::vector< const char * > &layers)
Check if requested validation layers are available.
vk::Instance m_instance
Vulkan instance handle.
bool setup_debug_messenger()
Setup debug messenger for validation layer output.
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.
static const std::vector< const char * > VALIDATION_LAYERS
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
void error_rethrow(Component component, Context context, std::source_location location=std::source_location::current(), std::string_view additional_context="")
Catch and log an exception, then rethrow it.
@ Core
Core engine, backend, subsystems.