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.
|
// 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();
|
||||||
|
|
Loading…
Reference in a new issue