vulkan : update ggml_vk_instance_validation_ext_available (#15666)

* vulkan : update ggml_vk_instance_validation_ext_available

This commit updates ggml_vk_instance_validation_ext_available() to
check for VK_EXT_validation_features instead of
VK_KHR_portability_enumeration.

Based on how the returned boolean is used later in the code (to enable
both the validation layer and the VK_EXT_validation_features extension),
it appears the function may have been intended to check for the
validation layer features extension.

* remove try/catch

This was a left over from a previous iteration where I was explicitly
quering for a specific validation layer first, which would throw.

* update warning message about validation layers
This commit is contained in:
Daniel Bevenius 2025-09-03 20:24:50 +02:00 committed by GitHub
parent 0014fb4add
commit 8227695d7a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 14 additions and 13 deletions

View File

@ -4271,7 +4271,7 @@ static void ggml_vk_print_gpu_info(size_t idx) {
} }
} }
static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions); static bool ggml_vk_instance_validation_ext_available();
static bool ggml_vk_instance_portability_enumeration_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);
static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions); static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
@ -4292,7 +4292,7 @@ static void ggml_vk_instance_init() {
vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, api_version }; vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, api_version };
const std::vector<vk::ExtensionProperties> instance_extensions = vk::enumerateInstanceExtensionProperties(); const std::vector<vk::ExtensionProperties> instance_extensions = vk::enumerateInstanceExtensionProperties();
const bool validation_ext = ggml_vk_instance_validation_ext_available(instance_extensions); const bool validation_ext = ggml_vk_instance_validation_ext_available();
#ifdef __APPLE__ #ifdef __APPLE__
const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions); const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
#endif #endif
@ -12212,22 +12212,23 @@ ggml_backend_reg_t ggml_backend_vk_reg() {
} }
// Extension availability // Extension availability
static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions) { static bool ggml_vk_instance_validation_ext_available() {
#ifdef GGML_VULKAN_VALIDATE #ifdef GGML_VULKAN_VALIDATE
bool portability_enumeration_ext = false; // Check if validation layer provides the extension
// Check for portability enumeration extension for MoltenVK support const std::string layer_name = "VK_LAYER_KHRONOS_validation";
for (const auto& properties : instance_extensions) { for (const auto& layer : vk::enumerateInstanceLayerProperties()) {
if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) { if (layer_name == layer.layerName.data()) {
return true; for (const auto& ext : vk::enumerateInstanceExtensionProperties(layer_name)) {
if (strcmp("VK_EXT_validation_features", ext.extensionName.data()) == 0) {
return true;
}
}
} }
} }
if (!portability_enumeration_ext) {
std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl; std::cerr << "ggml_vulkan: WARNING: Validation layer or layer extension VK_EXT_validation_features not found." << std::endl;
}
#endif #endif
return false; return false;
UNUSED(instance_extensions);
} }
static bool ggml_vk_instance_portability_enumeration_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) {
#ifdef __APPLE__ #ifdef __APPLE__