Add log::info!/log::error! for Vulkan issues

This commit is contained in:
Ian Douglas Scott 2026-03-12 14:26:23 -07:00 committed by Michael Murphy
parent a990c89758
commit 45e01aa6e6
2 changed files with 16 additions and 5 deletions

View file

@ -283,6 +283,14 @@ fn start(conn: Connection) -> mpsc::Receiver<Event> {
// spawn an executor using one additional thread. // spawn an executor using one additional thread.
let thread_pool = ThreadPool::builder().pool_size(1).create().unwrap(); let thread_pool = ThreadPool::builder().pool_size(1).create().unwrap();
let vulkan = vulkan::Vulkan::new();
if let Err(err) = &vulkan {
log::info!(
"Unable to initialize Vulkan: {}. Assuming now GPU workarounds needed.",
err
);
}
let registry_state = RegistryState::new(&globals); let registry_state = RegistryState::new(&globals);
let mut app_data = AppData { let mut app_data = AppData {
qh: qh.clone(), qh: qh.clone(),
@ -300,7 +308,7 @@ fn start(conn: Connection) -> mpsc::Receiver<Event> {
dmabuf_feedback: None, dmabuf_feedback: None,
gbm_devices: GbmDevices::default(), gbm_devices: GbmDevices::default(),
thread_pool, thread_pool,
vulkan: vulkan::Vulkan::new(), vulkan: vulkan.ok(),
}; };
let (cmd_sender, cmd_channel) = calloop::channel::channel(); let (cmd_sender, cmd_channel) = calloop::channel::channel();

View file

@ -9,8 +9,8 @@ pub struct Vulkan {
} }
impl Vulkan { impl Vulkan {
pub fn new() -> Option<Self> { pub fn new() -> anyhow::Result<Self> {
let entry = unsafe { ash::Entry::load().ok()? }; let entry = unsafe { ash::Entry::load()? };
let app_info = vk::ApplicationInfo { let app_info = vk::ApplicationInfo {
api_version: vk::make_api_version(0, 1, 1, 0), api_version: vk::make_api_version(0, 1, 1, 0),
..Default::default() ..Default::default()
@ -19,8 +19,8 @@ impl Vulkan {
p_application_info: &app_info, p_application_info: &app_info,
..Default::default() ..Default::default()
}; };
let instance = unsafe { entry.create_instance(&create_info, None).ok()? }; let instance = unsafe { entry.create_instance(&create_info, None)? };
Some(Self { Ok(Self {
_entry: entry, _entry: entry,
instance, instance,
device_name_cache: HashMap::new(), device_name_cache: HashMap::new(),
@ -30,6 +30,9 @@ impl Vulkan {
pub fn device_name(&mut self, dev: u64) -> VkResult<Option<&str>> { pub fn device_name(&mut self, dev: u64) -> VkResult<Option<&str>> {
if !self.device_name_cache.contains_key(&dev) { if !self.device_name_cache.contains_key(&dev) {
let value = self.device_name_uncached(dev); let value = self.device_name_uncached(dev);
if let Err(err) = &value {
log::error!("Failed to query Vulkan device properties: {}", err);
}
self.device_name_cache.insert(dev, value); self.device_name_cache.insert(dev, value);
} }
self.device_name_cache self.device_name_cache