@@ -2793,14 +2793,12 @@ static void ggml_vk_print_gpu_info(size_t idx) {
2793
2793
static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
2794
2794
static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
2795
2795
2796
- void ggml_vk_instance_init () {
2796
+ static void ggml_vk_instance_init() {
2797
2797
if (vk_instance_initialized) {
2798
2798
return;
2799
2799
}
2800
2800
VK_LOG_DEBUG("ggml_vk_instance_init()");
2801
2801
2802
- vk_instance_initialized = true ;
2803
-
2804
2802
uint32_t api_version = vk::enumerateInstanceVersion();
2805
2803
2806
2804
if (api_version < VK_API_VERSION_1_2) {
@@ -2851,6 +2849,7 @@ void ggml_vk_instance_init() {
2851
2849
GGML_LOG_DEBUG("ggml_vulkan: Validation layers enabled\n");
2852
2850
}
2853
2851
vk_instance.instance = vk::createInstance(instance_create_info);
2852
+ vk_instance_initialized = true;
2854
2853
2855
2854
size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
2856
2855
@@ -2875,7 +2874,7 @@ void ggml_vk_instance_init() {
2875
2874
// Make sure at least one device exists
2876
2875
if (devices.empty()) {
2877
2876
std::cerr << "ggml_vulkan: Error: No devices found." << std::endl;
2878
- GGML_ABORT ( " fatal error " ) ;
2877
+ return ;
2879
2878
}
2880
2879
2881
2880
// Default to using all dedicated GPUs
@@ -8350,8 +8349,13 @@ ggml_backend_reg_t ggml_backend_vk_reg() {
8350
8349
/* .iface = */ ggml_backend_vk_reg_i,
8351
8350
/* .context = */ nullptr,
8352
8351
};
8353
-
8354
- return ®
8352
+ try {
8353
+ ggml_vk_instance_init();
8354
+ return ®
8355
+ } catch (const vk::SystemError& e) {
8356
+ VK_LOG_DEBUG("ggml_backend_vk_reg() -> Error: System error: " << e.what());
8357
+ return nullptr;
8358
+ }
8355
8359
}
8356
8360
8357
8361
// Extension availability
0 commit comments