mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-01-14 08:42:43 +00:00
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:
parent
11b51693d3
commit
ed694eda89
@ -38,6 +38,7 @@ ignored = ["cfg_aliases"]
|
|||||||
counters = ["wgt/counters"]
|
counters = ["wgt/counters"]
|
||||||
|
|
||||||
## Log all API entry points at info instead of trace level.
|
## Log all API entry points at info instead of trace level.
|
||||||
|
## Also, promotes certain debug log calls to info.
|
||||||
api_log_info = []
|
api_log_info = []
|
||||||
|
|
||||||
## Log resource lifecycle management at info instead of trace level.
|
## Log resource lifecycle management at info instead of trace level.
|
||||||
|
@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||||||
use std::{borrow::Cow, collections::HashMap};
|
use std::{borrow::Cow, collections::HashMap};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api_log,
|
api_log, api_log_debug,
|
||||||
device::{queue::Queue, resource::Device, DeviceDescriptor, DeviceError},
|
device::{queue::Queue, resource::Device, DeviceDescriptor, DeviceError},
|
||||||
global::Global,
|
global::Global,
|
||||||
hal_api::HalApi,
|
hal_api::HalApi,
|
||||||
@ -305,7 +305,7 @@ impl Instance {
|
|||||||
let hal_adapters = unsafe { instance.enumerate_adapters(None) };
|
let hal_adapters = unsafe { instance.enumerate_adapters(None) };
|
||||||
for raw in hal_adapters {
|
for raw in hal_adapters {
|
||||||
let adapter = Adapter::new(raw);
|
let adapter = Adapter::new(raw);
|
||||||
log::info!("Adapter {:?}", adapter.raw.info);
|
api_log_debug!("Adapter {:?}", adapter.raw.info);
|
||||||
adapters.push(adapter);
|
adapters.push(adapter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -336,8 +336,19 @@ impl Instance {
|
|||||||
backend_adapters.retain(|exposed| exposed.info.device_type == wgt::DeviceType::Cpu);
|
backend_adapters.retain(|exposed| exposed.info.device_type == wgt::DeviceType::Cpu);
|
||||||
}
|
}
|
||||||
if let Some(surface) = desc.compatible_surface {
|
if let Some(surface) = desc.compatible_surface {
|
||||||
backend_adapters
|
backend_adapters.retain(|exposed| {
|
||||||
.retain(|exposed| surface.get_capabilities_with_raw(exposed).is_ok());
|
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);
|
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() {
|
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);
|
let adapter = Adapter::new(adapter);
|
||||||
Ok(adapter)
|
Ok(adapter)
|
||||||
} else {
|
} else {
|
||||||
|
@ -162,7 +162,18 @@ macro_rules! api_log {
|
|||||||
macro_rules! api_log {
|
macro_rules! api_log {
|
||||||
($($arg:tt)+) => (log::trace!($($arg)+))
|
($($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;
|
||||||
|
pub(crate) use api_log_debug;
|
||||||
|
|
||||||
#[cfg(feature = "resource_log_info")]
|
#[cfg(feature = "resource_log_info")]
|
||||||
macro_rules! resource_log {
|
macro_rules! resource_log {
|
||||||
|
@ -344,11 +344,11 @@ impl super::Instance {
|
|||||||
callback_data: debug_utils_create_info.callback_data,
|
callback_data: debug_utils_create_info.callback_data,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
log::info!("Debug utils not enabled: extension not listed");
|
log::debug!("Debug utils not enabled: extension not listed");
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log::info!(
|
log::debug!(
|
||||||
"Debug utils not enabled: \
|
"Debug utils not enabled: \
|
||||||
debug_utils_user_data not passed to Instance::from_raw"
|
debug_utils_user_data not passed to Instance::from_raw"
|
||||||
);
|
);
|
||||||
|
@ -180,6 +180,7 @@ pub struct RequestAdapterOptions<S> {
|
|||||||
pub force_fallback_adapter: bool,
|
pub force_fallback_adapter: bool,
|
||||||
/// Surface that is required to be presentable with the requested adapter. This does not
|
/// 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.
|
/// 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>,
|
pub compatible_surface: Option<S>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user