From 6a0a4d6c9da31af61e7d8f446f17956466d3c3c3 Mon Sep 17 00:00:00 2001 From: Nikita Krupitskas Date: Sun, 14 Jun 2020 21:43:27 +0300 Subject: [PATCH] [rs] Add debug markers and debug markers example --- wgpu/examples/cube/main.rs | 3 +++ wgpu/src/backend/direct.rs | 20 ++++++++++++++++++++ wgpu/src/backend/web.rs | 13 +++++++++++++ wgpu/src/lib.rs | 18 ++++++++++++++++++ 4 files changed, 54 insertions(+) diff --git a/wgpu/examples/cube/main.rs b/wgpu/examples/cube/main.rs index aa7af10a53..31912d3df6 100644 --- a/wgpu/examples/cube/main.rs +++ b/wgpu/examples/cube/main.rs @@ -345,10 +345,13 @@ impl framework::Example for Example { }], depth_stencil_attachment: None, }); + rpass.push_debug_group("Prepare data for draw."); rpass.set_pipeline(&self.pipeline); rpass.set_bind_group(0, &self.bind_group, &[]); rpass.set_index_buffer(self.index_buf.slice(..)); rpass.set_vertex_buffer(0, self.vertex_buf.slice(..)); + rpass.pop_debug_group(); + rpass.insert_debug_marker("Draw!"); rpass.draw_indexed(0..self.index_count as u32, 0, 0..1); } diff --git a/wgpu/src/backend/direct.rs b/wgpu/src/backend/direct.rs index 35c3bc4d29..8bf236a284 100644 --- a/wgpu/src/backend/direct.rs +++ b/wgpu/src/backend/direct.rs @@ -169,6 +169,26 @@ mod pass_impl { unsafe { wgpu_render_pass_set_stencil_reference(self, reference) } } + fn insert_debug_marker(&mut self, label: &str) { + unsafe { + let label = std::ffi::CString::new(label).unwrap(); + wgpu_render_pass_insert_debug_marker(self, label.as_ptr().into(), 0); + } + } + + fn push_debug_group(&mut self, group_label: &str) { + unsafe { + let label = std::ffi::CString::new(group_label).unwrap(); + wgpu_render_pass_push_debug_group(self, label.as_ptr().into(), 0); + } + } + + fn pop_debug_group(&mut self) { + unsafe { + wgpu_render_pass_pop_debug_group(self); + } + } + fn execute_bundles<'a, I: Iterator>( &mut self, render_bundles: I, diff --git a/wgpu/src/backend/web.rs b/wgpu/src/backend/web.rs index 64a75c7215..3e7d5562d9 100644 --- a/wgpu/src/backend/web.rs +++ b/wgpu/src/backend/web.rs @@ -184,6 +184,19 @@ impl crate::RenderPassInner for RenderPass { fn set_stencil_reference(&mut self, reference: u32) { self.0.set_stencil_reference(reference); } + + fn insert_debug_marker(&mut self, label: &str) { + unimplemented!() + } + + fn push_debug_group(&mut self, group_label: &str) { + unimplemented!() + } + + fn pop_debug_group(&mut self) { + unimplemented!() + } + fn execute_bundles<'a, I: Iterator>(&mut self, render_bundles: I) { unimplemented!() } diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index f32f238ee0..47ee76bd7a 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -88,6 +88,9 @@ trait RenderPassInner: RenderInner { max_depth: f32, ); fn set_stencil_reference(&mut self, reference: u32); + fn insert_debug_marker(&mut self, label: &str); + fn push_debug_group(&mut self, group_label: &str); + fn pop_debug_group(&mut self); fn execute_bundles<'a, I: Iterator>( &mut self, render_bundles: I, @@ -1592,6 +1595,21 @@ impl<'a> RenderPass<'a> { RenderInner::draw(&mut self.id, vertices, instances) } + /// Inserts debug marker. + pub fn insert_debug_marker(&mut self, label: &str) { + self.id.insert_debug_marker(label); + } + + /// Start record commands and group it into debug marker group. + pub fn push_debug_group(&mut self, label: &str) { + self.id.push_debug_group(label); + } + + /// Stops command recording and creates debug group. + pub fn pop_debug_group(&mut self) { + self.id.pop_debug_group(); + } + /// Draws indexed primitives using the active index buffer and the active vertex buffers. /// /// The active index buffer can be set with [`RenderPass::set_index_buffer`], while the active