Skip to content

Commit c2a67ef

Browse files
daymjeffbolznv
andauthored
vulkan: Make Vulkan optional at runtime (ggml-org#11493). (ggml-org#11494)
Co-authored-by: Jeff Bolz <[email protected]>
1 parent b044a0f commit c2a67ef

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

ggml/include/ggml-vulkan.h

-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ extern "C" {
1010
#define GGML_VK_NAME "Vulkan"
1111
#define GGML_VK_MAX_DEVICES 16
1212

13-
GGML_BACKEND_API void ggml_vk_instance_init(void);
14-
1513
// backend API
1614
GGML_BACKEND_API ggml_backend_t ggml_backend_vk_init(size_t dev_num);
1715

ggml/src/ggml-vulkan/ggml-vulkan.cpp

+10-6
Original file line numberDiff line numberDiff line change
@@ -2793,14 +2793,12 @@ static void ggml_vk_print_gpu_info(size_t idx) {
27932793
static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
27942794
static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
27952795

2796-
void ggml_vk_instance_init() {
2796+
static void ggml_vk_instance_init() {
27972797
if (vk_instance_initialized) {
27982798
return;
27992799
}
28002800
VK_LOG_DEBUG("ggml_vk_instance_init()");
28012801

2802-
vk_instance_initialized = true;
2803-
28042802
uint32_t api_version = vk::enumerateInstanceVersion();
28052803

28062804
if (api_version < VK_API_VERSION_1_2) {
@@ -2851,6 +2849,7 @@ void ggml_vk_instance_init() {
28512849
GGML_LOG_DEBUG("ggml_vulkan: Validation layers enabled\n");
28522850
}
28532851
vk_instance.instance = vk::createInstance(instance_create_info);
2852+
vk_instance_initialized = true;
28542853

28552854
size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
28562855

@@ -2875,7 +2874,7 @@ void ggml_vk_instance_init() {
28752874
// Make sure at least one device exists
28762875
if (devices.empty()) {
28772876
std::cerr << "ggml_vulkan: Error: No devices found." << std::endl;
2878-
GGML_ABORT("fatal error");
2877+
return;
28792878
}
28802879

28812880
// Default to using all dedicated GPUs
@@ -8350,8 +8349,13 @@ ggml_backend_reg_t ggml_backend_vk_reg() {
83508349
/* .iface = */ ggml_backend_vk_reg_i,
83518350
/* .context = */ nullptr,
83528351
};
8353-
8354-
return &reg;
8352+
try {
8353+
ggml_vk_instance_init();
8354+
return &reg;
8355+
} catch (const vk::SystemError& e) {
8356+
VK_LOG_DEBUG("ggml_backend_vk_reg() -> Error: System error: " << e.what());
8357+
return nullptr;
8358+
}
83558359
}
83568360

83578361
// Extension availability

0 commit comments

Comments
 (0)