@@ -3782,7 +3782,7 @@ lvk::VulkanContext::VulkanContext(const lvk::ContextConfig& config, void* window
37823782
37833783 glslang_initialize_process ();
37843784
3785- createInstance ();
3785+ LVK_ASSERT ( createInstance (). isOk () );
37863786
37873787 if (!surface) {
37883788 if (config_.enableHeadlessSurface ) {
@@ -6237,7 +6237,7 @@ lvk::AccelStructSizes lvk::VulkanContext::getAccelStructSizes(const AccelStructD
62376237 };
62386238}
62396239
6240- void lvk::VulkanContext::createInstance () {
6240+ lvk::Result lvk::VulkanContext::createInstance () {
62416241 vkInstance_ = VK_NULL_HANDLE;
62426242
62436243 // check if we have validation layers in the system
@@ -6394,6 +6394,20 @@ void lvk::VulkanContext::createInstance() {
63946394 };
63956395#endif // defined(VK_EXT_layer_settings) && VK_EXT_layer_settings
63966396
6397+ // check extensions
6398+ {
6399+ std::string missingExtensions;
6400+ for (const char * ext : enabledInstanceExtensionNames_) {
6401+ if (!hasExtension (ext, allInstanceExtensions))
6402+ missingExtensions += " \n " + std::string (ext);
6403+ }
6404+ if (!missingExtensions.empty ()) {
6405+ MINILOG_LOG_PROC (minilog::FatalError, " Missing Vulkan instance extensions: %s\n " , missingExtensions.c_str ());
6406+ assert (false );
6407+ return Result (Result::Code::RuntimeError);
6408+ }
6409+ }
6410+
63976411 const VkApplicationInfo appInfo = {
63986412 .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
63996413 .pNext = nullptr ,
@@ -6456,6 +6470,8 @@ void lvk::VulkanContext::createInstance() {
64566470 for (const VkExtensionProperties& extension : allInstanceExtensions) {
64576471 LLOGL (" %s\n " , extension.extensionName );
64586472 }
6473+
6474+ return Result ();
64596475}
64606476
64616477void lvk::VulkanContext::createHeadlessSurface () {
0 commit comments