From 51263272b0fe4d3b0f46477bdda647eecc398639 Mon Sep 17 00:00:00 2001 From: Sergiusz Bazanski Date: Sat, 14 Mar 2020 19:11:28 +0100 Subject: [PATCH] be smarter about loading validation layers --- engine/src/render/vulkan/mod.rs | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/engine/src/render/vulkan/mod.rs b/engine/src/render/vulkan/mod.rs index 8e699cc..cf19b89 100644 --- a/engine/src/render/vulkan/mod.rs +++ b/engine/src/render/vulkan/mod.rs @@ -54,8 +54,31 @@ impl Instance { }; let exts = required_instance_extensions(); - let layers = ["VK_LAYER_LUNARG_standard_validation"]; - let vulkan = vi::Instance::new(Some(&ai), &exts, layers.iter().cloned()).expect("could not create vulkan instance"); + + let layer_preferences = vec![ + vec!["VK_LAYER_KHRONOS_validation"], + vec!["VK_LAYER_LUNARG_standard_validation"], + vec![], + ]; + + + let mut vulkanOpt: Option> = None; + for pref in layer_preferences { + match vi::Instance::new(Some(&ai), &exts, pref.iter().cloned()) { + Ok(res) => { + log::info!("Created vulkan instance with layers {}", pref.join(", ")); + if pref.len() == 0 { + log::warn!("Did not load validation layers."); + } + vulkanOpt = Some(res); + } + Err(err) => { + log::warn!("Could not create vulkan instance with layers {}: {}", pref.join(", "), err); + } + } + }; + + let vulkan = vulkanOpt.expect("could not create a vulkan instance"); let debug_callback = Self::init_debug_callback(&vulkan);