UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VirtualTextureSystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#if !UE_BUILD_SHIPPING
8#endif
9#include "RHI.h"
10#include "RendererInterface.h"
11#include "Templates/UniquePtr.h"
13#include "VT/TexturePageLocks.h"
14#include "VirtualTexturing.h"
16#include "Tasks/Task.h"
18
21class FScene;
22class FUniquePageList;
35class ISceneRenderer;
36
84
86{
87public:
89 {
90 return AsyncTask;
91 }
92
93private:
96 FUniqueRequestList* MergedRequestList = nullptr;
98 UE::Tasks::FTask AsyncTask;
100 bool bAsyncTaskAllowed = false;
101 int32 PageUploadBudgetRVT = 0;
102 int32 PageUploadBudgetSVT = 0;
103
105};
106
108{
109public:
110 static void Initialize();
111 static void Shutdown();
112 static FVirtualTextureSystem& Get();
113
114 uint32 GetFrame() const { return Frame; }
115
116 void Update(FRDGBuilder& GraphBuilder, ERHIFeatureLevel::Type FeatureLevel, ISceneRenderer* SceneRenderer, const FVirtualTextureUpdateSettings& Settings);
117
118 // Called in FSceneRenderer::UpdateScene, before FVirtualTextureSystem::BeginUpdate -- see comments there for more info
120
124
125 void FinalizeRequests(FRDGBuilder& GraphBuilder, ISceneRenderer* SceneRenderer);
126
128
131
137
140
143
156
157 void LoadPendingTiles(FRDGBuilder& GraphBuilder, ERHIFeatureLevel::Type FeatureLevel);
158
160
161#if WITH_EDITOR
162 void SetVirtualTextureRequestRecordBuffer(uint64 Handle);
163 uint64 GetVirtualTextureRequestRecordBuffer(TSet<uint64>& OutPageRequests);
164#endif
166
167 void FlushCache();
169
171
172 bool IsPendingRootPageMap(IAllocatedVirtualTexture* AllocatedVT) const;
173
174private:
182 friend class FTexturePageMap;
183 friend class FTexturePagePool;
184 friend class FRendererModule;
185
188
190 void ReleaseSpace(FVirtualTextureSpace* Space);
191
194
195 FVirtualTextureSpace* GetSpace(int32 ID) const { return Spaces.IsValidIndex(ID) ? Spaces[ID].Get() : nullptr; }
196 FAdaptiveVirtualTexture* GetAdaptiveVirtualTexture(int32 ID) const { return AdaptiveVTs.IsValidIndex(ID) ? AdaptiveVTs[ID] : nullptr; }
197 FVirtualTexturePhysicalSpace* GetPhysicalSpace(uint32 ID) const { return PhysicalSpaces.IsValidIndex(ID) ? PhysicalSpaces[ID] : nullptr; }
198
199 void LockTile(const FVirtualTextureLocalTile& Tile);
200 void UnlockTile(const FVirtualTextureLocalTile& Tile, const FVirtualTextureProducer* Producer);
201 void ForceUnlockAllTiles(const FVirtualTextureProducerHandle& ProducerHandle, const FVirtualTextureProducer* Producer);
202
204
205 void AllocateResources(FRDGBuilder& GraphBuilder);
206 void DestroyPendingVirtualTextures(bool bForceDestroyAll);
207 void ReleasePendingSpaces(bool bForceDestroyAll);
208
209 void RequestTilesForRegionInternal(const IAllocatedVirtualTexture* AllocatedVT, const FVector2D& InScreenSpaceSize, const FVector2D& InViewportPosition, const FVector2D& InViewportSize, const FVector2D& InUV0, const FVector2D& InUV1, int32 InMipLevel);
210 void RequestTilesInternal(const IAllocatedVirtualTexture* AllocatedVT, int32 InMipLevel);
211 void RequestTilesInternal(const IAllocatedVirtualTexture* AllocatedVT, const FVector2D& InScreenSpaceSize, int32 InMipLevel);
212
215
217 void GatherLockedTileRequests(FUniqueRequestList* MergedRequestList);
218 void GatherPackedTileRequests(FConcurrentLinearBulkObjectAllocator& Allocator, const FVirtualTextureUpdateSettings& Settings, FUniqueRequestList* MergedRequestList);
219
220 enum class EUpdatePhase
221 {
222 Begin,
223 End
224 };
225
226 void SubmitThrottledRequests(FRHICommandList& RHICmdList, FVirtualTextureUpdater* Updater, EUpdatePhase UpdatePhase);
227 void SubmitRequests(FRHICommandList& RHICmdList, ERHIFeatureLevel::Type FeatureLevel, FConcurrentLinearBulkObjectAllocator& Allocator, FVirtualTextureUpdateSettings const& Settings, FUniqueRequestList* RequestList, bool bAsync);
228
229 void GatherRequests(FUniqueRequestList* MergedRequestList, const FUniquePageList* UniquePageList, uint32 FrameRequested, FConcurrentLinearBulkObjectAllocator& Allocator, FVirtualTextureUpdateSettings const& Settings);
230
231 void AddPageUpdate(FPageUpdateBuffer* Buffers, uint32 FlushCount, uint32 PhysicalSpaceID, uint16 pAddress);
232
233 void FeedbackAnalysisTask(const FFeedbackAnalysisParameters& Parameters);
234 void AddRequestedTilesTask(const FAddRequestedTilesParameters& Parameters);
235 void GatherRequestsTask(const FGatherRequestsParameters& Parameters);
236
237 void GetContinuousUpdatesToProduce(FUniqueRequestList const* RequestList, int32 MaxTilesToProduce, int32 MaxContinuousUpdates);
238
239 void UpdateResidencyTracking() const;
240 void GrowPhysicalPools() const;
241
242#if WITH_EDITOR
243 void RecordPageRequests(FUniquePageList const* UniquePageList, TSet<uint64>& OutPages);
244#endif
245
247
248 mutable UE::FRecursiveMutex Mutex;
249
250 static const uint32 MaxNumTasks = 16;
251
253 uint32 NumAllocatedSpaces = 0;
254
256
259
260 TArray<IAllocatedVirtualTexture*> PendingDeleteAllocatedVTs;
261
263 TArray<IAllocatedVirtualTexture*> AllocatedVTsToMap;
265
266 bool bUpdating = false;
267 bool bFlushCaches;
268 void FlushCachesFromConsole();
269 FAutoConsoleCommand FlushCachesCommand;
270
271 void DumpFromConsole();
272 FAutoConsoleCommand DumpCommand;
273
274 void ListPhysicalPoolsFromConsole();
275 FAutoConsoleCommand ListPhysicalPools;
276
277 void DumpPoolUsageFromConsole();
278 FAutoConsoleCommand DumpPoolUsageCommand;
279
280#if WITH_EDITOR
283#endif
284
285 TArray<uint32> RequestedPackedTiles;
286
288 TArray<FVirtualTextureLocalTile> TilesToLockForNextFrame;
289 FTexturePageLocks TileLocks;
290
291 TSet<FVirtualTextureLocalTileRequest> ContinuousUpdateTilesToProduce;
292 TSet<FVirtualTextureLocalTileRequest> MappedTilesToProduce;
293 TSet<FVirtualTextureLocalTileRequest> TransientCollectedTilesToProduce;
295
296#if WITH_EDITOR
299#endif
300 TArray<uint64> PageRequestPlaybackBuffer;
301
302#if !UE_BUILD_SHIPPING
303 void GetOnScreenMessages(FCoreDelegates::FSeverityMessageMap& OutMessages);
304 FDelegateHandle OnScreenMessageDelegateHandle;
305 void DrawResidencyHud(class UCanvas*, class APlayerController*);
306 FDelegateHandle DrawResidencyHudDelegateHandle;
307 void UpdateCsvStats();
308#endif
309};
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EVTInvalidatePriority
Definition VirtualTextureEnum.h:29
EVTProducePageFlags
Definition VirtualTexturing.h:246
void() FVTProducerDestroyedFunction(const FVirtualTextureProducerHandle &InHandle, void *Baton)
Definition VirtualTexturing.h:194
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition PlayerController.h:261
Definition AdaptiveVirtualTexture.h:25
Definition VirtualTextureSystem.cpp:287
Definition AllocatedVirtualTexture.h:18
Definition IConsoleManager.h:2026
TMultiMap< EOnScreenMessageSeverity, FText > FSeverityMessageMap
Definition CoreDelegates.h:513
Definition IDelegateInstance.h:14
Definition VirtualTextureSystem.cpp:253
Definition VirtualTextureSystem.cpp:325
Definition MaterialRenderProxy.h:102
Definition RenderGraphBuilder.h:49
Definition RHICommandList.h:455
Definition RHICommandList.h:3819
Definition RendererModule.h:33
Definition ScenePrivate.h:2875
Definition TexturePageLocks.h:15
Definition TexturePageMap.h:66
Definition TexturePagePool.h:24
Definition UniquePageList.h:10
Definition UniqueRequestList.h:64
Definition VirtualTexturePhysicalSpace.h:86
Definition VirtualTextureProducer.h:62
Definition VirtualTextureProducer.h:15
Definition VirtualTextureSpace.h:48
Definition VirtualTextureSystem.h:108
uint32 GetFrame() const
Definition VirtualTextureSystem.h:114
void SetMipLevelToLock(FVirtualTextureProducerHandle ProducerHandle, int32 InMipLevel)
Definition VirtualTextureSystem.cpp:1421
void CallPendingCallbacks()
Definition VirtualTextureSystem.cpp:2985
void LoadPendingTiles(FRDGBuilder &GraphBuilder, ERHIFeatureLevel::Type FeatureLevel)
Definition VirtualTextureSystem.cpp:1358
uint32 RemoveAllProducerDestroyedCallbacks(const void *Baton)
Definition VirtualTextureSystem.cpp:858
bool IsPendingRootPageMap(IAllocatedVirtualTexture *AllocatedVT) const
Definition VirtualTextureSystem.cpp:3199
FVirtualTextureProducerHandle RegisterProducer(FRHICommandListBase &RHICmdList, const FVTProducerDescription &InDesc, IVirtualTexture *InProducer)
Definition VirtualTextureSystem.cpp:830
void RequestTiles(const FVector2D &InScreenSpaceSize, int32 InMipLevel=-1)
Definition VirtualTextureSystem.cpp:1272
static void Shutdown()
Definition VirtualTextureSystem.cpp:354
bool TryReleaseProducer(const FVirtualTextureProducerHandle &Handle)
Definition VirtualTextureSystem.cpp:844
static void Initialize()
Definition VirtualTextureSystem.cpp:346
void AddProducerDestroyedCallback(const FVirtualTextureProducerHandle &Handle, FVTProducerDestroyedFunction *Function, void *Baton)
Definition VirtualTextureSystem.cpp:851
void FlushCache()
Definition VirtualTextureSystem.cpp:430
void EndUpdate(FRDGBuilder &GraphBuilder, TUniquePtr< FVirtualTextureUpdater > &&Updater, ERHIFeatureLevel::Type FeatureLevel)
Definition VirtualTextureSystem.cpp:3106
FVector4f GetGlobalMipBias() const
Definition VirtualTextureSystem.cpp:3182
void DestroyAdaptiveVirtualTexture(IAdaptiveVirtualTexture *AdaptiveVT)
Definition VirtualTextureSystem.cpp:820
void FinalizeRequests(FRDGBuilder &GraphBuilder, ISceneRenderer *SceneRenderer)
Definition VirtualTextureSystem.cpp:2686
void RequestRecordedTiles(TArray< uint64 > &&InPageRequests)
Definition VirtualTextureSystem.cpp:3391
void DestroyVirtualTexture(IAllocatedVirtualTexture *AllocatedVT)
Definition VirtualTextureSystem.cpp:737
TUniquePtr< FVirtualTextureUpdater > BeginUpdate(FRDGBuilder &GraphBuilder, ERHIFeatureLevel::Type FeatureLevel, ISceneRenderer *SceneRenderer, const FVirtualTextureUpdateSettings &Settings)
Definition VirtualTextureSystem.cpp:2993
static FVirtualTextureSystem & Get()
Definition VirtualTextureSystem.cpp:363
void WaitForTasks(FVirtualTextureUpdater *Updater)
Definition VirtualTextureSystem.cpp:3094
void ReleaseProducer(const FVirtualTextureProducerHandle &Handle)
Definition VirtualTextureSystem.cpp:837
IAllocatedVirtualTexture * AllocateVirtualTexture(FRHICommandListBase &RHICmdList, const FAllocatedVTDescription &Desc)
Definition VirtualTextureSystem.cpp:644
IAdaptiveVirtualTexture * AllocateAdaptiveVirtualTexture(FRHICommandListBase &RHICmdList, const FAdaptiveVTDescription &AdaptiveVTDesc, const FAllocatedVTDescription &AllocatedVTDesc)
Definition VirtualTextureSystem.cpp:808
void ReleasePendingResources()
Definition VirtualTextureSystem.cpp:3174
Definition VirtualTextureSystem.h:86
UE::Tasks::FTask GetTask() const
Definition VirtualTextureSystem.h:88
Definition VirtualTexturing.h:471
Definition VirtualTexturing.h:374
Definition SceneRendererInterface.h:47
Definition VirtualTexturing.h:289
Definition ArrayView.h:139
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition Canvas.h:159
Definition RecursiveMutex.h:19
Type
Definition RHIFeatureLevel.h:20
@ Num
Definition RHIFeatureLevel.h:54
Definition VirtualTexturing.h:485
Definition VirtualTextureSystem.cpp:278
Definition VirtualTexturing.h:69
Definition VirtualTextureSystem.cpp:245
Definition VirtualTextureSystem.cpp:311
Definition VirtualTextureSystem.cpp:235
Definition VirtualTexturePhysicalSpace.h:17
Definition VirtualTexturing.h:148
Definition VirtualTextureSpace.h:17
Definition VirtualTextureFeedback.h:30
Definition VirtualTextureSystem.h:38
int32 MaxPagesProduced
Definition VirtualTextureSystem.h:81
int32 MaxSVTPageUploads
Definition VirtualTextureSystem.h:80
bool bEnablePageRequests
Definition VirtualTextureSystem.h:69
bool bForceContinuousUpdate
Definition VirtualTextureSystem.h:74
bool bEnablePlayback
Definition VirtualTextureSystem.h:72
bool bEnableAsyncTasks
Definition VirtualTextureSystem.h:68
int32 NumGatherTasks
Definition VirtualTextureSystem.h:77
FVirtualTextureUpdateSettings()
Definition VirtualTextureSystem.cpp:188
bool bEnableFeedback
Definition VirtualTextureSystem.h:70
bool bParallelFeedbackTasks
Definition VirtualTextureSystem.h:73
int32 NumFeedbackTasks
Definition VirtualTextureSystem.h:76
bool bEnableFeedbackProduce
Definition VirtualTextureSystem.h:71
int32 MaxRVTPageUploads
Definition VirtualTextureSystem.h:79
int32 MaxContinuousUpdates
Definition VirtualTextureSystem.h:82
FVirtualTextureUpdateSettings & EnableThrottling(bool bEnable)
Definition VirtualTextureSystem.h:42
FVirtualTextureUpdateSettings & EnablePageRequests(bool bEnable=true)
Definition VirtualTextureSystem.h:62
bool bForceSyncPageUpdate
Definition VirtualTextureSystem.h:75
int32 MaxGatherPagesBeforeFlush
Definition VirtualTextureSystem.h:78
FVirtualTextureUpdateSettings & EnableAsyncTasks(bool bEnable=true)
Definition VirtualTextureSystem.h:55
Definition TexturePageMap.h:34
Definition VirtualTexturing.h:495
Definition VirtualTexturing.h:33