Record overlay phase

This commit is contained in:
mars 2022-04-23 19:56:51 -06:00
parent cf4ff0e80e
commit c6000ea979
2 changed files with 20 additions and 12 deletions

View File

@ -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()));

View File

@ -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,
}
}
}