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(),
record,
record: Some(record),
});
Ok(())
}
@ -730,7 +730,7 @@ pub fn egui_pass(
rg.add_pass(PassDesc {
reads,
writes,
record,
record: Some(record),
});
Ok(to_remove_tex_ids)

View file

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