@@ -4204,7 +4204,7 @@ static void ggml_vk_print_gpu_info(size_t idx) {
4204
4204
}
4205
4205
}
4206
4206
4207
- static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions );
4207
+ static bool ggml_vk_instance_validation_ext_available();
4208
4208
static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
4209
4209
4210
4210
static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
@@ -4225,7 +4225,7 @@ static void ggml_vk_instance_init() {
4225
4225
vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, api_version };
4226
4226
4227
4227
const std::vector<vk::ExtensionProperties> instance_extensions = vk::enumerateInstanceExtensionProperties();
4228
- const bool validation_ext = ggml_vk_instance_validation_ext_available(instance_extensions );
4228
+ const bool validation_ext = ggml_vk_instance_validation_ext_available();
4229
4229
#ifdef __APPLE__
4230
4230
const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
4231
4231
#endif
@@ -11998,22 +11998,20 @@ ggml_backend_reg_t ggml_backend_vk_reg() {
11998
11998
}
11999
11999
12000
12000
// Extension availability
12001
- static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions ) {
12001
+ static bool ggml_vk_instance_validation_ext_available() {
12002
12002
#ifdef GGML_VULKAN_VALIDATE
12003
- bool portability_enumeration_ext = false;
12004
- // Check for portability enumeration extension for MoltenVK support
12005
- for (const auto& properties : instance_extensions) {
12006
- if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) {
12007
- return true;
12003
+ // Check if validation layer provides the extension
12004
+ try {
12005
+ for (const auto& ext : vk::enumerateInstanceExtensionProperties(std::string("VK_LAYER_KHRONOS_validation"))) {
12006
+ if (strcmp("VK_EXT_validation_features", ext.extensionName.data()) == 0) {
12007
+ return true;
12008
+ }
12008
12009
}
12009
- }
12010
- if (!portability_enumeration_ext) {
12011
- std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl;
12012
- }
12010
+ } catch (...) { /* It's alright if the layer is not present */ }
12011
+
12012
+ std::cerr << "ggml_vulkan: WARNING: Instance extension VK_EXT_validation_features not found." << std::endl;
12013
12013
#endif
12014
12014
return false;
12015
-
12016
- UNUSED(instance_extensions);
12017
12015
}
12018
12016
static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions) {
12019
12017
#ifdef __APPLE__
0 commit comments