MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ initialize()

bool MayaFlux::Core::VKInstance::initialize ( bool  enable_validation = true,
const std::vector< const char * > &  required_extensions = {} 
)

Initialize Vulkan instance.

Parameters
enable_validationEnable validation layers (recommended for development)
required_extensionsExtensions required (e.g., for GLFW surface)
Returns
true if initialization succeeded

Definition at line 41 of file VKInstance.cpp.

43{
44 m_validation_enabled = enable_validation;
45
46 auto vkGetInstanceProcAddr = vk::detail::DynamicLoader().getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
47 VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
48
50 MF_ERROR(Journal::Component::Core, Journal::Context::GraphicsBackend, "Vulkan validation layers requested, but not available!");
51 return false;
52 }
53
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;
60
61 vk::InstanceCreateInfo create_info {};
62 create_info.pApplicationInfo = &app_info;
63
64 std::vector<const char*> extensions = required_extensions;
65
66#ifdef MAYAFLUX_PLATFORM_MACOS
67 extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
68 create_info.flags = vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
69#endif
70
72 extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
73 }
74 create_info.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
75 create_info.ppEnabledExtensionNames = extensions.data();
76
77 vk::DebugUtilsMessengerCreateInfoEXT debug_create_info {};
78
80 create_info.enabledLayerCount = static_cast<uint32_t>(VALIDATION_LAYERS.size());
81 create_info.ppEnabledLayerNames = VALIDATION_LAYERS.data();
82
83 debug_create_info.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose
84 | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError;
85
86 debug_create_info.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral
87 | vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation
88 | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance;
89
90 debug_create_info.pfnUserCallback = debug_callback;
91 create_info.pNext = &debug_create_info;
92
93 } else {
94 create_info.enabledLayerCount = 0;
95 create_info.pNext = nullptr;
96 }
97
98 try {
99 m_instance = vk::createInstance(create_info);
100 m_dynamic_dispatcher = vk::detail::DispatchLoaderDynamic(m_instance, vkGetInstanceProcAddr);
101
102 VULKAN_HPP_DEFAULT_DISPATCHER.init(m_instance);
103
104 } catch (const std::exception& e) {
106 std::source_location::current(),
107 "Failed to create Vulkan instance: {}", e.what());
108 }
109
111
113 MF_ERROR(Journal::Component::Core, Journal::Context::GraphicsBackend, "Failed to set up debug messenger!");
114 return false;
115 }
116
117 return true;
118}
#define MF_ERROR(comp, ctx,...)
#define MF_PRINT(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
Definition VKInstance.cpp:9
@ 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.

References check_validation_layer_support(), MayaFlux::Journal::Core, debug_callback(), MayaFlux::Journal::GraphicsBackend, m_dynamic_dispatcher, m_instance, m_validation_enabled, MF_ERROR, MF_PRINT, setup_debug_messenger(), and MayaFlux::Core::VALIDATION_LAYERS.

Referenced by MayaFlux::Core::VKContext::initialize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: