19 : m_instance(other.m_instance)
20 , m_debug_messenger(other.m_debug_messenger)
21 , m_validation_enabled(other.m_validation_enabled)
22 , m_dynamic_dispatcher(other.m_dynamic_dispatcher)
24 other.m_instance =
nullptr;
25 other.m_debug_messenger =
nullptr;
44 const std::vector<const char*>& required_extensions)
48 auto vkGetInstanceProcAddr = vk::detail::DynamicLoader().getProcAddress<PFN_vkGetInstanceProcAddr>(
"vkGetInstanceProcAddr");
49 VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
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;
63 vk::InstanceCreateInfo create_info {};
64 create_info.pApplicationInfo = &app_info;
66 std::vector<const char*> extensions = required_extensions;
68#ifdef MAYAFLUX_PLATFORM_MACOS
69 extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
70 create_info.flags = vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
74 extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
76 create_info.enabledExtensionCount =
static_cast<uint32_t
>(extensions.size());
77 create_info.ppEnabledExtensionNames = extensions.data();
79 vk::DebugUtilsMessengerCreateInfoEXT debug_create_info {};
85 debug_create_info.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose
86 | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError;
88 debug_create_info.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral
89 | vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation
90 | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance;
93 create_info.pNext = &debug_create_info;
96 create_info.enabledLayerCount = 0;
97 create_info.pNext =
nullptr;
104 VULKAN_HPP_DEFAULT_DISPATCHER.init(
m_instance);
106 }
catch (
const std::exception& e) {
108 std::source_location::current(),
109 "Failed to create Vulkan instance: {}", e.what());
160 vk::DebugUtilsMessengerCreateInfoEXT create_info {};
162 create_info.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose
163 | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError;
165 create_info.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral
166 | vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation
167 | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance;
170 create_info.pUserData =
nullptr;
174 }
catch (
const std::exception& e) {
176 std::source_location::current(),
177 "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.