Skip to content

Commit

Permalink
Improve logging around surface creation (#6511)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Wumpf authored Dec 8, 2024
1 parent 11b5169 commit ed694ed
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 7 deletions.
1 change: 1 addition & 0 deletions wgpu-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ ignored = ["cfg_aliases"]
counters = ["wgt/counters"]

## Log all API entry points at info instead of trace level.
## Also, promotes certain debug log calls to info.
api_log_info = []

## Log resource lifecycle management at info instead of trace level.
Expand Down
35 changes: 30 additions & 5 deletions wgpu-core/src/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
}
}
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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 {
Expand Down
11 changes: 11 additions & 0 deletions wgpu-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions wgpu-hal/src/vulkan/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,11 @@ impl super::Instance {
callback_data: debug_utils_create_info.callback_data,
})
} else {
log::info!("Debug utils not enabled: extension not listed");
log::debug!("Debug utils not enabled: extension not listed");
None
}
} else {
log::info!(
log::debug!(
"Debug utils not enabled: \
debug_utils_user_data not passed to Instance::from_raw"
);
Expand Down
1 change: 1 addition & 0 deletions wgpu-types/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ pub struct RequestAdapterOptions<S> {
pub force_fallback_adapter: bool,
/// Surface that is required to be presentable with the requested adapter. This does not
/// create the surface, only guarantees that the adapter can present to said surface.
/// For WebGL, this is strictly required, as an adapter can not be created without a surface.
pub compatible_surface: Option<S>,
}

Expand Down

0 comments on commit ed694ed

Please sign in to comment.