Improve logging around surface creation (#6511)

* additional debug logging for request_adapter, demote some messages to debug

* unrelated log messages that annoyed me in Vulkan: debug utils disabled is now `debug`, it being enabled is `info`

* document compatible_surface requirement for WebGL directly on wgt::RequestAdapterOptions

* make adapterenumarge_adapters & request_adapters results info log again when api_log is enabled
This commit is contained in:
Andreas Reich
2024-12-08 14:44:55 +01:00
committed by GitHub
parent 11b51693d3
commit ed694eda89
5 changed files with 45 additions and 7 deletions

View File

@@ -2,7 +2,7 @@ use std::sync::Arc;
use std::{borrow::Cow, collections::HashMap};
use crate::{
api_log,
api_log, api_log_debug,
device::{queue::Queue, resource::Device, DeviceDescriptor, DeviceError},
global::Global,
hal_api::HalApi,
@@ -305,7 +305,7 @@ impl Instance {
let hal_adapters = unsafe { instance.enumerate_adapters(None) };
for raw in hal_adapters {
let adapter = Adapter::new(raw);
log::info!("Adapter {:?}", adapter.raw.info);
api_log_debug!("Adapter {:?}", adapter.raw.info);
adapters.push(adapter);
}
}
@@ -336,8 +336,19 @@ impl Instance {
backend_adapters.retain(|exposed| exposed.info.device_type == wgt::DeviceType::Cpu);
}
if let Some(surface) = desc.compatible_surface {
backend_adapters
.retain(|exposed| surface.get_capabilities_with_raw(exposed).is_ok());
backend_adapters.retain(|exposed| {
let capabilities = surface.get_capabilities_with_raw(exposed);
if let Err(err) = capabilities {
log::debug!(
"Adapter {:?} not compatible with surface: {}",
exposed.info,
err
);
false
} else {
true
}
});
}
adapters.extend(backend_adapters);
}
@@ -378,8 +389,22 @@ impl Instance {
}
}
// `request_adapter` can be a bit of a black box.
// Shine some light on its decision in debug log.
if adapters.is_empty() {
log::debug!("Request adapter didn't find compatible adapters.");
} else {
log::debug!(
"Found {} compatible adapters. Sorted by preference:",
adapters.len()
);
for adapter in &adapters {
log::debug!("* {:?}", adapter.info);
}
}
if let Some(adapter) = adapters.into_iter().next() {
log::info!("Adapter {:?}", adapter.info);
api_log_debug!("Request adapter result {:?}", adapter.info);
let adapter = Adapter::new(adapter);
Ok(adapter)
} else {

View File

@@ -162,7 +162,18 @@ macro_rules! api_log {
macro_rules! api_log {
($($arg:tt)+) => (log::trace!($($arg)+))
}
#[cfg(feature = "api_log_info")]
macro_rules! api_log_debug {
($($arg:tt)+) => (log::info!($($arg)+))
}
#[cfg(not(feature = "api_log_info"))]
macro_rules! api_log_debug {
($($arg:tt)+) => (log::debug!($($arg)+))
}
pub(crate) use api_log;
pub(crate) use api_log_debug;
#[cfg(feature = "resource_log_info")]
macro_rules! resource_log {