optional pass record function for pure layout/transition passes

This commit is contained in:
Janis 2025-01-09 20:48:33 +01:00
parent 6274b6e5a8
commit 2cad8adb55
2 changed files with 10 additions and 15 deletions

View file

@ -380,7 +380,7 @@ pub fn egui_pre_pass(
) )
}) })
.collect(), .collect(),
record, record: Some(record),
}); });
Ok(()) Ok(())
} }
@ -730,7 +730,7 @@ pub fn egui_pass(
rg.add_pass(PassDesc { rg.add_pass(PassDesc {
reads, reads,
writes, writes,
record, record: Some(record),
}); });
Ok(to_remove_tex_ids) Ok(to_remove_tex_ids)

View file

@ -313,7 +313,7 @@ pub struct PassDesc {
// this pass performs `Access` write on `GraphResourceId`. // this pass performs `Access` write on `GraphResourceId`.
// some `GraphResourceId` may occur multiple times. // some `GraphResourceId` may occur multiple times.
pub writes: Vec<(GraphResourceId, Access)>, pub writes: Vec<(GraphResourceId, Access)>,
pub record: Box<RecordFn>, pub record: Option<Box<RecordFn>>,
} }
impl Default for PassDesc { impl Default for PassDesc {
@ -321,7 +321,7 @@ impl Default for PassDesc {
Self { Self {
reads: Default::default(), reads: Default::default(),
writes: Default::default(), writes: Default::default(),
record: Box::new(|_| Ok(())), record: None,
} }
} }
} }
@ -461,13 +461,12 @@ impl RenderGraph {
} }
} }
let now = std::time::Instant::now();
let pool = let pool =
commands::SingleUseCommandPool::new(device.clone(), device.graphics_queue().clone())?; commands::SingleUseCommandPool::new(device.clone(), device.graphics_queue().clone())?;
let resources = &self.resources; let resources = &self.resources;
let cmds = topo let cmds = topo
.into_iter() .iter()
.rev() .rev()
.map(|(passes, accesses)| { .map(|(passes, accesses)| {
let passes = passes let passes = passes
@ -497,7 +496,9 @@ impl RenderGraph {
}; };
for pass in passes { for pass in passes {
(pass.record)(&ctx)?; if let Some(record) = pass.record {
(record)(&ctx)?;
}
} }
ctx.cmd.end()?; ctx.cmd.end()?;
@ -508,11 +509,6 @@ impl RenderGraph {
let cmd_list = commands::CommandList(cmds); let cmd_list = commands::CommandList(cmds);
tracing::debug!(
"recording render graph: {}ms",
now.elapsed().as_micros() as f32 / 1e3
);
Ok(WithLifetime::new(cmd_list)) Ok(WithLifetime::new(cmd_list))
} }
@ -1306,17 +1302,16 @@ pub fn clear_pass(rg: &mut RenderGraph, color: Rgba, target: GraphResourceId) {
rg.add_pass(PassDesc { rg.add_pass(PassDesc {
reads, reads,
writes, writes,
record, record: Some(record),
}); });
} }
pub fn present_pass(rg: &mut RenderGraph, target: GraphResourceId) { pub fn present_pass(rg: &mut RenderGraph, target: GraphResourceId) {
let record: Box<RecordFn> = Box::new(|_| Ok(()));
let reads = vec![(target, Access::present())]; let reads = vec![(target, Access::present())];
let writes = vec![(target, Access::present())]; let writes = vec![(target, Access::present())];
rg.add_pass(PassDesc { rg.add_pass(PassDesc {
reads, reads,
writes, writes,
record, record: None,
}); });
} }