UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VirtualTexturePhysicalSpace.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
8#include "RendererInterface.h"
9#include "TexturePagePool.h"
11#include "VirtualTexturing.h"
12
14
25
27{
28 if (Lhs.TileSize != Rhs.TileSize ||
29 Lhs.NumLayers != Rhs.NumLayers ||
30 Lhs.Dimensions != Rhs.Dimensions ||
31 Lhs.bCanSplit != Rhs.bCanSplit)
32 {
33 return false;
34 }
35 for (int32 Layer = 0; Layer < Lhs.NumLayers; ++Layer)
36 {
37 if (Lhs.Format[Layer] != Rhs.Format[Layer])
38 {
39 return false;
40 }
41
42 if (Lhs.bHasLayerSrgbView[Layer] != Rhs.bHasLayerSrgbView[Layer])
43 {
44 return false;
45 }
46
47 }
48 return true;
49}
51{
52 return !operator==(Lhs, Rhs);
53}
54
56{
57 uint32 Hash = Desc.TileSize;
61 for (int32 Layer = 0; Layer < Desc.NumLayers; ++Layer)
62 {
63 Hash = HashCombine(Hash, GetTypeHash(Desc.Format[Layer]));
65 }
66 return Hash;
67}
68
77
79{
80 return Lhs.TileWidthHeight == Rhs.TileWidthHeight && Lhs.PoolCount == Rhs.PoolCount &&
81 Lhs.bEnableResidencyMipMapBias == Rhs.bEnableResidencyMipMapBias && Lhs.ResidencyMipMapBiasGroup == Rhs.ResidencyMipMapBiasGroup;
82}
83
86{
87public:
90
91 inline const FVTPhysicalSpaceDescription& GetDescription() const { return Description; }
92 inline const FVTPhysicalSpaceDescriptionExt& GetDescriptionExt() const { return DescriptionExt; }
93 inline const FString& GetFormatString() const { return FormatString; }
94 inline EPixelFormat GetFormat(int32 Layer) const { return Description.Format[Layer]; }
95 inline uint16 GetID() const { return ID; }
96 inline uint32 GetSizeInTiles() const { return DescriptionExt.TileWidthHeight; }
97 inline uint32 GetNumTiles() const { return GetSizeInTiles() * GetSizeInTiles(); }
98 inline uint32 GetTextureSize() const { return GetSizeInTiles() * Description.TileSize; }
99 inline FIntVector GetPhysicalLocation(uint16 pAddress) const { return FIntVector(pAddress % GetSizeInTiles(), pAddress / GetSizeInTiles(), 0); }
100
101 // 16bit page tables allocate 6bits to address TileX/Y, so can only address tiles from 0-63
102 inline bool DoesSupport16BitPageTable() const { return GetSizeInTiles() <= 64u; }
103
105 uint32 GetSizeInBytes() const;
106
107 inline const FTexturePagePool& GetPagePool() const { return Pool; }
108 inline FTexturePagePool& GetPagePool() { return Pool; }
109
110 // FRenderResource interface
111 virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
112 virtual void ReleaseRHI() override;
113
114 // RefCount for TRefCountPtr management of physical space.
115 // Both producers and allocated VT keep references to keep a physical space alive.
116 inline uint32 AddRef() { return ++NumRefs; }
117 inline uint32 Release() { check(NumRefs > 0u); return --NumRefs; }
118 inline uint32 GetRefCount() const { return NumRefs; }
119
120 // RefCount for tracking allocated VT references only.
121 // We only allocate underlying physical texture when referenced from an allocated VT.
122 inline uint32 AddResourceRef() { return ++NumResourceRefs; }
123 inline uint32 ReleaseResourceRef() { check(NumResourceRefs > 0u); return --NumResourceRefs; }
124 inline uint32 GetResourceRefCount() const { return NumResourceRefs; }
125
127 {
128 return PooledRenderTarget[Layer];
129 }
130
131 inline FRHIShaderResourceView* GetPhysicalTextureSRV(int32 Layer, bool bSRGB) const
132 {
133 return bSRGB ? TextureSRV_SRGB[Layer] : TextureSRV[Layer];
134 }
135
138
142 inline float GetResidencyMipMapBias() const { return ResidencyMipMapBias; }
144 inline uint32 GetLastFrameOversubscribed() const { return LastFrameOversubscribed; }
146 void DrawResidencyGraph(class FCanvas* Canvas, FBox2D CanvasPosition, bool bDrawKey);
148 void UpdateCsvStats() const;
149
150private:
151 FVTPhysicalSpaceDescription Description;
152 FVTPhysicalSpaceDescriptionExt DescriptionExt;
153 FString FormatString;
154 FTexturePagePool Pool;
158 FString PooledRenderTargetDebugNames[VIRTUALTEXTURE_SPACE_MAXLAYERS];
159
160 uint16 ID;
161 uint32 NumRefs;
162 uint32 NumResourceRefs;
163
164 float ResidencyMipMapBias;
165 uint32 LastFrameOversubscribed;
166
167#if !UE_BUILD_SHIPPING
168 static const int32 HistorySize = 512;
169 TCircularBuffer<float> VisibleHistory;
170 TCircularBuffer<float> LockedHistory;
171 TCircularBuffer<float> MipMapBiasHistory;
172 uint32 HistoryIndex;
173#endif
174};
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FInt32Vector3 FIntVector
Definition MathFwd.h:115
EPixelFormat
Definition PixelFormat.h:16
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
bool operator!=(const FVTPhysicalSpaceDescription &Lhs, const FVTPhysicalSpaceDescription &Rhs)
Definition VirtualTexturePhysicalSpace.h:50
uint32 GetTypeHash(const FVTPhysicalSpaceDescription &Desc)
Definition VirtualTexturePhysicalSpace.h:55
bool operator==(const FVTPhysicalSpaceDescription &Lhs, const FVTPhysicalSpaceDescription &Rhs)
Definition VirtualTexturePhysicalSpace.h:26
#define VIRTUALTEXTURE_SPACE_MAXLAYERS
Definition VirtualTexturing.h:57
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 CanvasTypes.h:211
Definition RenderGraphBuilder.h:49
Definition RenderGraphUtils.h:1272
Definition RHICommandList.h:455
Definition RHIResources.h:3304
Definition RenderResource.h:37
Definition TexturePagePool.h:24
Definition VirtualTexturePhysicalSpace.h:86
void FinalizeTextures(FRDGBuilder &GraphBuilder, FRDGExternalAccessQueue &ExternalAccessQueue)
Definition VirtualTexturePhysicalSpace.cpp:208
FTexturePagePool & GetPagePool()
Definition VirtualTexturePhysicalSpace.h:108
const FVTPhysicalSpaceDescription & GetDescription() const
Definition VirtualTexturePhysicalSpace.h:91
virtual ~FVirtualTexturePhysicalSpace()
Definition VirtualTexturePhysicalSpace.cpp:111
const FVTPhysicalSpaceDescriptionExt & GetDescriptionExt() const
Definition VirtualTexturePhysicalSpace.h:92
uint32 ReleaseResourceRef()
Definition VirtualTexturePhysicalSpace.h:123
bool DoesSupport16BitPageTable() const
Definition VirtualTexturePhysicalSpace.h:102
float GetResidencyMipMapBias() const
Definition VirtualTexturePhysicalSpace.h:142
uint32 GetTextureSize() const
Definition VirtualTexturePhysicalSpace.h:98
uint32 GetTileSizeInBytes() const
Definition VirtualTexturePhysicalSpace.cpp:220
uint32 AddRef()
Definition VirtualTexturePhysicalSpace.h:116
void UpdateResidencyTracking(uint32 Frame)
Definition VirtualTexturePhysicalSpace.cpp:242
FIntVector GetPhysicalLocation(uint16 pAddress) const
Definition VirtualTexturePhysicalSpace.h:99
uint16 GetID() const
Definition VirtualTexturePhysicalSpace.h:95
virtual void InitRHI(FRHICommandListBase &RHICmdList) override
Definition VirtualTexturePhysicalSpace.cpp:145
uint32 GetSizeInBytes() const
Definition VirtualTexturePhysicalSpace.cpp:231
void DrawResidencyGraph(class FCanvas *Canvas, FBox2D CanvasPosition, bool bDrawKey)
Definition VirtualTexturePhysicalSpace.cpp:288
uint32 GetSizeInTiles() const
Definition VirtualTexturePhysicalSpace.h:96
FRHIShaderResourceView * GetPhysicalTextureSRV(int32 Layer, bool bSRGB) const
Definition VirtualTexturePhysicalSpace.h:131
uint32 AddResourceRef()
Definition VirtualTexturePhysicalSpace.h:122
uint32 GetLastFrameOversubscribed() const
Definition VirtualTexturePhysicalSpace.h:144
EPixelFormat GetFormat(int32 Layer) const
Definition VirtualTexturePhysicalSpace.h:94
uint32 Release()
Definition VirtualTexturePhysicalSpace.h:117
TRefCountPtr< IPooledRenderTarget > GetPhysicalTexture(int32 Layer) const
Definition VirtualTexturePhysicalSpace.h:126
uint32 GetResourceRefCount() const
Definition VirtualTexturePhysicalSpace.h:124
virtual void ReleaseRHI() override
Definition VirtualTexturePhysicalSpace.cpp:196
const FTexturePagePool & GetPagePool() const
Definition VirtualTexturePhysicalSpace.h:107
uint32 GetNumTiles() const
Definition VirtualTexturePhysicalSpace.h:97
void UpdateCsvStats() const
Definition VirtualTexturePhysicalSpace.cpp:369
uint32 GetRefCount() const
Definition VirtualTexturePhysicalSpace.h:118
const FString & GetFormatString() const
Definition VirtualTexturePhysicalSpace.h:93
Definition CircularBuffer.h:18
Definition EnumAsByte.h:22
Definition RefCounting.h:454
static UE_STRING_CLASS Format(const FmtCharType *InFormatString, const PREPROCESSOR_JOIN(UE_STRING_CLASS, FormatNamedArguments)&InNamedArguments)
Definition UnrealString.h.inl:1465
Definition VirtualTexturePhysicalSpace.h:71
int32 ResidencyMipMapBiasGroup
Definition VirtualTexturePhysicalSpace.h:75
int32 TileWidthHeight
Definition VirtualTexturePhysicalSpace.h:72
bool bEnableResidencyMipMapBias
Definition VirtualTexturePhysicalSpace.h:74
int32 PoolCount
Definition VirtualTexturePhysicalSpace.h:73
Definition VirtualTexturePhysicalSpace.h:17
TEnumAsByte< EPixelFormat > Format[VIRTUALTEXTURE_SPACE_MAXLAYERS]
Definition VirtualTexturePhysicalSpace.h:21
bool bHasLayerSrgbView[VIRTUALTEXTURE_SPACE_MAXLAYERS]
Definition VirtualTexturePhysicalSpace.h:22
bool bCanSplit
Definition VirtualTexturePhysicalSpace.h:23
uint32 TileSize
Definition VirtualTexturePhysicalSpace.h:18
uint8 NumLayers
Definition VirtualTexturePhysicalSpace.h:20
uint8 Dimensions
Definition VirtualTexturePhysicalSpace.h:19