7#include "Containers/Array.h"
9#include "Containers/Map.h"
50#if WITH_EDITOR == 0 && WITH_EDITORONLY_DATA == 0
51 #define USE_RUNTIME_BULKDATA 1
53 #define USE_RUNTIME_BULKDATA 0
58#define UE_KEEP_INLINE_RELOADING_CONSISTENT 0
219 , MappedHandle(nullptr)
220 , MappedRegion(nullptr)
226 : AllocatedData(nullptr)
228 , MappedRegion(Region)
246 return MappedHandle !=
nullptr;
251 AllocatedData =
nullptr;
252 MappedHandle =
nullptr;
253 MappedRegion =
nullptr;
275struct FBulkMetaResource
281 int64 ElementCount = -1;
284 int64 SizeOnDisk = -1;
293 int64 DuplicateSizeOnDisk = -1;
296 int64 DuplicateOffset = -1;
314 static constexpr int64 MaxOffset = 0xFFffFFffFE;
319#if !USE_RUNTIME_BULKDATA
330 inline int64 GetSize()
const
332 return static_cast<int64>(ReadUInt40(Data));
341 int64 GetSizeOnDisk()
const
343#if USE_RUNTIME_BULKDATA
346 return static_cast<int64>(*
reinterpret_cast<const int64*
>(&
Data[16]));
350 void SetSizeOnDisk(
int64 SizeOnDisk)
352#if !USE_RUNTIME_BULKDATA
353 *
reinterpret_cast<int64*
>(&
Data[16]) = SizeOnDisk;
357 inline int64 GetOffset()
const
429 return FromSerialized(Ar, ElementSize,
OutMetaData, DuplicateOffset);
442#if USE_RUNTIME_BULKDATA
474 FAllocatedPtr() =
default;
475 ~FAllocatedPtr() =
default;
477 inline bool IsLoaded()
const
479 return Allocation.RawData !=
nullptr;
505 FAllocation Allocation{
nullptr };
617 UE_DEPRECATED(5.5,
"No longer provides any functionality (assume that this will always return true")
728 COREUOBJECT_API uint32 GetBulkDataAlignment() const;
806#if !USE_RUNTIME_BULKDATA
876 return DataAllocation.StealFileMapping(
this);
994 inline void* ReallocateData(
int64 SizeInBytes) {
return DataAllocation.ReallocateData(
this, SizeInBytes); }
997 inline void FreeData() { DataAllocation.Free(
this); }
1000 inline void* GetDataBufferForWrite()
const {
return DataAllocation.GetAllocationForWrite(
this); }
1003 inline const void* GetDataBufferReadOnly()
const {
return DataAllocation.GetAllocationReadOnly(
this); }
1009 FAllocatedPtr DataAllocation;
1010 UE::BulkData::Private::FBulkMetaData BulkMeta;
1023#if !USE_RUNTIME_BULKDATA
1034template<
typename ElementType>
1048 return sizeof(ElementType);
1086 ElementType* Ptr =
nullptr;
1304 FBuilder(
const FBuilder&) =
delete;
1305 FBuilder& operator=(
const FBuilder&) =
delete;
1312 int32 BatchCount = 0;
1313 int32 NumLoaded = 0;
1316 int32 BatchMax = -1;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
void FlushAsyncLoading(int32 RequestId)
Definition AsyncPackageLoader.cpp:313
TFunction< void(bool bWasCancelled, IBulkDataIORequest *)> FBulkDataIORequestCallBack
Definition BulkData.h:210
EBulkDataFlags
Definition BulkData.h:101
@ BULKDATA_DuplicateNonOptionalPayload
Definition BulkData.h:144
@ BULKDATA_None
Definition BulkData.h:103
@ BULKDATA_Size64Bit
Definition BulkData.h:139
@ BULKDATA_Force_NOT_InlinePayload
Definition BulkData.h:126
@ BULKDATA_LazyLoadable
Definition BulkData.h:158
@ BULKDATA_OptionalPayload
Definition BulkData.h:131
@ UE_DEPRECATED
Definition BulkData.h:113
@ BULKDATA_UsesIoDispatcher
Definition BulkData.h:163
@ BULKDATA_PayloadInSeparateFile
Definition BulkData.h:121
@ BULKDATA_ForceInlinePayload
Definition BulkData.h:115
@ BULKDATA_ForceSingleElementSerialization
Definition BulkData.h:109
@ BULKDATA_MemoryMappedPayload
Definition BulkData.h:137
@ BULKDATA_NoOffsetFixUp
Definition BulkData.h:148
@ BULKDATA_SingleUse
Definition BulkData.h:111
@ BULKDATA_PayloadAtEndOfFile
Definition BulkData.h:105
@ BULKDATA_AlwaysAllowDiscard
Definition BulkData.h:169
@ BULKDATA_DataIsMemoryMapped
Definition BulkData.h:165
@ BULKDATA_SerializeCompressedZLIB
Definition BulkData.h:107
@ BULKDATA_SerializeCompressed
Definition BulkData.h:117
@ BULKDATA_WorkspaceDomainPayload
Definition BulkData.h:153
TBulkData< uint8 > FByteBulkData
Definition BulkData.h:1133
COREUOBJECT_API FStringBuilderBase & LexToString(EBulkDataFlags Flags, FStringBuilderBase &Sb)
Definition BulkData.cpp:37
FArchive & operator<<(FArchive &Ar, EBulkDataFlags &Flags)
Definition BulkData.h:179
const FIoFilenameHash INVALID_IO_FILENAME_HASH
Definition BulkData.h:69
EBulkDataLockFlags
Definition BulkData.h:202
@ LOCK_READ_ONLY
Definition BulkData.h:203
@ LOCK_READ_WRITE
Definition BulkData.h:204
uint32 FIoFilenameHash
Definition BulkData.h:68
COREUOBJECT_API FIoFilenameHash MakeIoFilenameHash(const FString &Filename)
Definition BulkData.cpp:110
EBulkDataLockStatus
Definition BulkData.h:189
@ LOCKSTATUS_ReadOnlyLock
Definition BulkData.h:193
@ LOCKSTATUS_ReadWriteLock
Definition BulkData.h:195
@ LOCKSTATUS_Unlocked
Definition BulkData.h:191
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
EFileRegionType
Definition FileRegions.h:15
@ DEFAULT_ALIGNMENT
Definition MemoryBase.h:24
#define MAX_int64
Definition NumericLimits.h:26
#define MAX_uint64
Definition NumericLimits.h:22
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsSaving() const
Definition Archive.h:248
Definition BulkData.h:1346
COREUOBJECT_API bool IsEmpty() const
Definition BulkDataStreaming.cpp:813
FBatchBuilder & Read(const FBulkData &BulkData, uint64 Offset, uint64 Size, EAsyncIOPriorityAndFlags Priority, FIoBuffer &Dst, FBulkDataBatchReadRequest &OutRequest)
Definition BulkData.h:1374
COREUOBJECT_API void Issue()
Definition BulkDataStreaming.cpp:901
FBatchBuilder & Read(const FBulkData &BulkData, uint64 Offset, uint64 Size, EAsyncIOPriorityAndFlags Priority, FIoBuffer &Dst)
Definition BulkData.h:1361
Definition BulkDataStreaming.cpp:614
Definition BulkData.h:1403
COREUOBJECT_API void Issue(FIoBuffer &Dst, EAsyncIOPriorityAndFlags Priority, FCompletionCallback &&Callback, FBulkDataBatchRequest &OutRequest)
Definition BulkDataStreaming.cpp:950
Definition BulkData.h:1295
static FScatterGatherBuilder ScatterGather(int32 MaxCount=-1)
Definition BulkData.h:1434
static FBatchBuilder NewBatch(int32 MaxCount=-1)
Definition BulkData.h:1431
COREUOBJECT_API bool WaitFor(uint32 Milliseconds)
Definition BulkDataStreaming.cpp:750
COREUOBJECT_API void Wait()
Definition BulkDataStreaming.cpp:742
COREUOBJECT_API void UpdatePriority(const EAsyncIOPriorityAndFlags Priority)
Definition BulkDataStreaming.cpp:765
FBulkDataRequest()=default
Definition BulkDataBuffer.h:16
Definition BulkDataCookedIndex.h:34
Definition BulkData.h:1213
virtual FBulkDataRequest::EStatus GetStatus() const =0
virtual void UpdatePriority(const EAsyncIOPriorityAndFlags Priority)=0
virtual uint32 GetRefCount() const =0
virtual bool Wait(uint32 Milliseconds)=0
virtual ~IHandle()
Definition BulkDataStreaming.cpp:472
Definition BulkData.h:1194
FBulkDataRequest & operator=(const FBulkDataRequest &)=delete
FBulkDataRequest & operator=(FBulkDataRequest &&)=default
EStatus GetStatus() const
Definition BulkData.h:1249
bool IsPending() const
Definition BulkData.h:1255
bool IsNone() const
Definition BulkData.h:1252
FBulkDataRequest(const FBulkDataRequest &)=delete
FBulkDataRequest(FBulkDataRequest::IHandle *InHandle)
Definition BulkData.h:1274
FBulkDataRequest(FBulkDataRequest &&)=default
bool IsCompleted() const
Definition BulkData.h:1261
static constexpr EAsyncIOPriorityAndFlags DefaultPriority
Definition BulkData.h:1232
EStatus
Definition BulkData.h:1198
~FBulkDataRequest()=default
bool IsOk() const
Definition BulkData.h:1258
void Cancel()
Definition BulkData.h:1264
FBulkDataRequest()=default
void Reset()
Definition BulkData.h:1267
TRefCountPtr< IHandle > Handle
Definition BulkData.h:1280
Definition BulkData.h:470
COREUOBJECT_API void ClearBulkDataFlags(uint32 BulkDataFlagsToClear)
Definition BulkData.cpp:1193
COREUOBJECT_API void RemoveBulkData()
Definition BulkData.cpp:1049
static COREUOBJECT_API bool HasFlags(EBulkDataFlags Flags, EBulkDataFlags Contains)
Definition BulkData.cpp:1235
bool IsLocked() const
Definition BulkData.h:791
COREUOBJECT_API bool DoesExist() const
Definition BulkData.cpp:813
bool IsUsingIODispatcher() const
Definition BulkData.h:667
COREUOBJECT_API int64 GetBulkDataSize() const
Definition BulkData.cpp:770
COREUOBJECT_API void GetBulkDataVersions(FArchive &InlineArchive, FPackageFileVersion &OutUEVersion, int32 &OutLicenseeUEVersion, FCustomVersionContainer &OutCustomVersions) const
Definition BulkData.cpp:1422
COREUOBJECT_API void StoreCompressedOnDisk(FName CompressionFormat)
Definition BulkData.cpp:1484
FIoFilenameHash GetIoFilenameHash() const
Definition BulkData.h:742
COREUOBJECT_API bool IsStoredCompressedOnDisk() const
Definition BulkData.cpp:799
static COREUOBJECT_API void ClearBulkDataFlagsOn(EBulkDataFlags &InOutAccumulator, EBulkDataFlags FlagsToClear)
Definition BulkData.cpp:1230
COREUOBJECT_API bool CanLoadFromDisk() const
Definition BulkData.cpp:804
COREUOBJECT_API void SetBulkDataFlags(uint32 BulkDataFlagsToSet)
Definition BulkData.cpp:1149
COREUOBJECT_API void Serialize(FArchive &Ar, UObject *Owner, bool bAttemptFileMapping, int32 ElementSize, EFileRegionType FileRegionType)
Definition BulkData.cpp:1240
bool IsSingleUse() const
Definition BulkData.h:683
COREUOBJECT_API int64 GetBulkDataOffsetInFile() const
Definition BulkData.cpp:790
TFunction< void(FArchive &, void *, int64, EBulkDataFlags)> FSerializeBulkDataElements
Definition BulkData.h:848
COREUOBJECT_API bool UnloadBulkData()
Definition BulkData.cpp:1071
COREUOBJECT_API FIoChunkId CreateChunkId() const
Definition BulkData.cpp:1198
COREUOBJECT_API FString GetDebugName() const
Definition BulkData.cpp:1203
FOwnedBulkDataPtr * StealFileMapping()
Definition BulkData.h:873
static constexpr SIZE_T MaxBulkDataSize
Definition BulkData.h:517
COREUOBJECT_API IBulkDataIORequest * CreateStreamingRequest(EAsyncIOPriorityAndFlags Priority, FBulkDataIORequestCallBack *CompleteCallback, uint8 *UserSuppliedMemory) const
Definition BulkData.cpp:1586
COREUOBJECT_API void ForceBulkDataResident()
Definition BulkData.cpp:1128
COREUOBJECT_API bool IsAsyncLoadingComplete() const
Definition BulkData.cpp:849
COREUOBJECT_API void ResetBulkDataFlags(uint32 BulkDataFlagsToSet)
Definition BulkData.cpp:1154
bool IsOptional() const
Definition BulkData.h:631
COREUOBJECT_API uint32 GetBulkDataFlags() const
Definition BulkData.cpp:1164
bool IsDataMemoryMapped() const
Definition BulkData.h:675
COREUOBJECT_API IAsyncReadFileHandle * OpenAsyncReadHandle() const
Definition BulkData.cpp:1574
COREUOBJECT_API void * Realloc(int64 ElementCount, int64 ElementSize)
Definition BulkData.cpp:1010
bool IsInSeparateFile() const
Definition BulkData.h:649
static COREUOBJECT_API void DumpBulkDataUsage(FOutputDevice &Log)
Definition BulkData.cpp:682
COREUOBJECT_API void GetCopy(void **Dest, bool bDiscardInternalCopy=true)
Definition BulkData.cpp:872
COREUOBJECT_API void Unlock() const
Definition BulkData.cpp:1031
COREUOBJECT_API FBulkData & operator=(const FBulkData &Other)
Definition BulkData.cpp:643
bool IsInExternalResource() const
Definition BulkData.h:658
COREUOBJECT_API int64 GetBulkDataSizeOnDisk() const
Definition BulkData.cpp:781
void SerializeBulkData(FArchive &Ar, void *Data, EBulkDataFlags InBulkDataFlags)
Definition BulkData.h:868
COREUOBJECT_API const void * LockReadOnly() const
Definition BulkData.cpp:995
COREUOBJECT_API ~FBulkData()
Definition BulkData.cpp:617
COREUOBJECT_API bool IsAvailableForUse() const
Definition BulkData.cpp:855
static COREUOBJECT_API void SetBulkDataFlagsOn(EBulkDataFlags &InOutAccumulator, EBulkDataFlags FlagsToSet)
Definition BulkData.cpp:1225
bool IsInlined() const
Definition BulkData.h:640
COREUOBJECT_API FName GetDecompressionFormat() const
Definition BulkData.cpp:829
bool IsUnlocked() const
Definition BulkData.h:796
bool IsDuplicateNonOptional() const
Definition BulkData.h:692
COREUOBJECT_API bool IsBulkDataLoaded() const
Definition BulkData.cpp:844
Definition BulkDataStreaming.cpp:556
Definition CustomVersion.h:111
Definition AsyncLoading2.cpp:2479
Definition BulkDataStreaming.cpp:479
Definition IoChunkId.h:64
static CORE_API const FIoChunkId InvalidChunkId
Definition IoChunkId.h:66
Definition LinkerLoad.h:124
Definition LinkerSave.h:48
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition PackagePath.h:89
Definition AsyncFileHandle.h:211
Definition AsyncFileHandle.h:31
virtual int64 GetSize() const =0
virtual bool WaitCompletion(float TimeLimitSeconds=0.0f)=0
virtual uint8 * GetReadResults()=0
virtual bool PollCompletion() const =0
virtual ~IBulkDataIORequest()
Definition BulkData.h:86
Definition MappedFileHandle.h:115
Definition MappedFileHandle.h:17
Definition BulkData.h:1036
int32 GetElementSize() const
Definition BulkData.h:1046
int64 GetElementCount() const
Definition BulkData.h:1056
void SerializeWithFlags(FArchive &Ar, UObject *Owner, uint32 SaveOverrideFlags, bool bAttemptFileMapping=false, EFileRegionType FileRegionType=EFileRegionType::None)
Definition BulkData.h:1117
FBulkDataBuffer< ElementType > GetCopyAsBuffer(int64 RequestedElementCount, bool bDiscardInternalCopy)
Definition BulkData.h:1080
ElementType * Realloc(int64 ElementCount)
Definition BulkData.h:1066
void Serialize(FArchive &Ar, UObject *Owner, int32 Idx=INDEX_NONE, bool bAttemptFileMapping=false, EFileRegionType FileRegionType=EFileRegionType::None)
Definition BulkData.h:1103
Definition AndroidPlatformMisc.h:14
Definition RefCounting.h:454
Definition SortedMap.h:20
UE_FORCEINLINE_HINT ValueType & Add(const KeyType &InKey, const ValueType &InValue)
Definition SortedMap.h:194
UE_FORCEINLINE_HINT void Empty(int32 ExpectedNumElements=0)
Definition SortedMap.h:124
void GenerateKeyArray(TArray< KeyType, Allocator > &OutArray) const
Definition SortedMap.h:415
ValueType FindRef(KeyConstPointerType Key) const
Definition SortedMap.h:338
bool Contains(KeyConstPointerType Key) const
Definition SortedMap.h:387
Definition BodySetup.h:128
Definition EditorBulkData.h:132
uint32 GetFlags(uint32 Word3)
Definition CollisionFilterData.cpp:21
void SetFlags(uint32 &Word3, uint32 Flags)
Definition CollisionFilterData.cpp:27
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
const FVector Offset(0, 0, 20)
Definition BulkData.cpp:140
bool HasAnyFlags(const UObject *Obj, int32 FlagsToCheck)
Definition ObjectFwd.cpp:43
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition BulkData.h:453
bool bAttemptMemoryMapping
Definition BulkData.h:461
FBulkDataCookedIndex CookedIndex
Definition BulkData.h:463
EFileRegionType RegionType
Definition BulkData.h:459
int32 ElementSize
Definition BulkData.h:457
UObject * Owner
Definition BulkData.h:455
Definition IoOffsetLength.h:12
Definition BulkData.h:216
IMappedFileRegion * GetMappedRegion()
Definition BulkData.h:240
FOwnedBulkDataPtr(IMappedFileHandle *Handle, IMappedFileRegion *Region)
Definition BulkData.h:225
bool IsDataMemoryMapped() const
Definition BulkData.h:244
void RelinquishOwnership()
Definition BulkData.h:249
IMappedFileHandle * GetMappedHandle()
Definition BulkData.h:236
COREUOBJECT_API ~FOwnedBulkDataPtr()
Definition BulkData.cpp:578
COREUOBJECT_API const void * GetPointer()
Definition BulkData.cpp:594
FOwnedBulkDataPtr(void *InAllocatedData)
Definition BulkData.h:217
Definition ObjectVersion.h:762
Definition IsPODType.h:12
Definition Optional.h:131