diff --git a/deno_webgpu/pipeline.rs b/deno_webgpu/pipeline.rs index 9923652451..75bd9b3ef2 100644 --- a/deno_webgpu/pipeline.rs +++ b/deno_webgpu/pipeline.rs @@ -146,7 +146,6 @@ pub fn op_webgpu_create_compute_pipeline( #[serde(rename_all = "camelCase")] pub struct PipelineLayout { rid: ResourceId, - label: String, err: Option, } @@ -165,9 +164,6 @@ pub fn op_webgpu_compute_pipeline_get_bind_group_layout( let (bind_group_layout, maybe_err) = gfx_select!(compute_pipeline => instance.compute_pipeline_get_bind_group_layout(compute_pipeline, index, None)); - let label = - gfx_select!(bind_group_layout => instance.bind_group_layout_label(bind_group_layout)); - let rid = state .resource_table .add(super::binding::WebGpuBindGroupLayout( @@ -177,7 +173,6 @@ pub fn op_webgpu_compute_pipeline_get_bind_group_layout( Ok(PipelineLayout { rid, - label, err: maybe_err.map(WebGpuError::from), }) } @@ -441,9 +436,6 @@ pub fn op_webgpu_render_pipeline_get_bind_group_layout( let (bind_group_layout, maybe_err) = gfx_select!(render_pipeline => instance.render_pipeline_get_bind_group_layout(render_pipeline, index, None)); - let label = - gfx_select!(bind_group_layout => instance.bind_group_layout_label(bind_group_layout)); - let rid = state .resource_table .add(super::binding::WebGpuBindGroupLayout( @@ -453,7 +445,6 @@ pub fn op_webgpu_render_pipeline_get_bind_group_layout( Ok(PipelineLayout { rid, - label, err: maybe_err.map(WebGpuError::from), }) } diff --git a/wgpu-core/src/device/global.rs b/wgpu-core/src/device/global.rs index 97e12d6eb7..6016d8c99e 100644 --- a/wgpu-core/src/device/global.rs +++ b/wgpu-core/src/device/global.rs @@ -4,7 +4,7 @@ use crate::{ api_log, binding_model, command, conv, device::{ bgl, life::WaitIdleError, map_buffer, queue, DeviceError, DeviceLostClosure, - DeviceLostReason, HostMap, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL, + DeviceLostReason, HostMap, }, global::Global, hal_api::HalApi, @@ -17,7 +17,7 @@ use crate::{ self, BufferAccessError, BufferAccessResult, BufferMapOperation, CreateBufferError, Trackable, }, - Label, LabelHelpers as _, + Label, }; use arrayvec::ArrayVec; @@ -284,7 +284,7 @@ impl Global { .schedule_resource_destruction(queue::TempResource::Buffer(Arc::new(buffer)), !0); } - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } @@ -316,32 +316,28 @@ impl Global { /// [`device_create_buffer`]: Global::device_create_buffer /// [`usage`]: https://www.w3.org/TR/webgpu/#dom-gputexturedescriptor-usage /// [`wgpu_types::BufferUsages`]: wgt::BufferUsages - pub fn create_buffer_error(&self, id_in: Option, label: Label) { + pub fn create_buffer_error(&self, id_in: Option) { let hub = A::hub(self); let fid = hub.buffers.prepare(id_in); - fid.assign_error(label.borrow_or_default()); + fid.assign_error(); } - pub fn create_render_bundle_error( - &self, - id_in: Option, - label: Label, - ) { + pub fn create_render_bundle_error(&self, id_in: Option) { let hub = A::hub(self); let fid = hub.render_bundles.prepare(id_in); - fid.assign_error(label.borrow_or_default()); + fid.assign_error(); } /// Assign `id_in` an error with the given `label`. /// /// See `create_buffer_error` for more context and explanation. - pub fn create_texture_error(&self, id_in: Option, label: Label) { + pub fn create_texture_error(&self, id_in: Option) { let hub = A::hub(self); let fid = hub.textures.prepare(id_in); - fid.assign_error(label.borrow_or_default()); + fid.assign_error(); } #[cfg(feature = "replay")] @@ -474,10 +470,6 @@ impl Global { Ok(()) } - pub fn buffer_label(&self, id: id::BufferId) -> String { - A::hub(self).buffers.label_for_resource(id) - } - pub fn buffer_destroy( &self, buffer_id: id::BufferId, @@ -598,7 +590,7 @@ impl Global { log::error!("Device::create_texture error: {error}"); - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } @@ -671,7 +663,7 @@ impl Global { log::error!("Device::create_texture error: {error}"); - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } @@ -721,14 +713,10 @@ impl Global { log::error!("Device::create_buffer error: {error}"); - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn texture_label(&self, id: id::TextureId) -> String { - A::hub(self).textures.label_for_resource(id) - } - pub fn texture_destroy( &self, texture_id: id::TextureId, @@ -855,14 +843,10 @@ impl Global { }; log::error!("Texture::create_view({texture_id:?}) error: {error}"); - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn texture_view_label(&self, id: id::TextureViewId) -> String { - A::hub(self).texture_views.label_for_resource(id) - } - pub fn texture_view_drop( &self, texture_view_id: id::TextureViewId, @@ -933,14 +917,10 @@ impl Global { return (id, None); }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn sampler_label(&self, id: id::SamplerId) -> String { - A::hub(self).samplers.label_for_resource(id) - } - pub fn sampler_drop(&self, sampler_id: id::SamplerId) { profiling::scope!("Sampler::drop"); api_log!("Sampler::drop {sampler_id:?}"); @@ -1042,14 +1022,10 @@ impl Global { }; let fid = hub.bind_group_layouts.prepare(id_in); - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn bind_group_layout_label(&self, id: id::BindGroupLayoutId) -> String { - A::hub(self).bind_group_layouts.label_for_resource(id) - } - pub fn bind_group_layout_drop(&self, bind_group_layout_id: id::BindGroupLayoutId) { profiling::scope!("BindGroupLayout::drop"); api_log!("BindGroupLayout::drop {bind_group_layout_id:?}"); @@ -1106,14 +1082,10 @@ impl Global { return (id, None); }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn pipeline_layout_label(&self, id: id::PipelineLayoutId) -> String { - A::hub(self).pipeline_layouts.label_for_resource(id) - } - pub fn pipeline_layout_drop(&self, pipeline_layout_id: id::PipelineLayoutId) { profiling::scope!("PipelineLayout::drop"); api_log!("PipelineLayout::drop {pipeline_layout_id:?}"); @@ -1192,14 +1164,10 @@ impl Global { return (id, None); }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn bind_group_label(&self, id: id::BindGroupId) -> String { - A::hub(self).bind_groups.label_for_resource(id) - } - pub fn bind_group_drop(&self, bind_group_id: id::BindGroupId) { profiling::scope!("BindGroup::drop"); api_log!("BindGroup::drop {bind_group_id:?}"); @@ -1300,7 +1268,7 @@ impl Global { log::error!("Device::create_shader_module error: {error}"); - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } @@ -1354,14 +1322,10 @@ impl Global { log::error!("Device::create_shader_module_spirv error: {error}"); - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn shader_module_label(&self, id: id::ShaderModuleId) -> String { - A::hub(self).shader_modules.label_for_resource(id) - } - pub fn shader_module_drop(&self, shader_module_id: id::ShaderModuleId) { profiling::scope!("ShaderModule::drop"); api_log!("ShaderModule::drop {shader_module_id:?}"); @@ -1406,14 +1370,10 @@ impl Global { return (id.into_command_encoder_id(), None); }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id.into_command_encoder_id(), Some(error)) } - pub fn command_buffer_label(&self, id: id::CommandBufferId) -> String { - A::hub(self).command_buffers.label_for_resource(id) - } - pub fn command_encoder_drop(&self, command_encoder_id: id::CommandEncoderId) { profiling::scope!("CommandEncoder::drop"); api_log!("CommandEncoder::drop {command_encoder_id:?}"); @@ -1501,14 +1461,10 @@ impl Global { return (id, None); }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } - pub fn render_bundle_label(&self, id: id::RenderBundleId) -> String { - A::hub(self).render_bundles.label_for_resource(id) - } - pub fn render_bundle_drop(&self, render_bundle_id: id::RenderBundleId) { profiling::scope!("RenderBundle::drop"); api_log!("RenderBundle::drop {render_bundle_id:?}"); @@ -1567,7 +1523,7 @@ impl Global { return (id, None); }; - let id = fid.assign_error(""); + let id = fid.assign_error(); (id, Some(error)) } @@ -1593,10 +1549,6 @@ impl Global { } } - pub fn query_set_label(&self, id: id::QuerySetId) -> String { - A::hub(self).query_sets.label_for_resource(id) - } - pub fn device_create_render_pipeline( &self, device_id: DeviceId, @@ -1648,7 +1600,7 @@ impl Global { return (id, None); }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); // We also need to assign errors to the implicit pipeline layout and the // implicit bind group layout. We have to remove any existing entries first. @@ -1658,12 +1610,12 @@ impl Global { if pipeline_layout_guard.contains(ids.root_id) { pipeline_layout_guard.remove(ids.root_id); } - pipeline_layout_guard.insert_error(ids.root_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + pipeline_layout_guard.insert_error(ids.root_id); for &bgl_id in ids.group_ids.iter() { if bgl_guard.contains(bgl_id) { bgl_guard.remove(bgl_id); } - bgl_guard.insert_error(bgl_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + bgl_guard.insert_error(bgl_id); } } @@ -1699,17 +1651,10 @@ impl Global { return (id, None); }; - let id = hub - .bind_group_layouts - .prepare(id_in) - .assign_error(""); + let id = hub.bind_group_layouts.prepare(id_in).assign_error(); (id, Some(error)) } - pub fn render_pipeline_label(&self, id: id::RenderPipelineId) -> String { - A::hub(self).render_pipelines.label_for_resource(id) - } - pub fn render_pipeline_drop(&self, render_pipeline_id: id::RenderPipelineId) { profiling::scope!("RenderPipeline::drop"); api_log!("RenderPipeline::drop {render_pipeline_id:?}"); @@ -1786,7 +1731,7 @@ impl Global { return (id, None); }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); // We also need to assign errors to the implicit pipeline layout and the // implicit bind group layout. We have to remove any existing entries first. @@ -1796,12 +1741,12 @@ impl Global { if pipeline_layout_guard.contains(ids.root_id) { pipeline_layout_guard.remove(ids.root_id); } - pipeline_layout_guard.insert_error(ids.root_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + pipeline_layout_guard.insert_error(ids.root_id); for &bgl_id in ids.group_ids.iter() { if bgl_guard.contains(bgl_id) { bgl_guard.remove(bgl_id); } - bgl_guard.insert_error(bgl_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + bgl_guard.insert_error(bgl_id); } } (id, Some(error)) @@ -1836,17 +1781,10 @@ impl Global { return (id, None); }; - let id = hub - .bind_group_layouts - .prepare(id_in) - .assign_error(""); + let id = hub.bind_group_layouts.prepare(id_in).assign_error(); (id, Some(error)) } - pub fn compute_pipeline_label(&self, id: id::ComputePipelineId) -> String { - A::hub(self).compute_pipelines.label_for_resource(id) - } - pub fn compute_pipeline_drop(&self, compute_pipeline_id: id::ComputePipelineId) { profiling::scope!("ComputePipeline::drop"); api_log!("ComputePipeline::drop {compute_pipeline_id:?}"); @@ -1916,7 +1854,7 @@ impl Global { } }; - let id = fid.assign_error(desc.label.borrow_or_default()); + let id = fid.assign_error(); (id, Some(error)) } @@ -2350,10 +2288,6 @@ impl Global { Ok(all_queue_empty) } - pub fn device_label(&self, id: DeviceId) -> String { - A::hub(self).devices.label_for_resource(id) - } - pub fn device_start_capture(&self, id: DeviceId) { api_log!("Device::start_capture"); @@ -2385,8 +2319,7 @@ impl Global { // the registry. pub fn device_make_invalid(&self, device_id: DeviceId) { let hub = A::hub(self); - hub.devices - .force_replace_with_error(device_id, "Made invalid."); + hub.devices.force_replace_with_error(device_id); } pub fn pipeline_cache_get_data(&self, id: id::PipelineCacheId) -> Option> { diff --git a/wgpu-core/src/device/mod.rs b/wgpu-core/src/device/mod.rs index cd9eaa7d24..03d9adcc60 100644 --- a/wgpu-core/src/device/mod.rs +++ b/wgpu-core/src/device/mod.rs @@ -39,7 +39,6 @@ pub(crate) const ZERO_BUFFER_SIZE: BufferAddress = 512 << 10; // See https://github.com/gfx-rs/wgpu/issues/4589. 60s to reduce the chances of this. const CLEANUP_WAIT_MS: u32 = 60000; -const IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL: &str = "Implicit BindGroupLayout in the Error State"; const ENTRYPOINT_FAILURE_ERROR: &str = "The given EntryPoint is Invalid"; pub type DeviceDescriptor<'a> = wgt::DeviceDescriptor>; diff --git a/wgpu-core/src/device/queue.rs b/wgpu-core/src/device/queue.rs index 550d8aa7c7..5951ea7507 100644 --- a/wgpu-core/src/device/queue.rs +++ b/wgpu-core/src/device/queue.rs @@ -42,7 +42,7 @@ pub struct Queue { } crate::impl_resource_type!(Queue); -// TODO: remove once we get rid of Registry.label_for_resource +// TODO: https://github.com/gfx-rs/wgpu/issues/4014 impl Labeled for Queue { fn label(&self) -> &str { "" diff --git a/wgpu-core/src/device/resource.rs b/wgpu-core/src/device/resource.rs index 6ddcc0afae..4c44d19ea5 100644 --- a/wgpu-core/src/device/resource.rs +++ b/wgpu-core/src/device/resource.rs @@ -60,7 +60,7 @@ use super::{ life::ResourceMaps, queue::{self, Queue}, DeviceDescriptor, DeviceError, ImplicitPipelineContext, UserClosures, ENTRYPOINT_FAILURE_ERROR, - IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL, ZERO_BUFFER_SIZE, + ZERO_BUFFER_SIZE, }; /// Structure describing a logical device. Some members are internally mutable, @@ -2615,10 +2615,10 @@ impl Device { // that are not even in the storage. if let Some(ref ids) = implicit_context { let mut pipeline_layout_guard = hub.pipeline_layouts.write(); - pipeline_layout_guard.insert_error(ids.root_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + pipeline_layout_guard.insert_error(ids.root_id); let mut bgl_guard = hub.bind_group_layouts.write(); for &bgl_id in ids.group_ids.iter() { - bgl_guard.insert_error(bgl_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + bgl_guard.insert_error(bgl_id); } } @@ -2780,9 +2780,9 @@ impl Device { //TODO: only lock mutable if the layout is derived let mut pipeline_layout_guard = hub.pipeline_layouts.write(); let mut bgl_guard = hub.bind_group_layouts.write(); - pipeline_layout_guard.insert_error(ids.root_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + pipeline_layout_guard.insert_error(ids.root_id); for &bgl_id in ids.group_ids.iter() { - bgl_guard.insert_error(bgl_id, IMPLICIT_BIND_GROUP_LAYOUT_ERROR_LABEL); + bgl_guard.insert_error(bgl_id); } } diff --git a/wgpu-core/src/error.rs b/wgpu-core/src/error.rs index 9fe88a41b9..81f0e1045f 100644 --- a/wgpu-core/src/error.rs +++ b/wgpu-core/src/error.rs @@ -1,89 +1,14 @@ use core::fmt; use std::{error::Error, sync::Arc}; -use crate::{gfx_select, global::Global}; - pub struct ErrorFormatter<'a> { writer: &'a mut dyn fmt::Write, - global: &'a Global, } impl<'a> ErrorFormatter<'a> { pub fn error(&mut self, err: &dyn Error) { writeln!(self.writer, " {err}").expect("Error formatting error"); } - - pub fn note(&mut self, note: &dyn fmt::Display) { - writeln!(self.writer, " note: {note}").expect("Error formatting error"); - } - - pub fn label(&mut self, label_key: &str, label_value: &String) { - if !label_key.is_empty() && !label_value.is_empty() { - self.note(&format!("{label_key} = `{label_value}`")); - } - } - - pub fn bind_group_label(&mut self, id: &crate::id::BindGroupId) { - let label: String = gfx_select!(id => self.global.bind_group_label(*id)); - self.label("bind group", &label); - } - - pub fn bind_group_layout_label(&mut self, id: &crate::id::BindGroupLayoutId) { - let label: String = gfx_select!(id => self.global.bind_group_layout_label(*id)); - self.label("bind group layout", &label); - } - - pub fn render_pipeline_label(&mut self, id: &crate::id::RenderPipelineId) { - let label: String = gfx_select!(id => self.global.render_pipeline_label(*id)); - self.label("render pipeline", &label); - } - - pub fn compute_pipeline_label(&mut self, id: &crate::id::ComputePipelineId) { - let label: String = gfx_select!(id => self.global.compute_pipeline_label(*id)); - self.label("compute pipeline", &label); - } - - pub fn buffer_label_with_key(&mut self, id: &crate::id::BufferId, key: &str) { - let label: String = gfx_select!(id => self.global.buffer_label(*id)); - self.label(key, &label); - } - - pub fn buffer_label(&mut self, id: &crate::id::BufferId) { - self.buffer_label_with_key(id, "buffer"); - } - - pub fn texture_label_with_key(&mut self, id: &crate::id::TextureId, key: &str) { - let label: String = gfx_select!(id => self.global.texture_label(*id)); - self.label(key, &label); - } - - pub fn texture_label(&mut self, id: &crate::id::TextureId) { - self.texture_label_with_key(id, "texture"); - } - - pub fn texture_view_label_with_key(&mut self, id: &crate::id::TextureViewId, key: &str) { - let label: String = gfx_select!(id => self.global.texture_view_label(*id)); - self.label(key, &label); - } - - pub fn texture_view_label(&mut self, id: &crate::id::TextureViewId) { - self.texture_view_label_with_key(id, "texture view"); - } - - pub fn sampler_label(&mut self, id: &crate::id::SamplerId) { - let label: String = gfx_select!(id => self.global.sampler_label(*id)); - self.label("sampler", &label); - } - - pub fn command_buffer_label(&mut self, id: &crate::id::CommandBufferId) { - let label: String = gfx_select!(id => self.global.command_buffer_label(*id)); - self.label("command buffer", &label); - } - - pub fn query_set_label(&mut self, id: &crate::id::QuerySetId) { - let label: String = gfx_select!(id => self.global.query_set_label(*id)); - self.label("query set", &label); - } } pub trait PrettyError: Error + Sized { @@ -92,12 +17,8 @@ pub trait PrettyError: Error + Sized { } } -pub fn format_pretty_any( - writer: &mut dyn fmt::Write, - global: &Global, - error: &(dyn Error + 'static), -) { - let mut fmt = ErrorFormatter { writer, global }; +pub fn format_pretty_any(writer: &mut dyn fmt::Write, error: &(dyn Error + 'static)) { + let mut fmt = ErrorFormatter { writer }; if let Some(pretty_err) = error.downcast_ref::() { return pretty_err.fmt_pretty(&mut fmt); @@ -152,31 +73,33 @@ pub fn format_pretty_any( #[derive(Debug)] pub struct ContextError { - pub string: &'static str, + pub fn_ident: &'static str, #[cfg(send_sync)] - pub cause: Box, + pub source: Box, #[cfg(not(send_sync))] - pub cause: Box, - pub label_key: &'static str, + pub source: Box, pub label: String, } impl PrettyError for ContextError { fn fmt_pretty(&self, fmt: &mut ErrorFormatter) { - fmt.error(self); - fmt.label(self.label_key, &self.label); + writeln!(fmt.writer, " In {}", self.fn_ident).expect("Error formatting error"); + if !self.label.is_empty() { + writeln!(fmt.writer, " note: label = `{}`", self.label) + .expect("Error formatting error"); + } } } impl fmt::Display for ContextError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "In {}", self.string) + write!(f, "In {}", self.fn_ident) } } impl Error for ContextError { fn source(&self) -> Option<&(dyn Error + 'static)> { - Some(self.cause.as_ref()) + Some(self.source.as_ref()) } } diff --git a/wgpu-core/src/instance.rs b/wgpu-core/src/instance.rs index 6f4e183590..ea851b1d57 100644 --- a/wgpu-core/src/instance.rs +++ b/wgpu-core/src/instance.rs @@ -9,8 +9,8 @@ use crate::{ id::{markers, AdapterId, DeviceId, Id, Marker, QueueId, SurfaceId}, lock::{rank, Mutex}, present::Presentation, - resource::{Labeled, ResourceType}, - resource_log, LabelHelpers, DOWNLEVEL_WARNING_MESSAGE, + resource::ResourceType, + resource_log, DOWNLEVEL_WARNING_MESSAGE, }; use wgt::{Backend, Backends, PowerPreference}; @@ -147,12 +147,6 @@ pub struct Surface { impl ResourceType for Surface { const TYPE: &'static str = "Surface"; } -// TODO: remove once we get rid of Registry.label_for_resource -impl Labeled for Surface { - fn label(&self) -> &str { - "" - } -} impl crate::storage::StorageItem for Surface { type Marker = markers::Surface; } @@ -367,12 +361,6 @@ impl Adapter { } crate::impl_resource_type!(Adapter); -// TODO: remove once we get rid of Registry.label_for_resource -impl Labeled for Adapter { - fn label(&self) -> &str { - "" - } -} crate::impl_storage_item!(Adapter); #[derive(Clone, Debug, Error)] @@ -1103,8 +1091,8 @@ impl Global { return (device_id, queue_id, None); }; - let device_id = device_fid.assign_error(desc.label.borrow_or_default()); - let queue_id = queue_fid.assign_error(desc.label.borrow_or_default()); + let device_id = device_fid.assign_error(); + let queue_id = queue_fid.assign_error(); (device_id, queue_id, Some(error)) } @@ -1154,8 +1142,8 @@ impl Global { return (device_id, queue_id, None); }; - let device_id = devices_fid.assign_error(desc.label.borrow_or_default()); - let queue_id = queues_fid.assign_error(desc.label.borrow_or_default()); + let device_id = devices_fid.assign_error(); + let queue_id = queues_fid.assign_error(); (device_id, queue_id, Some(error)) } } diff --git a/wgpu-core/src/lib.rs b/wgpu-core/src/lib.rs index b8b468d08e..7600436bc4 100644 --- a/wgpu-core/src/lib.rs +++ b/wgpu-core/src/lib.rs @@ -96,15 +96,10 @@ pub type RawString = *const c_char; pub type Label<'a> = Option>; trait LabelHelpers<'a> { - fn borrow_option(&'a self) -> Option<&'a str>; fn to_hal(&'a self, flags: wgt::InstanceFlags) -> Option<&'a str>; - fn borrow_or_default(&'a self) -> &'a str; fn to_string(&self) -> String; } impl<'a> LabelHelpers<'a> for Label<'a> { - fn borrow_option(&'a self) -> Option<&'a str> { - self.as_ref().map(|cow| cow.as_ref()) - } fn to_hal(&'a self, flags: wgt::InstanceFlags) -> Option<&'a str> { if flags.contains(wgt::InstanceFlags::DISCARD_HAL_LABELS) { return None; @@ -112,9 +107,6 @@ impl<'a> LabelHelpers<'a> for Label<'a> { self.as_ref().map(|cow| cow.as_ref()) } - fn borrow_or_default(&'a self) -> &'a str { - self.borrow_option().unwrap_or_default() - } fn to_string(&self) -> String { self.as_ref().map(|cow| cow.to_string()).unwrap_or_default() } diff --git a/wgpu-core/src/registry.rs b/wgpu-core/src/registry.rs index 391ffdce74..390792205d 100644 --- a/wgpu-core/src/registry.rs +++ b/wgpu-core/src/registry.rs @@ -92,8 +92,8 @@ impl FutureId<'_, T> { self.id } - pub fn assign_error(self, label: &str) -> Id { - self.data.write().insert_error(self.id, label); + pub fn assign_error(self) -> Id { + self.data.write().insert_error(self.id); self.id } } @@ -136,10 +136,10 @@ impl Registry { let mut storage = self.storage.write(); storage.force_replace(id, value) } - pub(crate) fn force_replace_with_error(&self, id: Id, label: &str) { + pub(crate) fn force_replace_with_error(&self, id: Id) { let mut storage = self.storage.write(); storage.remove(id); - storage.insert_error(id, label); + storage.insert_error(id); } pub(crate) fn unregister(&self, id: Id) -> Option> { let value = self.storage.write().remove(id); @@ -151,33 +151,6 @@ impl Registry { value } - pub(crate) fn label_for_resource(&self, id: Id) -> String { - let guard = self.storage.read(); - - let type_name = guard.kind(); - - // Using `get` over `try_get` is fine for the most part. - // However, there's corner cases where it can happen that a resource still holds an Arc - // to another resource that was already dropped explicitly from the registry. - // That resource is now in an invalid state, likely causing an error that lead - // us here, trying to print its label but failing because the id is now vacant. - match guard.try_get(id) { - Ok(Some(res)) => { - let label = res.label(); - if label.is_empty() { - format!("<{}-{:?}>", type_name, id.unzip()) - } else { - label.to_owned() - } - } - _ => format!( - "", - type_name, - guard.label_for_invalid_id(id) - ), - } - } - pub(crate) fn generate_report(&self) -> RegistryReport { let storage = self.storage.read(); let mut report = RegistryReport { @@ -189,7 +162,7 @@ impl Registry { match *element { Element::Occupied(..) => report.num_kept_from_user += 1, Element::Vacant => report.num_released_from_user += 1, - Element::Error(..) => report.num_error += 1, + Element::Error(_) => report.num_error += 1, } } report @@ -200,11 +173,7 @@ impl Registry { mod tests { use std::sync::Arc; - use crate::{ - id::Marker, - resource::{Labeled, ResourceType}, - storage::StorageItem, - }; + use crate::{id::Marker, resource::ResourceType, storage::StorageItem}; use super::Registry; struct TestData; @@ -214,12 +183,6 @@ mod tests { impl ResourceType for TestData { const TYPE: &'static str = "TestData"; } - // TODO: remove once we get rid of Registry.label_for_resource - impl Labeled for TestData { - fn label(&self) -> &str { - "" - } - } impl StorageItem for TestData { type Marker = TestDataId; } diff --git a/wgpu-core/src/resource.rs b/wgpu-core/src/resource.rs index 740e1b6338..3e39d5cc39 100644 --- a/wgpu-core/src/resource.rs +++ b/wgpu-core/src/resource.rs @@ -893,7 +893,7 @@ impl Drop for StagingBuffer { } crate::impl_resource_type!(StagingBuffer); -// TODO: remove once we get rid of Registry.label_for_resource +// TODO: add label impl Labeled for StagingBuffer { fn label(&self) -> &str { "" diff --git a/wgpu-core/src/storage.rs b/wgpu-core/src/storage.rs index 8d6733a785..4776565ceb 100644 --- a/wgpu-core/src/storage.rs +++ b/wgpu-core/src/storage.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use wgt::Backend; use crate::id::{Id, Marker}; -use crate::resource::{Labeled, ResourceType}; +use crate::resource::ResourceType; use crate::{Epoch, Index}; /// An entry in a `Storage::map` table. @@ -19,16 +19,13 @@ pub(crate) enum Element { /// Like `Occupied`, but an error occurred when creating the /// resource. - /// - /// The given `String` is the resource's descriptor label. - Error(Epoch, String), + Error(Epoch), } #[derive(Clone, Debug)] pub(crate) struct InvalidId; -// The Labeled bound is still needed because of label_for_resource -pub(crate) trait StorageItem: ResourceType + Labeled { +pub(crate) trait StorageItem: ResourceType { type Marker: Marker; } @@ -88,7 +85,7 @@ where let (index, epoch, _) = id.unzip(); match self.map.get(index as usize) { Some(&Element::Vacant) => false, - Some(&Element::Occupied(_, storage_epoch) | &Element::Error(storage_epoch, _)) => { + Some(&Element::Occupied(_, storage_epoch) | &Element::Error(storage_epoch)) => { storage_epoch == epoch } None => false, @@ -107,7 +104,7 @@ where let (result, storage_epoch) = match self.map.get(index as usize) { Some(&Element::Occupied(ref v, epoch)) => (Ok(Some(v)), epoch), Some(&Element::Vacant) => return Ok(None), - Some(&Element::Error(epoch, ..)) => (Err(InvalidId), epoch), + Some(&Element::Error(epoch)) => (Err(InvalidId), epoch), None => return Err(InvalidId), }; assert_eq!( @@ -125,7 +122,7 @@ where let (result, storage_epoch) = match self.map.get(index as usize) { Some(&Element::Occupied(ref v, epoch)) => (Ok(v), epoch), Some(&Element::Vacant) => panic!("{}[{:?}] does not exist", self.kind, id), - Some(&Element::Error(epoch, ..)) => (Err(InvalidId), epoch), + Some(&Element::Error(epoch)) => (Err(InvalidId), epoch), None => return Err(InvalidId), }; assert_eq!( @@ -142,14 +139,6 @@ where Ok(Arc::clone(self.get(id)?)) } - pub(crate) fn label_for_invalid_id(&self, id: Id) -> &str { - let (index, _, _) = id.unzip(); - match self.map.get(index as usize) { - Some(Element::Error(_, label)) => label, - _ => "", - } - } - fn insert_impl(&mut self, index: usize, epoch: Epoch, element: Element) { if index >= self.map.len() { self.map.resize_with(index + 1, || Element::Vacant); @@ -164,7 +153,7 @@ where T::TYPE ); } - Element::Error(storage_epoch, _) => { + Element::Error(storage_epoch) => { assert_ne!( epoch, storage_epoch, @@ -181,22 +170,15 @@ where self.insert_impl(index as usize, epoch, Element::Occupied(value, epoch)) } - pub(crate) fn insert_error(&mut self, id: Id, label: &str) { + pub(crate) fn insert_error(&mut self, id: Id) { log::trace!("User is inserting as error {}{:?}", T::TYPE, id); let (index, epoch, _) = id.unzip(); - self.insert_impl( - index as usize, - epoch, - Element::Error(epoch, label.to_string()), - ) + self.insert_impl(index as usize, epoch, Element::Error(epoch)) } pub(crate) fn replace_with_error(&mut self, id: Id) -> Result, InvalidId> { let (index, epoch, _) = id.unzip(); - match std::mem::replace( - &mut self.map[index as usize], - Element::Error(epoch, String::new()), - ) { + match std::mem::replace(&mut self.map[index as usize], Element::Error(epoch)) { Element::Vacant => panic!("Cannot access vacant resource"), Element::Occupied(value, storage_epoch) => { assert_eq!(epoch, storage_epoch); @@ -220,7 +202,7 @@ where assert_eq!(epoch, storage_epoch); Some(value) } - Element::Error(..) => None, + Element::Error(_) => None, Element::Vacant => panic!("Cannot remove a vacant resource"), } } @@ -237,10 +219,6 @@ where }) } - pub(crate) fn kind(&self) -> &str { - self.kind - } - pub(crate) fn len(&self) -> usize { self.map.len() } diff --git a/wgpu/src/backend/wgpu_core.rs b/wgpu/src/backend/wgpu_core.rs index 60f2dbca8e..3a57b4c6e0 100644 --- a/wgpu/src/backend/wgpu_core.rs +++ b/wgpu/src/backend/wgpu_core.rs @@ -29,8 +29,6 @@ use wgc::{ }; use wgt::WasmNotSendSync; -const LABEL: &str = "label"; - pub struct ContextWgpuCore(wgc::global::Global); impl Drop for ContextWgpuCore { @@ -63,10 +61,6 @@ impl ContextWgpuCore { Self(unsafe { wgc::global::Global::from_instance(core_instance) }) } - pub(crate) fn global(&self) -> &wgc::global::Global { - &self.0 - } - pub fn enumerate_adapters(&self, backends: wgt::Backends) -> Vec { self.0 .enumerate_adapters(wgc::instance::AdapterInputs::Mask(backends, |_| None)) @@ -150,7 +144,6 @@ impl ContextWgpuCore { self.handle_error( &device.error_sink, cause, - LABEL, desc.label, "Device::create_texture_from_hal", ); @@ -179,7 +172,6 @@ impl ContextWgpuCore { self.handle_error( &device.error_sink, cause, - LABEL, desc.label, "Device::create_buffer_from_hal", ); @@ -273,16 +265,14 @@ impl ContextWgpuCore { fn handle_error( &self, sink_mutex: &Mutex, - cause: impl Error + WasmNotSendSync + 'static, - label_key: &'static str, + source: impl Error + WasmNotSendSync + 'static, label: Label<'_>, - string: &'static str, + fn_ident: &'static str, ) { let error = wgc::error::ContextError { - string, - cause: Box::new(cause), + fn_ident, + source: Box::new(source), label: label.unwrap_or_default().to_string(), - label_key, }; let mut sink = sink_mutex.lock(); let mut source_opt: Option<&(dyn Error + 'static)> = Some(&error); @@ -307,10 +297,10 @@ impl ContextWgpuCore { fn handle_error_nolabel( &self, sink_mutex: &Mutex, - cause: impl Error + WasmNotSendSync + 'static, - string: &'static str, + source: impl Error + WasmNotSendSync + 'static, + fn_ident: &'static str, ) { - self.handle_error(sink_mutex, cause, "", None, string) + self.handle_error(sink_mutex, source, None, fn_ident) } #[track_caller] @@ -323,24 +313,18 @@ impl ContextWgpuCore { } fn format_error(&self, err: &(impl Error + 'static)) -> String { - let global = self.global(); let mut err_descs = vec![]; let mut level = 0; - fn print_tree( - err_descs: &mut Vec, - level: &mut usize, - global: &wgc::global::Global, - e: &(dyn Error + 'static), - ) { + fn print_tree(err_descs: &mut Vec, level: &mut usize, e: &(dyn Error + 'static)) { let mut print = |e| { let mut err_str = " ".repeat(*level * 2); - wgc::error::format_pretty_any(&mut err_str, global, e); + wgc::error::format_pretty_any(&mut err_str, e); err_descs.push(err_str); if let Some(e) = e.source() { *level += 1; - print_tree(err_descs, level, global, e); + print_tree(err_descs, level, e); *level -= 1; } }; @@ -353,7 +337,7 @@ impl ContextWgpuCore { } } - print_tree(&mut err_descs, &mut level, global, err); + print_tree(&mut err_descs, &mut level, err); format!("Validation Error\n\nCaused by:\n{}", err_descs.join("")) } @@ -940,7 +924,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause.clone(), - LABEL, desc.label, "Device::create_shader_module", ); @@ -972,7 +955,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause.clone(), - LABEL, desc.label, "Device::create_shader_module_spirv", ); @@ -1000,7 +982,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_bind_group_layout", ); @@ -1114,7 +1095,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_bind_group", ); @@ -1156,7 +1136,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_pipeline_layout", ); @@ -1241,7 +1220,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_render_pipeline", ); @@ -1296,7 +1274,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_compute_pipeline", ); @@ -1326,7 +1303,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::device_create_pipeline_cache_init", ); @@ -1349,7 +1325,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_buffer", ); @@ -1377,7 +1352,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_texture", ); @@ -1422,7 +1396,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_sampler", ); @@ -1460,7 +1433,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &device_data.error_sink, cause, - LABEL, desc.label, "Device::create_command_encoder", ); @@ -1671,7 +1643,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &texture_data.error_sink, cause, - LABEL, desc.label, "Texture::create_view", ); @@ -1945,7 +1916,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &encoder_data.error_sink, cause, - LABEL, desc.label, "CommandEncoder::begin_compute_pass", ); @@ -2017,7 +1987,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &encoder_data.error_sink, cause, - LABEL, desc.label, "CommandEncoder::begin_compute_pass", ); @@ -2425,7 +2394,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::set_pipeline", ); @@ -2448,7 +2416,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::set_bind_group", ); @@ -2466,7 +2433,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::set_push_constant", ); @@ -2483,7 +2449,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::insert_debug_marker", ); @@ -2500,7 +2465,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::push_debug_group", ); @@ -2516,7 +2480,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::pop_debug_group", ); @@ -2538,7 +2501,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::write_timestamp", ); @@ -2561,7 +2523,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::begin_pipeline_statistics_query", ); @@ -2577,7 +2538,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::end_pipeline_statistics_query", ); @@ -2596,7 +2556,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::dispatch_workgroups", ); @@ -2619,7 +2578,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::dispatch_workgroups_indirect", ); @@ -2635,7 +2593,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "ComputePass::end", ); @@ -2838,7 +2795,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_pipeline", ); @@ -2861,7 +2817,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_bind_group", ); @@ -2886,7 +2841,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_index_buffer", ); @@ -2910,7 +2864,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_vertex_buffer", ); @@ -2932,7 +2885,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_push_constants", ); @@ -2956,7 +2908,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::draw", ); @@ -2982,7 +2933,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::draw_indexed", ); @@ -3004,7 +2954,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::draw_indirect", ); @@ -3027,7 +2976,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::draw_indexed_indirect", ); @@ -3051,7 +2999,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::multi_draw_indirect", ); @@ -3076,7 +3023,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::multi_draw_indexed_indirect", ); @@ -3106,7 +3052,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::multi_draw_indirect_count", ); @@ -3136,7 +3081,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::multi_draw_indexed_indirect_count", ); @@ -3153,7 +3097,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_blend_constant", ); @@ -3176,7 +3119,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_scissor_rect", ); @@ -3201,7 +3143,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_viewport", ); @@ -3218,7 +3159,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::set_stencil_reference", ); @@ -3235,7 +3175,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::insert_debug_marker", ); @@ -3252,7 +3191,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::push_debug_group", ); @@ -3268,7 +3206,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::pop_debug_group", ); @@ -3290,7 +3227,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::write_timestamp", ); @@ -3307,7 +3243,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::begin_occlusion_query", ); @@ -3323,7 +3258,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::end_occlusion_query", ); @@ -3346,7 +3280,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::begin_pipeline_statistics_query", ); @@ -3362,7 +3295,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::end_pipeline_statistics_query", ); @@ -3383,7 +3315,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::execute_bundles", ); @@ -3399,7 +3330,6 @@ impl crate::Context for ContextWgpuCore { self.handle_error( &pass_data.error_sink, cause, - LABEL, pass_data.pass.label(), "RenderPass::end", );