UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VirtualTextureSpace.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"
8#include "TexturePageMap.h"
10#include "RendererInterface.h"
11#include "VirtualTexturing.h"
12
15
28
29inline bool operator==(const FVTSpaceDescription& Lhs, const FVTSpaceDescription& Rhs)
30{
31 return Lhs.Dimensions == Rhs.Dimensions &&
32 Lhs.TileSize == Rhs.TileSize &&
33 Lhs.TileBorderSize == Rhs.TileBorderSize &&
34 Lhs.NumPageTableLayers == Rhs.NumPageTableLayers &&
35 Lhs.PageTableFormat == Rhs.PageTableFormat &&
36 Lhs.bPrivateSpace == Rhs.bPrivateSpace &&
37 Lhs.bContinuousUpdate == Rhs.bContinuousUpdate &&
38 Lhs.MaxSpaceSize == Rhs.MaxSpaceSize &&
39 Lhs.IndirectionTextureSize == Rhs.IndirectionTextureSize;
40}
41inline bool operator!=(const FVTSpaceDescription& Lhs, const FVTSpaceDescription& Rhs)
42{
43 return !operator==(Lhs, Rhs);
44}
45
46// Virtual memory address space mapped by a page table texture
48{
49public:
51
53 virtual ~FVirtualTextureSpace();
54
55 inline const FVTSpaceDescription& GetDescription() const { return Description; }
56 inline uint32 GetPageTableWidth() const { return CachedPageTableWidth; }
57 inline uint32 GetPageTableHeight() const { return CachedPageTableHeight; }
58 inline uint8 GetDimensions() const { return Description.Dimensions; }
59 inline EVTPageTableFormat GetPageTableFormat() const { return Description.PageTableFormat; }
60 inline uint32 GetNumPageTableLayers() const { return Description.NumPageTableLayers; }
62 inline uint8 GetID() const { return ID; }
63
64 inline uint32 GetNumPageTableLevels() const { return CachedNumPageTableLevels; }
65 inline FVirtualTextureAllocator& GetAllocator() { return Allocator; }
66 inline const FVirtualTextureAllocator& GetAllocator() const { return Allocator; }
67 inline FTexturePageMap& GetPageMapForPageTableLayer(uint32 PageTableLayerIndex) { check(PageTableLayerIndex < Description.NumPageTableLayers); return PhysicalPageMap[PageTableLayerIndex]; }
68 inline const FTexturePageMap& GetPageMapForPageTableLayer(uint32 PageTableLayerIndex) const { check(PageTableLayerIndex < Description.NumPageTableLayers); return PhysicalPageMap[PageTableLayerIndex]; }
69
70 // FRenderResource interface
71 virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
72 virtual void ReleaseRHI() override;
73
74 inline uint32 AddRef() { return ++NumRefs; }
75 inline uint32 Release() { check(NumRefs > 0u); return --NumRefs; }
76 inline uint32 GetRefCount() const { return NumRefs; }
77
78 inline void SetReleasedFrame(uint32 InReleasedFrame) { ReleasedFrame = InReleasedFrame; }
79 inline uint32 GetReleasedFrame() const { return ReleasedFrame; }
80
81 uint32 GetSizeInBytes() const;
82
84
86
88 {
89 check(PageTableIndex < GetNumPageTableTextures());
90 return PageTable[PageTableIndex].TextureReferenceRHI.GetReference();
91 }
92
94 {
95 return PageTableIndirection.TextureReferenceRHI.GetReference();
96 }
97
99 {
100 return PageTableIndirection.RenderTarget;
101 }
102
103 void QueueUpdate( uint8 Layer, uint8 vLogSize, uint32 vAddress, uint8 vLevel, const FPhysicalTileLocation& pTileLocation);
104 void AllocateTextures(FRDGBuilder& GraphBuilder);
108
109 void DumpToConsole(bool verbose);
110
111#if WITH_EDITOR
112 void SaveAllocatorDebugImage() const;
113#endif // WITH_EDITOR
114
115private:
116 FUintPoint GetRequiredPageTableAllocationSize() const;
117
119
120 struct FTextureEntry
121 {
123 FTextureReferenceRHIRef TextureReferenceRHI;
124 };
125
126 FVTSpaceDescription Description;
127
128 FVirtualTextureAllocator Allocator;
130
131 FTextureEntry PageTable[TextureCapacity];
132 TEnumAsByte<EPixelFormat> TexturePixelFormat[TextureCapacity];
133 FString PageTableDebugNames[TextureCapacity];
134
135 FTextureEntry PageTableIndirection;
136
138
139 uint32 NumRefs = 0;
140 uint32 ReleasedFrame = 0;
141
142 uint8 ID = 0;
143 uint32 CachedPageTableWidth = 0;
144 uint32 CachedPageTableHeight = 0;
145 uint32 CachedNumPageTableLevels = 0;
146 bool bNeedToAllocatePageTable = false;
147 bool bNeedToAllocatePageTableIndirection = false;
148 bool bForceEntireUpdate = false;
149};
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
bool operator==(const FVTSpaceDescription &Lhs, const FVTSpaceDescription &Rhs)
Definition VirtualTextureSpace.h:29
bool operator!=(const FVTSpaceDescription &Lhs, const FVTSpaceDescription &Rhs)
Definition VirtualTextureSpace.h:41
EVTPageTableFormat
Definition VirtualTexturing.h:360
#define VIRTUALTEXTURE_MAX_PAGETABLE_SIZE
Definition VirtualTexturing.h:61
#define VIRTUALTEXTURE_SPACE_MAXLAYERS
Definition VirtualTexturing.h:57
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AllocatedVirtualTexture.h:18
Definition RenderGraphBuilder.h:49
Definition RenderGraphUtils.h:1272
Definition RHICommandList.h:455
Definition RHITextureReference.h:8
Definition RenderResource.h:37
Definition TexturePageMap.h:66
Definition VirtualTextureAllocator.h:13
Definition VirtualTextureSpace.h:48
const FVTSpaceDescription & GetDescription() const
Definition VirtualTextureSpace.h:55
void FinalizeTextures(FRDGBuilder &GraphBuilder, FRDGExternalAccessQueue &ExternalAccessQueue)
Definition VirtualTextureSpace.cpp:508
uint32 GetNumPageTableLevels() const
Definition VirtualTextureSpace.h:64
uint32 GetNumPageTableTextures() const
Definition VirtualTextureSpace.h:61
FVirtualTextureAllocator & GetAllocator()
Definition VirtualTextureSpace.h:65
FTexturePageMap & GetPageMapForPageTableLayer(uint32 PageTableLayerIndex)
Definition VirtualTextureSpace.h:67
void QueueUpdateEntirePageTable()
Definition VirtualTextureSpace.cpp:237
TRefCountPtr< IPooledRenderTarget > GetPageTableIndirectionRenderTarget() const
Definition VirtualTextureSpace.h:98
void FreeVirtualTexture(FAllocatedVirtualTexture *VirtualTexture)
Definition VirtualTextureSpace.cpp:116
uint32 GetNumPageTableLayers() const
Definition VirtualTextureSpace.h:60
virtual ~FVirtualTextureSpace()
Definition VirtualTextureSpace.cpp:98
uint32 AddRef()
Definition VirtualTextureSpace.h:74
void ApplyUpdates(FVirtualTextureSystem *System, FRDGBuilder &GraphBuilder, FRDGExternalAccessQueue &ExternalAccessQueue)
Definition VirtualTextureSpace.cpp:315
uint8 GetID() const
Definition VirtualTextureSpace.h:62
void QueueUpdate(uint8 Layer, uint8 vLogSize, uint32 vAddress, uint8 vLevel, const FPhysicalTileLocation &pTileLocation)
Definition VirtualTextureSpace.cpp:172
const FVirtualTextureAllocator & GetAllocator() const
Definition VirtualTextureSpace.h:66
uint32 GetPageTableHeight() const
Definition VirtualTextureSpace.h:57
virtual void InitRHI(FRHICommandListBase &RHICmdList) override
Definition VirtualTextureSpace.cpp:121
uint32 GetPageTableWidth() const
Definition VirtualTextureSpace.h:56
const FTexturePageMap & GetPageMapForPageTableLayer(uint32 PageTableLayerIndex) const
Definition VirtualTextureSpace.h:68
uint32 GetReleasedFrame() const
Definition VirtualTextureSpace.h:79
FRHITextureReference * GetPageTableIndirectionTexture() const
Definition VirtualTextureSpace.h:93
virtual void ReleaseRHI() override
Definition VirtualTextureSpace.cpp:131
uint8 GetDimensions() const
Definition VirtualTextureSpace.h:58
uint32 Release()
Definition VirtualTextureSpace.h:75
static const uint32 LayersPerPageTableTexture
Definition VirtualTextureSpace.h:50
void DumpToConsole(bool verbose)
Definition VirtualTextureSpace.cpp:525
uint32 GetSizeInBytes() const
Definition VirtualTextureSpace.cpp:155
EVTPageTableFormat GetPageTableFormat() const
Definition VirtualTextureSpace.h:59
uint32 AllocateVirtualTexture(FAllocatedVirtualTexture *VirtualTexture)
Definition VirtualTextureSpace.cpp:102
FRHITextureReference * GetPageTableTexture(uint32 PageTableIndex) const
Definition VirtualTextureSpace.h:87
void SetReleasedFrame(uint32 InReleasedFrame)
Definition VirtualTextureSpace.h:78
uint32 GetRefCount() const
Definition VirtualTextureSpace.h:76
void AllocateTextures(FRDGBuilder &GraphBuilder)
Definition VirtualTextureSpace.cpp:242
Definition VirtualTextureSystem.h:108
static const uint32 LayersPerPageTableTexture
Definition VirtualTexturing.h:376
Definition Array.h:670
Definition EnumAsByte.h:22
Definition RefCounting.h:454
Definition VirtualTextureRecreate.cpp:16
Definition VirtualTextureSpace.h:17
uint8 bPrivateSpace
Definition VirtualTextureSpace.h:23
uint32 IndirectionTextureSize
Definition VirtualTextureSpace.h:26
uint32 TileBorderSize
Definition VirtualTextureSpace.h:19
uint8 bContinuousUpdate
Definition VirtualTextureSpace.h:24
uint32 TileSize
Definition VirtualTextureSpace.h:18
uint8 Dimensions
Definition VirtualTextureSpace.h:20
EVTPageTableFormat PageTableFormat
Definition VirtualTextureSpace.h:21
uint32 MaxSpaceSize
Definition VirtualTextureSpace.h:25
uint8 NumPageTableLayers
Definition VirtualTextureSpace.h:22
Definition VirtualTextureShared.h:11