waiting.....

This commit is contained in:
Janis 2025-01-06 04:09:51 +01:00
parent 131887b633
commit efd73fce43

View file

@ -584,8 +584,10 @@ impl RenderGraph {
} }
} }
let pass_count = self.pass_descs.len() as u32;
// build graph from references. // build graph from references.
{ let mut dag = {
let mut edges = Vec::new(); let mut edges = Vec::new();
intervals.iter().for_each(|(&rid, &(from, to))| { intervals.iter().for_each(|(&rid, &(from, to))| {
@ -618,12 +620,9 @@ impl RenderGraph {
// pass, read, write // pass, read, write
let mut current_pass = (from, Access::empty(), Access::empty()); let mut current_pass = (from, Access::empty(), Access::empty());
let max_i = self.pass_descs.len() as u32; for pass in PassNode::range_full(from, to, pass_count)
eprintln!("{rid:?}:"); .map(|i| PassNode::from_u32(i, pass_count))
for pass in
PassNode::range_full(from, to, max_i).map(|i| PassNode::from_u32(i, max_i))
{ {
eprintln!("{pass:?}:");
let mut range = references.range( let mut range = references.range(
GraphRef { GraphRef {
pass, pass,
@ -637,9 +636,6 @@ impl RenderGraph {
); );
while let Some(a) = range.next() { while let Some(a) = range.next() {
eprintln!("{a:?}");
eprintln!("made_visible: {made_visible:?}");
eprintln!("to_make_available: {to_make_available:?}");
if a.pass != current_pass.0 { if a.pass != current_pass.0 {
if current_pass.1 != Access::empty() { if current_pass.1 != Access::empty() {
last_read = Some(PreviousRef::Read(current_pass.0, current_pass.1)); last_read = Some(PreviousRef::Read(current_pass.0, current_pass.1));
@ -841,11 +837,11 @@ impl RenderGraph {
}); });
let mut dag = petgraph::graph::DiGraph::new(); let mut dag = petgraph::graph::DiGraph::new();
dag.add_node(PassNode::First); let root = dag.add_node(PassNode::First);
let output = dag.add_node(PassNode::Last);
for i in 0..self.pass_descs.len() { for i in 0..self.pass_descs.len() {
dag.add_node(PassNode::Pass(i)); dag.add_node(PassNode::Pass(i));
} }
dag.add_node(PassNode::Last);
for ((from, to), weight) in edges { for ((from, to), weight) in edges {
dag.add_edge( dag.add_edge(
@ -855,6 +851,19 @@ impl RenderGraph {
); );
} }
loop {
let sinks = dag
.externals(petgraph::Direction::Outgoing)
.filter(|idx| dag.node_weight(*idx) != Some(&PassNode::Last))
.collect::<Vec<_>>();
if sinks.is_empty() {
break;
}
for sink in sinks {
dag.remove_node(sink);
}
}
#[cfg(any(debug_assertions, test))] #[cfg(any(debug_assertions, test))]
std::fs::write( std::fs::write(
"render_graph2.dot", "render_graph2.dot",
@ -875,7 +884,9 @@ impl RenderGraph {
), ),
) )
.expect("writing render_graph repr"); .expect("writing render_graph repr");
}
dag
};
let now = std::time::Instant::now(); let now = std::time::Instant::now();
let mut dag = petgraph::stable_graph::StableDiGraph::new(); let mut dag = petgraph::stable_graph::StableDiGraph::new();