@@ -5101,7 +5101,7 @@ static void ggml_vk_print_gpu_info(size_t idx) {
51015101 }
51025102}
51035103
5104- static bool ggml_vk_instance_validation_ext_available ();
5104+ static bool ggml_vk_instance_layer_settings_available ();
51055105static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
51065106static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
51075107static bool ggml_vk_device_is_supported(const vk::PhysicalDevice & vkdev);
@@ -5130,19 +5130,19 @@ static void ggml_vk_instance_init() {
51305130 vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, api_version };
51315131
51325132 const std::vector<vk::ExtensionProperties> instance_extensions = vk::enumerateInstanceExtensionProperties();
5133- const bool validation_ext = ggml_vk_instance_validation_ext_available ();
5133+ const bool layer_settings = ggml_vk_instance_layer_settings_available ();
51345134#ifdef __APPLE__
51355135 const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
51365136#endif
51375137 const bool debug_utils_ext = ggml_vk_instance_debug_utils_ext_available(instance_extensions) && getenv("GGML_VK_DEBUG_MARKERS") != nullptr;
51385138 std::vector<const char*> layers;
51395139
5140- if (validation_ext ) {
5140+ if (layer_settings ) {
51415141 layers.push_back("VK_LAYER_KHRONOS_validation");
51425142 }
51435143 std::vector<const char*> extensions;
5144- if (validation_ext ) {
5145- extensions.push_back("VK_EXT_validation_features ");
5144+ if (layer_settings ) {
5145+ extensions.push_back("VK_EXT_layer_settings ");
51465146 }
51475147#ifdef __APPLE__
51485148 if (portability_enumeration_ext) {
@@ -5152,7 +5152,18 @@ static void ggml_vk_instance_init() {
51525152 if (debug_utils_ext) {
51535153 extensions.push_back("VK_EXT_debug_utils");
51545154 }
5155- vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions);
5155+ VkBool32 enable_best_practice = layer_settings;
5156+ std::vector<vk::LayerSettingEXT> settings = {
5157+ {
5158+ "VK_LAYER_KHRONOS_validation",
5159+ "validate_best_practices",
5160+ vk::LayerSettingTypeEXT::eBool32,
5161+ 1,
5162+ &enable_best_practice
5163+ },
5164+ };
5165+ vk::LayerSettingsCreateInfoEXT layer_setting_info(settings);
5166+ vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions, &layer_setting_info);
51565167#ifdef __APPLE__
51575168 if (portability_enumeration_ext) {
51585169 instance_create_info.flags |= vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
@@ -5162,7 +5173,7 @@ static void ggml_vk_instance_init() {
51625173 std::vector<vk::ValidationFeatureEnableEXT> features_enable;
51635174 vk::ValidationFeaturesEXT validation_features;
51645175
5165- if (validation_ext ) {
5176+ if (layer_settings ) {
51665177 features_enable = { vk::ValidationFeatureEnableEXT::eBestPractices };
51675178 validation_features = {
51685179 features_enable,
@@ -14369,21 +14380,21 @@ ggml_backend_reg_t ggml_backend_vk_reg() {
1436914380}
1437014381
1437114382// Extension availability
14372- static bool ggml_vk_instance_validation_ext_available () {
14383+ static bool ggml_vk_instance_layer_settings_available () {
1437314384#ifdef GGML_VULKAN_VALIDATE
1437414385 // Check if validation layer provides the extension
1437514386 const std::string layer_name = "VK_LAYER_KHRONOS_validation";
1437614387 for (const auto& layer : vk::enumerateInstanceLayerProperties()) {
1437714388 if (layer_name == layer.layerName.data()) {
1437814389 for (const auto& ext : vk::enumerateInstanceExtensionProperties(layer_name)) {
14379- if (strcmp("VK_EXT_validation_features ", ext.extensionName.data()) == 0) {
14390+ if (strcmp("VK_EXT_layer_settings ", ext.extensionName.data()) == 0) {
1438014391 return true;
1438114392 }
1438214393 }
1438314394 }
1438414395 }
1438514396
14386- std::cerr << "ggml_vulkan: WARNING: Validation layer or layer extension VK_EXT_validation_features not found." << std::endl;
14397+ std::cerr << "ggml_vulkan: WARNING: Validation layer or layer extension VK_EXT_layer_settings not found." << std::endl;
1438714398#endif
1438814399 return false;
1438914400}
0 commit comments