@@ -5062,7 +5062,7 @@ static void ggml_vk_print_gpu_info(size_t idx) {
50625062 }
50635063}
50645064
5065- static bool ggml_vk_instance_validation_ext_available ();
5065+ static bool ggml_vk_instance_layer_settings_available ();
50665066static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
50675067static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
50685068static bool ggml_vk_device_is_supported(const vk::PhysicalDevice & vkdev);
@@ -5091,19 +5091,19 @@ static void ggml_vk_instance_init() {
50915091 vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, api_version };
50925092
50935093 const std::vector<vk::ExtensionProperties> instance_extensions = vk::enumerateInstanceExtensionProperties();
5094- const bool validation_ext = ggml_vk_instance_validation_ext_available ();
5094+ const bool layer_settings = ggml_vk_instance_layer_settings_available ();
50955095#ifdef __APPLE__
50965096 const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
50975097#endif
50985098 const bool debug_utils_ext = ggml_vk_instance_debug_utils_ext_available(instance_extensions) && getenv("GGML_VK_DEBUG_MARKERS") != nullptr;
50995099 std::vector<const char*> layers;
51005100
5101- if (validation_ext ) {
5101+ if (layer_settings ) {
51025102 layers.push_back("VK_LAYER_KHRONOS_validation");
51035103 }
51045104 std::vector<const char*> extensions;
5105- if (validation_ext ) {
5106- extensions.push_back("VK_EXT_validation_features ");
5105+ if (layer_settings ) {
5106+ extensions.push_back("VK_EXT_layer_settings ");
51075107 }
51085108#ifdef __APPLE__
51095109 if (portability_enumeration_ext) {
@@ -5113,26 +5113,24 @@ static void ggml_vk_instance_init() {
51135113 if (debug_utils_ext) {
51145114 extensions.push_back("VK_EXT_debug_utils");
51155115 }
5116- vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions);
5116+ VkBool32 enable_best_practice = layer_settings;
5117+ std::vector<vk::LayerSettingEXT> settings = {
5118+ {
5119+ "VK_LAYER_KHRONOS_validation",
5120+ "validate_best_practices",
5121+ vk::LayerSettingTypeEXT::eBool32,
5122+ 1,
5123+ &enable_best_practice
5124+ },
5125+ };
5126+ vk::LayerSettingsCreateInfoEXT layer_setting_info(settings);
5127+ vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions, &layer_setting_info);
51175128#ifdef __APPLE__
51185129 if (portability_enumeration_ext) {
51195130 instance_create_info.flags |= vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
51205131 }
51215132#endif
51225133
5123- std::vector<vk::ValidationFeatureEnableEXT> features_enable;
5124- vk::ValidationFeaturesEXT validation_features;
5125-
5126- if (validation_ext) {
5127- features_enable = { vk::ValidationFeatureEnableEXT::eBestPractices };
5128- validation_features = {
5129- features_enable,
5130- {},
5131- };
5132- validation_features.setPNext(nullptr);
5133- instance_create_info.setPNext(&validation_features);
5134- GGML_LOG_DEBUG("ggml_vulkan: Validation layers enabled\n");
5135- }
51365134 vk_instance.instance = vk::createInstance(instance_create_info);
51375135 vk_instance_initialized = true;
51385136
@@ -14227,21 +14225,21 @@ ggml_backend_reg_t ggml_backend_vk_reg() {
1422714225}
1422814226
1422914227// Extension availability
14230- static bool ggml_vk_instance_validation_ext_available () {
14228+ static bool ggml_vk_instance_layer_settings_available () {
1423114229#ifdef GGML_VULKAN_VALIDATE
1423214230 // Check if validation layer provides the extension
1423314231 const std::string layer_name = "VK_LAYER_KHRONOS_validation";
1423414232 for (const auto& layer : vk::enumerateInstanceLayerProperties()) {
1423514233 if (layer_name == layer.layerName.data()) {
1423614234 for (const auto& ext : vk::enumerateInstanceExtensionProperties(layer_name)) {
14237- if (strcmp("VK_EXT_validation_features ", ext.extensionName.data()) == 0) {
14235+ if (strcmp("VK_EXT_layer_settings ", ext.extensionName.data()) == 0) {
1423814236 return true;
1423914237 }
1424014238 }
1424114239 }
1424214240 }
1424314241
14244- std::cerr << "ggml_vulkan: WARNING: Validation layer or layer extension VK_EXT_validation_features not found." << std::endl;
14242+ std::cerr << "ggml_vulkan: WARNING: Validation layer or layer extension VK_EXT_layer_settings not found." << std::endl;
1424514243#endif
1424614244 return false;
1424714245}
0 commit comments