From 1f91c5f297bdc179bf85fdd0f58a15b07ece501b Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Thu, 8 Jul 2021 23:21:02 -0400 Subject: [PATCH] hal/dx12: debug markers --- wgpu-hal/src/dx12/command.rs | 27 ++++++++++++++++++++++++--- wgpu-hal/src/dx12/device.rs | 10 ++++++++++ wgpu-hal/src/dx12/mod.rs | 2 ++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/wgpu-hal/src/dx12/command.rs b/wgpu-hal/src/dx12/command.rs index 628ed8a9c6..dc7001b92e 100644 --- a/wgpu-hal/src/dx12/command.rs +++ b/wgpu-hal/src/dx12/command.rs @@ -13,6 +13,15 @@ fn make_box(origin: &wgt::Origin3d, size: &crate::CopyExtent) -> d3d12::D3D12_BO } } +impl super::Temp { + fn prepare_marker(&mut self, marker: &str) -> (&[u16], u32) { + self.marker.clear(); + self.marker.extend(marker.encode_utf16()); + self.marker.push(0); + (&self.marker, self.marker.len() as u32 * 2) + } +} + impl crate::CommandEncoder for super::CommandEncoder { unsafe fn begin_encoding(&mut self, label: crate::Label) -> Result<(), crate::DeviceError> { let list = match self.free_lists.pop() { @@ -398,9 +407,21 @@ impl crate::CommandEncoder for super::CommandEncoder { ) { } - unsafe fn insert_debug_marker(&mut self, label: &str) {} - unsafe fn begin_debug_marker(&mut self, group_label: &str) {} - unsafe fn end_debug_marker(&mut self) {} + unsafe fn insert_debug_marker(&mut self, label: &str) { + let (wide_label, size) = self.temp.prepare_marker(label); + self.list + .unwrap() + .SetMarker(0, wide_label.as_ptr() as *const _, size); + } + unsafe fn begin_debug_marker(&mut self, group_label: &str) { + let (wide_label, size) = self.temp.prepare_marker(group_label); + self.list + .unwrap() + .BeginEvent(0, wide_label.as_ptr() as *const _, size); + } + unsafe fn end_debug_marker(&mut self) { + self.list.unwrap().EndEvent() + } unsafe fn set_render_pipeline(&mut self, pipeline: &Resource) {} diff --git a/wgpu-hal/src/dx12/device.rs b/wgpu-hal/src/dx12/device.rs index 59e0322052..efcc088a13 100644 --- a/wgpu-hal/src/dx12/device.rs +++ b/wgpu-hal/src/dx12/device.rs @@ -1013,6 +1013,11 @@ impl crate::Device for super::Device { .into_device_result("Root signature creation")?; blob.destroy(); + if let Some(label) = desc.label { + let cwstr = conv::map_label(label); + raw.SetName(cwstr.as_ptr()); + } + Ok(super::PipelineLayout { raw, parameter_offsets, @@ -1079,6 +1084,11 @@ impl crate::Device for super::Device { .create_query_heap(heap_ty, desc.count, 0) .into_device_result("Query heap creation")?; + if let Some(label) = desc.label { + let cwstr = conv::map_label(label); + raw.SetName(cwstr.as_ptr()); + } + Ok(super::QuerySet { raw, raw_ty }) } unsafe fn destroy_query_set(&self, set: super::QuerySet) { diff --git a/wgpu-hal/src/dx12/mod.rs b/wgpu-hal/src/dx12/mod.rs index b8d320beea..244d070d5d 100644 --- a/wgpu-hal/src/dx12/mod.rs +++ b/wgpu-hal/src/dx12/mod.rs @@ -211,11 +211,13 @@ unsafe impl Sync for Queue {} #[derive(Default)] struct Temp { + marker: Vec, barriers: Vec, } impl Temp { fn clear(&mut self) { + self.marker.clear(); self.barriers.clear(); } }