forked from alelievr/NodeGraphProcessor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJobGraphProcessor.cs
More file actions
70 lines (59 loc) · 1.7 KB
/
Copy pathJobGraphProcessor.cs
File metadata and controls
70 lines (59 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using Unity.Jobs;
using Unity.Collections;
// using Unity.Entities;
namespace GraphProcessor
{
/// <summary>
/// Graph processor
/// </summary>
public class JobGraphProcessor : BaseGraphProcessor
{
GraphScheduleList[] scheduleList;
internal class GraphScheduleList
{
public BaseNode node;
public BaseNode[] dependencies;
public GraphScheduleList(BaseNode node)
{
this.node = node;
}
}
/// <summary>
/// Manage graph scheduling and processing
/// </summary>
/// <param name="graph">Graph to be processed</param>
public JobGraphProcessor(BaseGraph graph) : base(graph) {}
public override void UpdateComputeOrder()
{
scheduleList = graph.nodes.OrderBy(n => n.computeOrder).Select(n => {
GraphScheduleList gsl = new GraphScheduleList(n);
gsl.dependencies = n.GetInputNodes().ToArray();
return gsl;
}).ToArray();
}
/// <summary>
/// Schedule the graph into the job system
/// </summary>
public override void Run()
{
int count = scheduleList.Length;
var scheduledHandles = new Dictionary< BaseNode, JobHandle >();
for (int i = 0; i < count; i++)
{
JobHandle dep = default(JobHandle);
var schedule = scheduleList[i];
int dependenciesCount = schedule.dependencies.Length;
for (int j = 0; j < dependenciesCount; j++)
dep = JobHandle.CombineDependencies(dep, scheduledHandles[schedule.dependencies[j]]);
// TODO: call the onSchedule on the current node
// JobHandle currentJob = schedule.node.OnSchedule(dep);
// scheduledHandles[schedule.node] = currentJob;
}
JobHandle.ScheduleBatchedJobs();
}
}
}