Skip to content

Commit

Permalink
Serialize more preload dependencies and extra bulk data offset
Browse files Browse the repository at this point in the history
  • Loading branch information
Archengius committed Aug 3, 2023
1 parent 04c8b1a commit 6623813
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
31 changes: 26 additions & 5 deletions Private/CookedAssetWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -393,28 +393,28 @@ FSoftObjectPath FCookedAssetWriter::ResolvePackagePath( FPackageIndex PackageInd

void FExportPreloadDependencyList::AddDependency( uint32 CurrentCommand, FPackageIndex FromIndex, uint32 FromCommand )
{
if ( FromIndex != OwnerIndex )
if ( FromIndex != OwnerIndex && !FromIndex.IsNull() )
{
if ( CurrentCommand == FExportBundleEntry::ExportCommandType_Create )
{
if ( FromCommand == FExportBundleEntry::ExportCommandType_Create )
{
CreateBeforeCreateDependencies.Add( FromIndex );
CreateBeforeCreateDependencies.AddUnique( FromIndex );
}
else if ( FromCommand == FExportBundleEntry::ExportCommandType_Serialize )
{
SerializeBeforeCreateDependencies.Add( FromIndex );
SerializeBeforeCreateDependencies.AddUnique( FromIndex );
}
}
else if ( CurrentCommand == FExportBundleEntry::ExportCommandType_Serialize )
{
if ( FromCommand == FExportBundleEntry::ExportCommandType_Create )
{
CreateBeforeSerializeDependencies.Add( FromIndex );
CreateBeforeSerializeDependencies.AddUnique( FromIndex );
}
else if ( FromCommand == FExportBundleEntry::ExportCommandType_Serialize )
{
SerializeBeforeSerializeDependencies.Add( FromIndex );
SerializeBeforeSerializeDependencies.AddUnique( FromIndex );
}
}
}
Expand Down Expand Up @@ -483,6 +483,26 @@ void FCookedAssetWriter::BuildPreloadDependenciesFromArcs(FAssetSerializationCon
{
BuildPreloadDependenciesFromExportBundle( ExportBundleIndex, Context );
}

// Append additional dependencies from the exports
BuildPreloadDependenciesFromExports( Context );
}

void FCookedAssetWriter::BuildPreloadDependenciesFromExports(FAssetSerializationContext& Context)
{
for ( int32 ExportIndex = 0; ExportIndex < Context.ExportMap.Num(); ExportIndex++ )
{
const FObjectExport& Export = Context.ExportMap[ ExportIndex ];
FExportPreloadDependencyList& ExportDependencies = Context.PreloadDependencies[ ExportIndex ];

// SerializationBeforeCreateDependencies should be ClassIndex and TemplateIndex
ExportDependencies.AddDependency( FExportBundleEntry::ExportCommandType_Create, Export.ClassIndex, FExportBundleEntry::ExportCommandType_Serialize );
ExportDependencies.AddDependency( FExportBundleEntry::ExportCommandType_Create, Export.TemplateIndex, FExportBundleEntry::ExportCommandType_Serialize );

// CreateBeforeCreateDependencies should be OuterIndex and SuperIndex
ExportDependencies.AddDependency( FExportBundleEntry::ExportCommandType_Create, Export.OuterIndex, FExportBundleEntry::ExportCommandType_Create );
ExportDependencies.AddDependency( FExportBundleEntry::ExportCommandType_Create, Export.SuperIndex, FExportBundleEntry::ExportCommandType_Create );
}
}

void FCookedAssetWriter::ReorderPackageImports(const TArray<int32>& OriginalImportOrder, FAssetSerializationContext& Context)
Expand Down Expand Up @@ -857,6 +877,7 @@ void FCookedAssetWriter::WritePackageExports(FArchive& Ar, FAssetSerializationCo

Ar.Serialize( SerialData.GetData(), SerialData.Num() );
}
Context.Summary.BulkDataStartOffset = Ar.Tell();

// Exports end with the package file tag
uint32 FooterData = PACKAGE_FILE_TAG;
Expand Down
1 change: 1 addition & 0 deletions Private/CookedAssetWriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class ZENTOOLS_API FCookedAssetWriter
void ProcessPackageSummaryAndNamesAndExportsAndImports( FAssetSerializationContext& Context ) const;
static FExportBundleEntry BuildPreloadDependenciesFromExportBundle( int32 ExportBundleIndex, FAssetSerializationContext& Context );
static void BuildPreloadDependenciesFromArcs( FAssetSerializationContext& Context );
static void BuildPreloadDependenciesFromExports( FAssetSerializationContext& Context );
static void ReorderPackageImports( const TArray<int32>& OriginalImportOrder, FAssetSerializationContext& Context );

FPackageIndex CreateScriptObjectImport( const FPackageObjectIndex& PackageObjectIndex, FAssetSerializationContext& Context ) const;
Expand Down

0 comments on commit 6623813

Please sign in to comment.