* Added support for deserializing BgObject types directly into native classes.
* Removed opcodes for creating graph structures. These are now created in user code from BgObject types.
* Removed BgNodeSpecBuilder. BgNode objects can now be modified directly (returning a modified copy).
* Added concrete types for option parameters. The VM now keeps track of any parameters for evaluated options, allowing them to be added into the graph definition.
* Order dependencies now take nodes rather than outputs.
* Added explicit support for native thunks, whose bindings are saved to a sideband channel during compilation and referenced in bytecode as an index. This generalizes code that was previously specific to node definitions.
* Added a name table to bytecode, to optimize situations where we reference the same string mulitple times.
#preflight 62bf3c583f0d6beee2e8f4a6
[CL 20918762 by Ben Marsh in ue5-main branch]
Ugs - Updated ugs to read the configuration via the shared library, thus removing the support to read it from UnrealGameSync.ini. Added a ini setting to allow which providers to use though, so that we can have more providers listed in the configuration then UGS will want to care about but also to allow us to control opt in of this feature per project.
#preflight none
[CL 20911818 by Joakim Lindqvist in ue5-main branch]
* ITreeStore defines an API for reading/writing named tree structures.
* ITreeStore<T> allows reading/writing trees of nodes derived from the TreeNode base class, which can be specialized by clients. TreeNode tracks whether the node has been mutated, and allows recursing through the tree with strongly typed objects. Weak references are kept to deserialized TreeNode objects to ensure synchronization with the serialized tree objects.
* Default (and only current) implementation of ITreeStore is BundleStore, which packs nodes together in an efficient binary format and supports incrementally updating bundles. Nodes are hashed and deduplicated within bundles (and the known working set of the BundleStore instance), but packed Bundles are stored using a unique id returned by IBlobStore.
* DirectoryNode and FileNode nodes allow storing file trees in bundles, and implement content-aware chunking of binary data using a rolling BuzHash over an input stream.
#fyi Joakim.Lindqvist
#preflight 62acb0a5b47403e5aef09f74
[CL 20887473 by Ben Marsh in ue5-main branch]
* Blobs are not explicitly content addressed, but each uploaded blob is given an implementation-defined BlobId for retrieval later. An implementation MAY return a hash value for a BlobId if desired.
* BlobIds are utf8 strings, with a format that is implementation defined. They may be hashes, guids, objectids, or locators within some storage hierarchy. Consumers MAY NOT assume any particular format of a BlobId.
* Blobs may reference other blobs via a table of references stored alongside (or within) it. A caller SHOULD enforce referential integrity. An implementation MAY verify and enforce it.
* Mapping from a known key to a particular blob is done via refs, using a similar interface to the existing storage interface.
* Blobs are expected to be small enough to fit into memory. Larger blobs should be split up. Max size is TBD; probably of the order of 1-10mb.
Abstracting blob storage at this level allows for simpler implementations where use cases allow it, such as writing directly to S3 or a filer, and allows for changes in the way we address blobs to allow them to be retrieved from locations encoded in the BlobId without having to ensure global replication.
#preflight 62bced9e3f0d6beee24f2d6b
[CL 20887285 by Ben Marsh in ue5-main branch]