diff --git a/render/wgpu/src/buffer_pool.rs b/render/wgpu/src/buffer_pool.rs index ddc962b41..561fa4f65 100644 --- a/render/wgpu/src/buffer_pool.rs +++ b/render/wgpu/src/buffer_pool.rs @@ -8,7 +8,7 @@ use std::sync::{Arc, Mutex, Weak}; type PoolInner = Mutex>; type Constructor = Box T>; -#[derive(Debug, Default)] +#[derive(Debug)] pub struct TexturePool { pools: FnvHashMap>, globals_cache: FnvHashMap>, @@ -16,7 +16,10 @@ pub struct TexturePool { impl TexturePool { pub fn new() -> Self { - Default::default() + Self { + pools: FnvHashMap::default(), + globals_cache: FnvHashMap::default(), + } } pub fn get_texture( @@ -34,9 +37,17 @@ impl TexturePool { sample_count, }; let pool = self.pools.entry(key).or_insert_with(|| { + let label = if cfg!(feature = "render_debug_labels") { + use std::sync::atomic::{AtomicU32, Ordering}; + static ID_COUNT: AtomicU32 = AtomicU32::new(0); + let id = ID_COUNT.fetch_add(1, Ordering::Relaxed); + create_debug_label!("Pooled texture {}", id) + } else { + None + }; BufferPool::new(Box::new(move |descriptors| { descriptors.device.create_texture(&wgpu::TextureDescriptor { - label: None, + label: label.as_deref(), size, mip_level_count: 1, sample_count, diff --git a/render/wgpu/src/commands.rs b/render/wgpu/src/commands.rs index 85495e402..2a00abf08 100644 --- a/render/wgpu/src/commands.rs +++ b/render/wgpu/src/commands.rs @@ -306,7 +306,15 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob Chunk::Draw(chunk, needs_depth) => { let mut render_pass = draw_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: None, + label: create_debug_label!( + "Chunked draw calls {}", + if needs_depth { + "(with depth)" + } else { + "(Depthless)" + } + ) + .as_deref(), color_attachments: &[target.color_attachments(clear_color.take())], depth_stencil_attachment: if needs_depth { target.depth_attachment(&descriptors, texture_pool, first) @@ -394,7 +402,16 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob descriptors .device .create_bind_group(&wgpu::BindGroupDescriptor { - label: None, + label: create_debug_label!( + "Complex blend binds {:?} {}", + blend_mode, + if needs_depth { + "(with depth)" + } else { + "(Depthless)" + } + ) + .as_deref(), layout: &descriptors.bind_layouts.blend, entries: &[ wgpu::BindGroupEntry { @@ -424,7 +441,16 @@ impl<'pass, 'frame: 'pass, 'global: 'frame> CommandRenderer<'pass, 'frame, 'glob let mut render_pass = draw_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: None, + label: create_debug_label!( + "Complex blend {:?} {}", + blend_mode, + if needs_depth { + "(with depth)" + } else { + "(Depthless)" + } + ) + .as_deref(), color_attachments: &[target.color_attachments(clear_color.take())], depth_stencil_attachment: if needs_depth { target.depth_attachment(descriptors, texture_pool, first) diff --git a/render/wgpu/src/surface.rs b/render/wgpu/src/surface.rs index 518df1e2b..04ee8797a 100644 --- a/render/wgpu/src/surface.rs +++ b/render/wgpu/src/surface.rs @@ -275,7 +275,7 @@ impl Surface { resolve_target: None, })], depth_stencil_attachment: None, - label: None, + label: create_debug_label!("Copy back to render target").as_deref(), }); render_pass.set_pipeline(&pipeline);