static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
-void ggml_vk_instance_init() {
+static void ggml_vk_instance_init() {
if (vk_instance_initialized) {
return;
}
VK_LOG_DEBUG("ggml_vk_instance_init()");
- vk_instance_initialized = true;
-
uint32_t api_version = vk::enumerateInstanceVersion();
if (api_version < VK_API_VERSION_1_2) {
GGML_LOG_DEBUG("ggml_vulkan: Validation layers enabled\n");
}
vk_instance.instance = vk::createInstance(instance_create_info);
+ vk_instance_initialized = true;
size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
// Make sure at least one device exists
if (devices.empty()) {
std::cerr << "ggml_vulkan: Error: No devices found." << std::endl;
- GGML_ABORT("fatal error");
+ return;
}
// Default to using all dedicated GPUs
/* .iface = */ ggml_backend_vk_reg_i,
/* .context = */ nullptr,
};
-
- return ®
+ try {
+ ggml_vk_instance_init();
+ return ®
+ } catch (const vk::SystemError& e) {
+ VK_LOG_DEBUG("ggml_backend_vk_reg() -> Error: System error: " << e.what());
+ return nullptr;
+ }
}
// Extension availability