Fix the underlying problem for the workaround in 19840451.
#jira FORT-456060
#rb carlmagnus.nordin
#robomerge EngineMerge
#rnx
#preflight 62a983aa3774a57fdc4f07f5
[CL 20666261 by PJ Kack in ue5-main branch]
Merge loaded package store with global import store
Use global import store to keep track of pinned exports instead of relying on FindObjectWithOuter
#preflight 62a876325d0f5c5aab6d380c
#rb pj.kack
[CL 20645631 by CarlMagnus Nordin in ue5-main branch]
NotifyRegistrationEvent:
Remove all NRP_Started events since they add no value.
Move the NRP_Finished event for type NRT_Class from InitializePrivateStaticClass (Class.cpp) to UObjectLoadAllCompiledInDefaultProperties (UObjectBase.cpp) since this is where the outer registration function for the class is actually executed.
Add a new NRT_NoExportObject event in ConstructUPackage for top level noexport objects like UScriptStruct, UDelegateFunction and USparseDelegateFunction that are just part of the package and has no registration info.
AsyncLoader:
Move EDLBootNotificationManager from AsyncPackageLoader to AsyncLoading.
Add FEarlyRegistrationEventsRecorder to replay early events that occur before the loader is created.
AsyncLoading:
Ignore the new NRT_NoExportObject event.
Allow for objects to skip the NRP_Added and NRP_Started phases.
AsyncLoading2:
Remove LazyInitializeFromLoadPackage and the reading and parsing of the ScriptObjects binary blob.
Remove FindScriptImportObjectFromIndex/GFindExistingScriptImport that was dependent on the ScriptObject blob, instead all script objects are added to the global import store directly from the notification system callbacks.
Change GetUnresolvedCDOs logic to check for imported classes with missing or not-yet-initialized CDOs.
Add FAsyncPackageDesc2::ReferencerRequestId to let each package track its most recent load package request referencer.
Change ProcessPendingCDOs logic to avoid recursive reentrancy and to process the most relevant CDOs first, based on the new ReferencerRequestId.
Tests:
Lyra: Editor, Runtime EDL and Zen loader on Win64 and Console
ShooterGame: Editor, Runtime EDL and Zen loader on Win64 and Console
AncientGame: Editor, Runtime EDL and Zen loader on Win64
Other: Editor, CookedEditor, Runtime EDL and Zen loader on Win64 (client and server)
#jira none
#rb carlmagnus.nordin
#robomerge EngineMerge
#rnx
#preflight 62a84ba7cf54a658eeffc200
[CL 20643384 by PJ Kack in ue5-main branch]
Update DiffAssetRegistriesCommandlet to including searching for files specified by full path on any project.
#rnx
#rb Marcus.Wassmer
[REVIEW] Robert.Manuszewski
#preflight 62a79e0ef017fed6d24e607d
#ROBOMERGE-AUTHOR: matt.peters
#ROBOMERGE-SOURCE: CL 20635399 via CL 20635481 via CL 20635515
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v955-20579017)
[CL 20639081 by matt peters in ue5-main branch]
Change summary:
- Modified UObject::PostLoadSubobjects() to allow subobject instancing on targets that do not require cooked data (i.e. targets that include editor-only data).
- Reverted 20563066 (temp fix that also needed to be backed out in order for editor-only subobject instancing paths to function properly).
#rb Dave.Belanger
[FYI] CarlMagnus.Nordin
#preflight 62a3a9fea76bc5b5cacf4a54
#ROBOMERGE-OWNER: phillip.kavan
#ROBOMERGE-AUTHOR: phillip.kavan
#ROBOMERGE-SOURCE: CL 20603539 via CL 20605001 via CL 20606273 via CL 20606326
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v955-20579017)
[CL 20606704 by phillip kavan in ue5-main branch]
CLASS_Intrinsic is apparently set on all C++ classes, even those parsed by UHT, despite what its comment suggests...
#preflight 62a0d126e07732d52dda2b26
#rb Francis.Hurteau
#ROBOMERGE-AUTHOR: jamie.dale
#ROBOMERGE-SOURCE: CL 20561371 via CL 20561394 via CL 20561435 via CL 20563305 via CL 20563476
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v954-20466795)
[CL 20567251 by jamie dale in ue5-main branch]
Removed container and struct conversions from the script VM. This introduced complexity that the VM doesn't need, nor did it scale for the various struct types that we want to implicitly convert in Blueprints. Instead, the script VM is *only* aware of float<->double conversion. Container and struct conversions have now been moved to BlueprintTypeConversions. Currently, only the existing FVector3f<->FVector3d conversion has been added, but the remaining LWC types will be added in a subsequent change.
During Blueprint compilation of container and struct conversions, we now inject a function call into the bytecode that performs the conversion, which is better suited to the task instead of burdening the VM with the work. One drawback to this technique is that containers are slightly more inefficient when it comes to conversions. They won't know their type(s) ahead of time, which requires dynamically looking up a conversion function at runtime. We can possibly optimize this further, but the generaly recommendation is to avoid implicit conversions of container types when possible.
Additionally, a couple of convenience functions were added to the KismetCastingUtils to help remove a fair amount of boilerplate code that was used for implicit casting in various node types. ScriptCastingUtils.h was also removed since the VM no longer needs to concern itself with complex conversions.
#jira UE-151338
#preflight 629a507fb42820769428c133
#rb phillip.kavan
[CL 20560449 by dave jones2 in ue5-main branch]
#rb Per.Larsson
#rnx
#preflight 629f530958032863438a0b30
- Storing the segment type as a member made the code would imply to the reader that it could be changed, even though in all paths it was being set to EPackageSegment::Header. Removing the member and just hard coding the segment use should make the code easier to follow.
- Editor bulkdata always stores it's payload in the package trailer, which for now counts as the package header.
- The only deviation for this is the experimental feature that allows us to store the payloads in a sidecar file. This code path is not currently supported, but has been updated to use hardcoded EPackageSegment::PayloadSidecar.
- Given that PackageSegment was always set to EPackageSegment::Header we can easily remove any assert of if statement checking for that.
[CL 20553326 by paul chipchase in ue5-main branch]
#preflight none
#rb trivial
#ROBOMERGE-AUTHOR: robert.manuszewski
#ROBOMERGE-SOURCE: CL 20540036 via CL 20540065 via CL 20540104 via CL 20540150 via CL 20540194
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v954-20466795)
[CL 20542579 by robert manuszewski in ue5-main branch]