From f67bdbef3fa8dca6a8eac74de4e154b1d1fe9304 Mon Sep 17 00:00:00 2001 From: BearOso Date: Wed, 8 Feb 2023 16:34:59 -0600 Subject: [PATCH] vulkan: Handle case when no vulkan library is available. Use one copy of the dynamic loader, if it can't load a library, drop out of instance creation. --- vulkan/vulkan_context.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/vulkan/vulkan_context.cpp b/vulkan/vulkan_context.cpp index 06c50721..1c5b4a6b 100644 --- a/vulkan/vulkan_context.cpp +++ b/vulkan/vulkan_context.cpp @@ -8,14 +8,21 @@ namespace Vulkan { +static std::unique_ptr dl; + Context::Context() { - vk::DynamicLoader *dl = new vk::DynamicLoader; + if (!dl) + { + dl = std::make_unique(); + if (!dl->success()) + return; + } + auto vkGetInstanceProcAddr = dl->getProcAddress("vkGetInstanceProcAddr"); VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr); - } Context::~Context() @@ -39,6 +46,9 @@ Context::~Context() static vk::UniqueInstance create_instance_preamble(const char *wsi_extension) { + if (!dl || !dl->success()) + return vk::UniqueInstance(); + std::vector extensions = { wsi_extension, VK_KHR_SURFACE_EXTENSION_NAME }; vk::ApplicationInfo application_info({}, {}, {}, {}, VK_API_VERSION_1_0); vk::InstanceCreateInfo instance_create_info({}, &application_info, {}, extensions);