UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AsyncTextureStreaming.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4AsyncTextureStreaming.h: Definitions of classes used for texture streaming async task.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "Stats/Stats.h"
11#include "ContentStreaming.h"
12#include "Async/AsyncWork.h"
15
19
22{
23public:
24
26 void Init(
28 float InWorldTime,
30 FDynamicRenderAssetInstanceManager& DynamicComponentManager);
31
32 void Init(
34 float InLastUpdateTime);
35
37
40
42
43 uint32 GetAllocatedSize() const { return ViewInfos.GetAllocatedSize() + StaticInstancesViews.GetAllocatedSize(); }
44
45 FORCEINLINE const FRenderAssetInstanceAsyncView& GetDynamicInstancesView() const { return DynamicInstancesView; }
46 FORCEINLINE const TArray<FRenderAssetInstanceAsyncView>& GetStaticInstancesViews() const { return StaticInstancesViews; }
47 FORCEINLINE const TArray<FStreamingViewInfo>& GetViewInfos() const { return ViewInfos; }
48
49 FORCEINLINE bool HasAnyView() const { return ViewInfos.Num() > 0; }
50
51 // Release the view. Decrementing the refcounts.
52 // This must be done on the gamethread as the refcount are not threadsafe.
54 {
55 DynamicInstancesView = FRenderAssetInstanceAsyncView();
56 StaticInstancesViews.Reset();
57 }
58
60 {
61 DynamicInstancesView.OnTaskDone();
62 for (FRenderAssetInstanceAsyncView& StaticView : StaticInstancesViews)
63 {
64 StaticView.OnTaskDone();
65 }
66 }
67
68
69private:
72
74 FStreamingViewInfoExtraArray ViewInfoExtras;
75
76 FRenderAssetInstanceAsyncView DynamicInstancesView;
77
79 TArray<FRenderAssetInstanceAsyncView> StaticInstancesViews;
80
82 float LastUpdateTime;
83
84 float MaxScreenSizeOverAllViews;
85
87 TArray<int32> StaticInstancesViewIndices;
88
90 TArray<int32> CulledStaticInstancesViewIndices;
91
93 TArray<int32> StaticInstancesViewLevelIndices;
94};
95
96struct FCompareRenderAssetByRetentionPriority // Bigger retention priority first.
97{
100
101 FORCEINLINE bool operator()( int32 IndexA, int32 IndexB ) const
102 {
103 const int32 PrioA = StreamingRenderAssets[IndexA].RetentionPriority;
104 const int32 PrioB = StreamingRenderAssets[IndexB].RetentionPriority;
105 if (PrioA > PrioB) return true;
106 if (PrioA == PrioB)
107 {
108 const float SSA = StreamingRenderAssets[IndexA].NormalizedScreenSize;
109 const float SSB = StreamingRenderAssets[IndexB].NormalizedScreenSize;
110 if (SSA > SSB) return true;
111 if (SSA == SSB) return IndexA > IndexB; // Sorting by index so that it gets deterministic.
112 }
113 return false;
114 }
115};
116
117struct FCompareRenderAssetByLoadOrderPriority // Bigger load order priority first.
118{
121
122 FORCEINLINE bool operator()( int32 IndexA, int32 IndexB ) const
123 {
124 const int32 PrioA = StreamingRenderAssets[IndexA].LoadOrderPriority;
125 const int32 PrioB = StreamingRenderAssets[IndexB].LoadOrderPriority;
126 if ( PrioA > PrioB ) return true;
127 if ( PrioA == PrioB ) return IndexA > IndexB; // Sorting by index so that it gets deterministic.
128 return false;
129 }
130};
131
133// this could implement a better abandon, but give how it is used, it does that anyway via the abort mechanism
135{
136public:
137
139 : StreamingManager( *InStreamingManager )
140 , bAbort( false )
141 {
142 Reset(0, 0, 0, 0, 0);
143 MemoryBudget = 0;
144 MeshMemoryBudget = 0;
145 PerfectWantedMipsBudgetResetThresold = 0;
146 }
147
150 {
151 TotalGraphicsMemory = InTotalGraphicsMemory;
152 AllocatedMemory = InAllocatedMemory;
153 PoolSize = InPoolSize;
154 TempMemoryBudget = InTempMemoryBudget;
155 MemoryMargin = InMemoryMargin;
156
157 bAbort = false;
158 }
159
161 void Abort() { bAbort = true; }
162
164 bool IsAborted() const { return bAbort; }
165
167 const TArray<int32>& GetLoadRequests() const { return LoadRequests; }
168 const TArray<int32>& GetCancelationRequests() const { return CancelationRequests; }
169 const TArray<int32>& GetPendingUpdateDirties() const { return PendingUpdateDirties; }
170
172
174 void DoWork();
175
176 bool HasAnyView() const { return StreamingData.HasAnyView(); }
177
182
183protected:
184
187
188private:
189
191
192 void ApplyPakStateChanges_Async();
193
195
197
199
200 void UpdateBudgetedMips_Async();
201
202 void UpdateBudgetedVirtualTextureMips_Async();
203
204 void UpdateLoadAndCancelationRequests_Async();
205
206 void UpdatePendingStreamingStatus_Async();
207
208 void UpdateStats_Async();
209
210 void UpdateCSVOnlyStats_Async();
211
212 FORCEINLINE TStatId GetStatId() const
213 {
215 }
216
218 FRenderAssetStreamingManager& StreamingManager;
219
221 TArray<int32> LoadRequests;
222 TArray<int32> CancelationRequests;
223
225 TArray<int32> PendingUpdateDirties;
226
228 volatile bool bAbort;
229
231 int64 TotalGraphicsMemory;
232
234 int64 AllocatedMemory;
235
237 int64 PoolSize;
238
240 int64 TempMemoryBudget;
241
243 int64 MemoryMargin;
244
246 int64 MemoryBudget;
247
249 int64 MeshMemoryBudget;
250
256 int64 PerfectWantedMipsBudgetResetThresold;
257};
#define FORCEINLINE
Definition AndroidPlatform.h:140
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AsyncTextureStreaming.h:22
void ComputeViewInfoExtras(const FRenderAssetStreamingSettings &Settings)
Definition AsyncTextureStreaming.cpp:77
FORCEINLINE bool HasAnyView() const
Definition AsyncTextureStreaming.h:49
void OnTaskDone_Async()
Definition AsyncTextureStreaming.h:59
FORCEINLINE const TArray< FRenderAssetInstanceAsyncView > & GetStaticInstancesViews() const
Definition AsyncTextureStreaming.h:46
void ReleaseViews()
Definition AsyncTextureStreaming.h:53
void UpdatePerfectWantedMips_Async(FStreamingRenderAsset &StreamingRenderAsset, const FRenderAssetStreamingSettings &Settings, bool bOutputToLog=false) const
Definition AsyncTextureStreaming.cpp:139
uint32 GetAllocatedSize() const
Definition AsyncTextureStreaming.h:43
FORCEINLINE const FRenderAssetInstanceAsyncView & GetDynamicInstancesView() const
Definition AsyncTextureStreaming.h:45
void UpdateBoundSizes_Async(const FRenderAssetStreamingSettings &Settings)
Definition AsyncTextureStreaming.cpp:107
FORCEINLINE const TArray< FStreamingViewInfo > & GetViewInfos() const
Definition AsyncTextureStreaming.h:47
Definition AsyncWork.h:585
Definition DynamicTextureInstanceManager.h:19
Definition LevelTextureManager.h:21
Definition AsyncWork.h:663
Definition TextureInstanceView.h:267
void OnTaskDone()
Definition TextureInstanceView.h:309
Definition AsyncTextureStreaming.h:135
void ReleaseAsyncViews()
Definition AsyncTextureStreaming.h:178
bool IsAborted() const
Definition AsyncTextureStreaming.h:164
bool HasAnyView() const
Definition AsyncTextureStreaming.h:176
void Abort()
Definition AsyncTextureStreaming.h:161
FRenderAssetStreamingMipCalcTask(FRenderAssetStreamingManager *InStreamingManager)
Definition AsyncTextureStreaming.h:138
void Reset(int64 InTotalGraphicsMemory, int64 InAllocatedMemory, int64 InPoolSize, int64 InTempMemoryBudget, int64 InMemoryMargin)
Definition AsyncTextureStreaming.h:149
bool AllowPerRenderAssetMipBiasChanges() const
Definition AsyncTextureStreaming.cpp:362
const TArray< int32 > & GetCancelationRequests() const
Definition AsyncTextureStreaming.h:168
FAsyncRenderAssetStreamingData StreamingData
Definition AsyncTextureStreaming.h:171
const TArray< int32 > & GetLoadRequests() const
Definition AsyncTextureStreaming.h:167
void DoWork()
Definition AsyncTextureStreaming.cpp:1024
const TArray< int32 > & GetPendingUpdateDirties() const
Definition AsyncTextureStreaming.h:169
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
@ false
Definition radaudio_common.h:23
Definition AsyncTextureStreaming.h:118
FCompareRenderAssetByLoadOrderPriority(const TArray< FStreamingRenderAsset > &InStreamingRenderAssets)
Definition AsyncTextureStreaming.h:119
FORCEINLINE bool operator()(int32 IndexA, int32 IndexB) const
Definition AsyncTextureStreaming.h:122
const TArray< FStreamingRenderAsset > & StreamingRenderAssets
Definition AsyncTextureStreaming.h:120
Definition AsyncTextureStreaming.h:97
FCompareRenderAssetByRetentionPriority(const TArray< FStreamingRenderAsset > &InStreamingRenderAssets)
Definition AsyncTextureStreaming.h:98
FORCEINLINE bool operator()(int32 IndexA, int32 IndexB) const
Definition AsyncTextureStreaming.h:101
const TArray< FStreamingRenderAsset > & StreamingRenderAssets
Definition AsyncTextureStreaming.h:99
Definition StreamingManagerTexture.h:32
Definition TextureStreamingHelpers.h:72
Definition StreamingTexture.h:23
Definition LightweightStats.h:416