waiting.....
This commit is contained in:
parent
131887b633
commit
efd73fce43
|
@ -584,8 +584,10 @@ impl RenderGraph {
|
|||
}
|
||||
}
|
||||
|
||||
let pass_count = self.pass_descs.len() as u32;
|
||||
|
||||
// build graph from references.
|
||||
{
|
||||
let mut dag = {
|
||||
let mut edges = Vec::new();
|
||||
|
||||
intervals.iter().for_each(|(&rid, &(from, to))| {
|
||||
|
@ -618,12 +620,9 @@ impl RenderGraph {
|
|||
|
||||
// pass, read, write
|
||||
let mut current_pass = (from, Access::empty(), Access::empty());
|
||||
let max_i = self.pass_descs.len() as u32;
|
||||
eprintln!("{rid:?}:");
|
||||
for pass in
|
||||
PassNode::range_full(from, to, max_i).map(|i| PassNode::from_u32(i, max_i))
|
||||
for pass in PassNode::range_full(from, to, pass_count)
|
||||
.map(|i| PassNode::from_u32(i, pass_count))
|
||||
{
|
||||
eprintln!("{pass:?}:");
|
||||
let mut range = references.range(
|
||||
GraphRef {
|
||||
pass,
|
||||
|
@ -637,9 +636,6 @@ impl RenderGraph {
|
|||
);
|
||||
|
||||
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 current_pass.1 != Access::empty() {
|
||||
last_read = Some(PreviousRef::Read(current_pass.0, current_pass.1));
|
||||
|
@ -841,11 +837,11 @@ impl RenderGraph {
|
|||
});
|
||||
|
||||
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() {
|
||||
dag.add_node(PassNode::Pass(i));
|
||||
}
|
||||
dag.add_node(PassNode::Last);
|
||||
|
||||
for ((from, to), weight) in edges {
|
||||
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))]
|
||||
std::fs::write(
|
||||
"render_graph2.dot",
|
||||
|
@ -875,7 +884,9 @@ impl RenderGraph {
|
|||
),
|
||||
)
|
||||
.expect("writing render_graph repr");
|
||||
}
|
||||
|
||||
dag
|
||||
};
|
||||
|
||||
let now = std::time::Instant::now();
|
||||
let mut dag = petgraph::stable_graph::StableDiGraph::new();
|
||||
|
|
Loading…
Reference in a new issue