Changelog
All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[0.15.0-preview.5] - 2020-06-17
Changed
- Upgraded dependency com.unity.entities to 0.11.1-preview.4
- Upgraded dependency com.unity.jobs to 0.2.10-preview.12
- Upgraded dependency com.unity.collections to 0.9.0-preview.6
- Upgraded dependency com.unity.burst to 1.3.0
[0.15.0-preview.4] - 2020-06-10
Fixed
- Fix regression where post-processing would crash on
NodeDefinition
's who'sINodeData
,ISimulationPortDefinition
,IKernelData
,IKernelPortDefinition
, orIGraphKernel
were defined in an assembly other than theNodeDefinition
itself
[0.15.0-preview.3] - 2020-06-08
Added
- Improved topological recomputation costs when touching few out of many graph islands
Fixed
- Correcting release of DFG with the proper/expected set of dependencies: com.unity.entities to 0.11.0-preview.7 com.unity.jobs to 0.2.10-preview.11 com.unity.collections to 0.9.0-preview.5 com.unity.burst to 1.3.0-preview.12
[0.15.0-preview.2] - 2020-05-29
Fixed
- Introduced workaround for users facing issues due to nondeterministic order of ECS system creation; a
NodeSet
may be constructed with aComponentSystemBase
which has not yet been initialized via itsOnCreate
method, however,ComponentNode
creation andNodeSet.Update
should not be done before said system has been created.
[0.15.0-preview.1] - 2020-05-26
Added
DestroyContext
, see changedNodeDefinition.OnDestroy
- Note: Upgrade to Burst 1.3.0-preview.12 brings with it support for Debug.Log and use of generics within Bursted
IGraphKernel
implementations
Changed
- Non-disposed
NodeSet
s no longer try to clean up anything on garbage collections. - Forgetting to
Dispose
aNodeSet
is now only reported if "Leak Detection" is enabled. NodeSet.IsDisposed()
replaced byNodeSet.IsCreated
NodeTraits<>
,NodeTraitsBase
andNodeDefinition.BaseTraits
are now internal as they were nothing but user-required boilerplate in edge cases. They will now automatically be generated for you.NodeDefinition.OnDestroy(NodeHandle)
changed toNodeDefinition.OnDestroy(DestroyContext)
. The previous handle can be found atDestroyContext.Handle
- Upgraded dependency com.unity.entities to 0.11.0-preview.7
- Upgraded dependency com.unity.jobs to 0.2.10-preview.11
- Upgraded dependency com.unity.collections to 0.9.0-preview.5
- Upgraded dependency com.unity.burst to 1.3.0-preview.12
Fixed
- Unique PortID assignments are now done through ILPP instead of Reflection (resolves issue #414)
[0.14.0-preview.2] - 2020-05-04
Added
NodeSet.IsDisposed()
to query Dispose state
Changed
NodeSet(JobComponentSystem)
constructor changed toNodeSet(ComponentSystemBase)
making it compatible with all ECS system types:ComponentSystem
,JobComponentSystem
andSystemBase
.
Fixed
- Default constructed PortIDs are now invalid (issue #100)
[0.14.0-preview.1] - 2020-04-17
Added
- Sample Tour describing how to use feedback connections
Changed
- Upgraded dependency com.unity.entities to 0.9.1-preview.15
- Upgraded dependency com.unity.jobs to 0.2.8-preview.3
- Upgraded dependency com.unity.collections to 0.7.1-preview.3
- Upgraded dependency com.unity.burst to 1.3.0-preview.7
Deprecated
- INodeMemoryInputTag, NodeMemoryInput, NativeAllowReinterpretationAttribute and MemoryInputSystem are now obsolete. Use ComponentNodes instead.
Fixed
- Support for CoreCLR garbage collector
Internal
- Added initial base framework for code generation using ILPP
[0.13.0-preview.3] - 2020-03-27
Fixed
- Internal name change fix to support latest ProceduralGraph package
[0.13.0-preview.2] - 2020-03-23
Added
- PortDescription.InputPort.IsPortArray is now available
Fixed
- Possible crash when destroying a NodeSet containing ComponentNodes during ECS shutdown
[0.13.0-preview.1] - 2020-03-13
Added
- Scripting define DFG_PER_NODE_PROFILING: Enables profiler markers for individual kernel rendering invocations. This has a non-trivial performance penalty on the order of many milliseconds per 100k nodes, but, is more efficient than explicit profile markers in GraphKernel code. May also lead to more indeterministic runtime.
- Support for connecting one or many Message output ports to an otherwise unconnected Data input port of matching type (issue #13)
- Improved IDE debugger displays for NodeHandles (it is now possible to see node instance data and peers) in Simulation
- Support for allocating/resizing kernel buffer storage from simulation (resulting buffer only accessible in kernel). See SetKernelBufferSize() in Init/Update/MessageContext.
Changed
- Upgraded dependency com.unity.entities to 0.8.0-preview.8
- Upgraded dependency com.unity.jobs to 0.2.7-preview.11
- Upgraded dependency com.unity.collections to 0.7.0-preview.2
- Upgraded dependency com.unity.burst to 1.3.0-preview.6
Deprecated
- INodeMemoryInputTag, NodeMemoryInput, NativeAllowReinterpretationAttribute and MemoryInputSystem are now soft deprecated. Use ComponentNodes instead.
Fixed
- Multiple Data connections to the same Data input port will now throw an exception up-front when the connection is made rather than produce a deferred error during rendering (issue #134)
- Throw an exception if a message of a given type is sent to a MessageInput of incompatible type through the weak API (issue #116)
[0.12.0-preview.7] - 2020-02-18
Fixed
- Disabled warnings-as-errors locally in package. Soft-obsoletion of APIs in dependencies no longer causes compilation failures.
[0.12.0-preview.6] - 2020-01-30
Fixed
- Trying to use a NodeHandle in a NodeSet other than the one in which it was created is now detected and throws an exception.
- Performance regression where topology would be computed outside of Burst
[0.12.0-preview.5] - 2019-12-19
Added
- ComponentNode as an intrinsic node allowing reading & writing from ECS component data and buffers in the rendering graph. See documentation for an in depth description.
- Strong and weak versions of ComponentNode.Input/Output() for creating data ports and port IDs referring to ECS component types.
- NodeSet.CreateComponentNode(Entity) for creating ComponentNodes. They otherwise function as normal nodes.
- New constructor for NodeSet(JobComponentSystem) which ties together a NodeSet and a JobComponentSystem to allow creation of ComponentNodes (see above)
- JobHandle NodeSet.Update(JobHandle) to be called inside a JobComponentSystem for updating a NodeSet with simple input / output dependencies
Changed
- NodeSet.SetPortArraySize now takes an int size argument instead of ushort; maximum remains PortArray.MaxSize and will throw if exceeded.
Fixed
- Nested Buffer
definitions are now properly picked up
[0.12.0-preview.4] - 2019-11-22
Added
- Support for feedback connections which allow information to feed back to parent nodes without introducing cycles (see ConnectionType in Connect() APIs)
Changed
- virtual NodeDefinition.OnUpdate() now receives an UpdateContext argument (which is used to retrieve the node's handle).
- NodeDefinition.EmitMessage moved to MessageContext.EmitMessage/UpdateContext.EmitMessage.
- public APIs which took ushort port array indices now take an int port array index; maximum remains PortArray.MaxSize and will throw if exceeded.
Fixed
- Cycles are now detected in the rendering graph, and produce a deferred error message - as long as the graph contains a cycle, the rendergraph won't execute (#17)
- Proper handling of port forwarding to a node which is subsequently destroyed during Init()
- Fixed double fault when failing to instantiate node definitions inside NodeSet.Create
()
[0.12.0-preview.3] - 2019-11-15
Fixed
- Error when a buffer was resized on a node in the same Update() as it was destroyed.
- Silenced some compiler warnings
[0.12.0-preview.2] - 2019-11-11
Added
- NodeDefinition.HasStaticPortDescription.
- NodeDefinition.GetStaticPortDescription().
- More profiler markers with new style API, that can assist in performance measurements.
Changed
- Refactored internal topology tools, including generalizing data types.
- NodeDefinition.GetPortDescription() will throw if given a NodeHandle which does not match the NodeDefinition type.
- Reduced per kernel node allocations by 3x, and optimized memory layouts
Fixed
- Unity scene for Sample Tour section P_Usage_PortForwarding references the right script.
- Could not create multiple GraphValueResolvers in the same NodeSet.Update()
[0.12.0-preview.1] - 2019-09-30
Added
- Strong API support for mapping ECS dynamic buffers directly to data inputs of buffers. See MemoryInputSystem<Tag, Buffer>.
- Added a mass scaling tweening example of cube positions being animated in different directions.
Changed
- Moved enum Unity.DataFlowGraph.Usage to Unity.DataFlowGraph.PortDescription.Category
- NodeDefinition.GetPortDescription() is no longer virtual
- Renamed InputPort/OutputPort.PortUsage to Input/OutputPort.Category
- Moved enum Unity.DataFlowGraph.RenderExecutionModel to Unity.DataFlowGraph.NodeSet.RenderExecutionModel
- Added a generic parameter for NodeMemoryInput. It is now necessary to also specify the buffer type being moved (matches MemoryInputSystem<Tag, Buffer>).
- Renamed base class NodeFunctionality to NodeDefinition or SimulationNodeDefinition / KernelNodeDefinition / SimulationKernelNodeDefinition
- Removed INodeDefinition and INodeFunctionality, merged them into NodeDefinition
- NodeDefinition no longer publicly implements IDisposable
- Renamed NodeSet.GetFunctionality() -> NodeSet.GetDefinition()
- The following interface functions from INodeFunctionality have changed to be virtual protected members on NodeDefinition:
- public BaseTraits -> protected
- public Destroy -> protected
- public Init -> protected
- public OnUpdate -> protected
- public Set -> protected
- public Dispose -> protected
- The following interface functions/properties from INodeFunctionality/NodeDefinition are no longer accessible:
- OnMessage
- GeneratePortDescriptions
- AutoPorts
- OnMessage
[0.11.10] - 2019-11-25
Changed
- Upgraded dependency "com.unity.entities" to 0.3.0-preview.4
- Upgraded dependency "com.unity.jobs" to 0.2.1-preview.3
- Upgraded dependency "com.unity.collections" to 0.3.0-preview.0
- Upgraded dependency "com.unity.burst" to 1.2.0-preview.9
[0.11.9] - 2019-10-25
Added
- Added warning in package description emphasizing that this is work-in-progress and should not be used in production.
Fixed
- InitContext.ForwardOutput(MessageOutput
,...) no longer requires the destination node to implement IMsgHandler. - Fixed occasional native crash in Unity job scheduler, when used together with ECS (#329)
[0.11.8] - 2019-10-18
Fixed
- Internally updating graph inputs on topology changes now runs in parallel
[0.11.7] - 2019-10-08
Changed
- Removed Test classes from documentation
[0.11.6] - 2019-09-20
Added
- Added a documented walkthrough of API and concepts of DataFlowGraph in a segmented, guided tour in code. You can find it inside /Samples/, or install it through the package manager.
- Filled out most of the API documentation.
[0.11.5] - 2019-09-12
Changed
- Updated LICENSE.md file
[0.11.4] - 2019-09-09
Added
- Support for disabling Bursted Kernels in Editor via the Jobs->Burst->Enable menu toggle
Fixed
- Silenced log errors about Bursted Kernels falling back to Managed when in a non-Bursted Standalone build
[0.11.3] - 2019-09-08
Fixed
- Preliminary support for IL2CPP (only in Burst enabled builds and only if ALL Kernels are Burst compiled)
[0.11.2] - 2019-09-04
Fixed
- Non-generic graph kernels tagged [BurstCompile] will now be bursted in standalone mono builds
- Non-generic graph kernels tagged [BurstCompile] will now appear in the Burst Inspector
[0.11.1] - 2019-09-03
Fixed
- Moving internal container helpers to a more appropriate namespace.
[0.11.0] - 2019-08-30
Changed
- the package name is now com.unity.dataflowgraph
- the top level namespace is now Unity.DataFlowGraph
[0.10.0] - 2019-08-29
Added
- PortArray: Allows any NodeDefinition to include arrays of MessageInput or DataInput.
- PortDescription.InputPort.IsPortArray has beed added to allow identifying which ports are arrays vs normal
- NodeSet.SetPortArraySize() is used to set the size of the array for a given PortArray<>
- MessageContext (for IMsgHandler.HandleMessage) has property ArrayIndex for use when receiving messages on a PortArray<MessageInput<>>
- NodeSet.SendMessage now has a variant taking an array index to support PortArray<MessageInput<>>
- NodeSet.SetData now has a variant taking an array index to support PortArray<DataInput<>>
- NodeSet.Connect/Disconnect/DisconnectAndRetain now have variants taking an array index to support PortArray<>
- InitContext.ForwardInput now has a variant taking an array index to support PortArray<>
- RenderContext.Resolve has a variant which allows resolving PortArray
- NodeMemoryInput (for ECS Buffer transfers) now has a variant taking an array index to support PortArray<>
[0.9.4] - 2019-08-20
Added
- Support for mapping ECS dynamic buffers directly to data inputs of buffers. Use the newly provided MemoryInputSystem<Tag, Buffer> system together with some component datas to set up an automatic memory pipeline.
[0.9.3] - 2019-08-19
Fixed
- Relaxed type restrictions on KernelData + KernelPorts + GraphKernel + NodeData to be "unmanaged" instead of "blittable". This includes support for storing booleans
[0.9.2] - 2019-08-13
Fixed
- Fixed reuse of prior port-forwarding table when making connections in a node's Init()
[0.9.1] - 2019-08-11
Fixed
- Fixed resetting of port forwarding tables when node entries are re-used
- Fixed debug display of DataInput ports outisde of the RenderGraph
[0.9.0] - 2019-08-07
Added
- Added TimeExample sample to show a possible choice for how to implement time interfaces between nodes.
Changed
- IMsgHandler.HandleMessage now takes an "in MessageContext" instead of an NodeHandle/InputPortID pair. The pair is now available as properties Handle/Port from MessageContext.
- IMsgHandler.HandleMessage now takes an "in TMsg msg" instead of a "ref TMsg msg"
- NodeSet.SendMessage now takes an "in TMsg msg" instead of a "ref TMsg msg" or simple "TMsg msg"
- NodeSet.EmitMessage now takes an "in TMsg msg" instead of a "ref TMsg msg"
[0.8.1] - 2019-08-06
Added
- Added debugging displays of common objects in the DataFlowGraph framework (handles, data I/O, buffers)
- Added weakly-typed overload of creating graph values: GraphValue
CreateGraphValue (NodeHandle handle, OutputPortID port);
[0.8.0] - 2019-07-10
Added
- GraphValueResolver: A concurrent container able to resolve read only memory of any output port a GraphValue points to, including aggregates and buffers. Please see API documentation.
- NodeSet.GetGraphValueResolver() and NodeSet.InjectDependencyFromConsumer(): API for interacting with GraphValueResolvers
Changed
- NodeHandle.Null is now deprecated, use NodeSet.Exists instead for proper invalidation checks, or, default value if appropriate
- NodeSet.ValueExists
(GraphValue ) will no longer throw an exception if it is orphaned (target node destroyed), as the value still needs to be cleaned up separately.
Removed
- Removed NodeSet.GetLastValue
(GraphValue ). It's not performant by default and is easy to implement otherwise jobified or not with new features.
Fixed
- Orphaned graph values no longer results in errors inside the render graph
[0.7.2] - 2019-06-21
Changed
- Bumped com.unity.burst dependency to 1.1.0-preview.2 for compatibility with Unity's latest trunk
[0.7.0] - 2019-05-24
Added
- A system for port forwarding, an entire graph can now act as a single node in the graph.
- Initialization contexts for configuring node instances on creation
Changed
- INodeFunctionality.Init(NodeHandle handle) => INodeFunctionality.Init(InitContext ctx). The handle previously given direct can now be obtained through InitContext.Handle.
Removed
- Removed NodeSet.DisconnectAll(NodeHandle handle). It was never intended to be public, and breaks composability (you can break someone else's connection without knowing them or them being aware of it)
[0.6.1] - 2019-05-23
Added
- Support for DataInput/Output ports of a struct type which includes multiple Buffer
instances
Changed
- PortDescription.Input/OutputPort.IsBuffer replaced with .HasBuffers
Fixed
- Buffer
.SizeRequest(int) refuses negative size arguments
[0.6.0] - 2019-05-22
Changed
- Bumping Burst dependency to 1.0.4
- Fixed package to conform to validation rules
- Standardizing Data port Buffer types to match other Data port types (eg. DataInput/OutputBuffer
becomes DataInput/Output<Buffer >) - Data port Buffer types are now resolved as NativeArrays when used in Kernels
- Data Ports can no longer be resolved outside of a Kernel (now requires use of new RenderContext only available in Kernel execution)
- Burst compilation failures for Kernels now result in an console Error message (instead of Warning) in Editor
Fixed
- can no longer specifcy negative sizes for Data port Buffers.
[0.5.4] - 2019-04-26
Added
- Runtime detection of incorrectly defined ports where the given node definition class does not correspond to the enclosing class.
- Missing weak API port conversions (eg. you can now explicit cast a MessageOutput<...> to OutputPortID)
Fixed
- Silenced all compiler warnings for Runtime and Tests
[0.5.3] - 2019-04-11
Added
- NodeSet.SetData() which allows setting data directly from the simulation side (eg. from a node's HandleMessage or OnUpdate) on a node's DataInput ports (if and only if it is disconnected; the only case that makes sense)
- NodeSet.DisconnectAndRetainValue() for Data connections; once disconnected, said input will continue to hold the last value it had at the moment the disconnection occurred.
Fixed
- Fixed bug in NodeSet.Connect() so we now disallow connecting a DataOutput to a DataInputBuffer (was not detected as long as the type matched). Same thing for DataOutputBuffer
to DataInput . - Detection of negative indices used to dereference DataOutputBuffers (throws IndexOutOfRangeException)
- Fixed unstable playmode test RuntimeTests.NodeDefinition_DeclaredManaged_CanRetainAndRelease_ManagedObjects