From c6000ea979a265013f5dfe3091b283bda0e1b8b7 Mon Sep 17 00:00:00 2001 From: mars Date: Sat, 23 Apr 2022 19:56:51 -0600 Subject: [PATCH] Record overlay phase --- src/lib.rs | 29 ++++++++++++++++++----------- src/phase.rs | 3 ++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 613d233..cf0aeac 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -230,19 +230,25 @@ impl Renderer { }); } - let opaque_cmds = Mutex::new(Vec::new()); - if let Some(opaque) = phase_passes.get_vec(&Phase::Opaque) { - opaque.par_iter().for_each(|pass_index| { - let phase_data = frame_data.make_phase_data(Phase::Opaque, &viewport); - let pass = &self.render_passes[*pass_index]; + let record_render = |phase| { + let cmds = Mutex::new(Vec::new()); + if let Some(passes) = phase_passes.get_vec(&phase) { + passes.par_iter().for_each(|pass_index| { + let phase_data = frame_data.make_phase_data(phase, &viewport); + let pass = &self.render_passes[*pass_index]; - if let Some(cmd) = pass.record_render(phase_data) { - opaque_cmds.lock().unwrap().push(cmd); - } - }) - } + if let Some(cmd) = pass.record_render(phase_data) { + cmds.lock().unwrap().push(cmd); + } + }) + } - let opaque_cmds = opaque_cmds.into_inner().unwrap(); + cmds.into_inner().unwrap() + }; + + // TODO: parallelize each phase's record_render + let opaque_cmds = record_render(Phase::Opaque); + let overlay_cmds = record_render(Phase::Overlay); { let mut rp = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { @@ -264,6 +270,7 @@ impl Renderer { }); rp.execute_bundles(opaque_cmds.iter()); + rp.execute_bundles(overlay_cmds.iter()); } self.queue.submit(std::iter::once(encoder.finish())); diff --git a/src/phase.rs b/src/phase.rs index a1d8ba8..5df8664 100644 --- a/src/phase.rs +++ b/src/phase.rs @@ -9,6 +9,7 @@ pub enum Phase { Depth, Opaque, Transparent, + Overlay, } impl Phase { @@ -16,7 +17,7 @@ impl Phase { use Phase::*; match self { Upload => PhaseKind::Command, - Depth | Opaque | Transparent => PhaseKind::Render, + Depth | Opaque | Transparent | Overlay => PhaseKind::Render, } } }