UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AllocatedVirtualTexture.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"
7#include "RendererInterface.h"
8#include "VirtualTexturing.h"
11
16
18{
19public:
21 FRHICommandListBase& RHICmdList,
31
33
34 inline uint32 GetFrameAllocated() const { return FrameAllocated; }
35
36 void AssignVirtualAddress(uint32 vAddress);
37
38 void LockOrUnlockTiles(FVirtualTextureSystem* InSystem, bool bLock) const;
39
40 // begin IAllocatedVirtualTexture
41 virtual uint32 GetPersistentHash() const override { return PersistentHash; }
42 virtual uint32 GetNumPageTableTextures() const override;
44 virtual FRHITexture* GetPageTableIndirectionTexture() const override;
45 virtual uint32 GetPhysicalTextureSize(uint32 InLayerIndex) const override;
46 virtual FRHITexture* GetPhysicalTexture(uint32 InLayerIndex) const override;
47 virtual FRHIShaderResourceView* GetPhysicalTextureSRV(uint32 InLayerIndex, bool bSRGB) const override;
48 virtual void GetPackedPageTableUniform(FUintVector4* OutUniform) const override;
49 virtual void GetPackedUniform(FUintVector4* OutUniform, uint32 LayerIndex) const override;
50 virtual void Destroy(FVirtualTextureSystem* InSystem) override;
51 virtual bool TryMapLockedTiles(FVirtualTextureSystem* InSystem) const override;
52 // end IAllocatedVirtualTexture
53
54 inline uint32 GetNumUniqueProducers() const { return UniqueProducers.Num(); }
55 inline const FVirtualTextureProducerHandle& GetUniqueProducerHandle(uint32 InProducerIndex) const { return UniqueProducers[InProducerIndex].Handle; }
56 inline uint8 GetUniqueProducerMipBias(uint32 InProducerIndex) const { return UniqueProducers[InProducerIndex].MipBias; }
57
58 inline uint32 GetNumPageTableLayers() const { return UniquePageTableLayers.Num(); }
59 inline FVirtualTexturePhysicalSpace* GetPhysicalSpaceForPageTableLayer(uint32 InLayerIndex) const { return UniquePageTableLayers[InLayerIndex].PhysicalSpace; }
60 inline uint32 GetProducerIndexForPageTableLayer(uint32 InLayerIndex) const { return UniquePageTableLayers[InLayerIndex].UniqueProducerIndex; }
61 inline uint32 GetProducerTextureLayerMaskForPageTableLayer(uint32 InLayerIndex) const { return UniquePageTableLayers[InLayerIndex].ProducerTextureLayerMask; }
62 inline uint32 GetProducerPhysicalGroupIndexForPageTableLayer(uint32 InLayerIndex) const { return UniquePageTableLayers[InLayerIndex].ProducerPhysicalGroupIndex; }
63
64private:
65 uint32 CalculatePersistentHash(FAllocatedVTDescription const& InDesc, FVirtualTextureProducer* const* InProducers) const;
68 uint32 GetResidencyMipMapBiasGroup() const;
69
70 uint32 FrameAllocated;
71 uint32 PersistentHash;
72
74
75 // Unique producers in this AllocatedVT.
76 struct FProducerDesc
77 {
79 uint8 MipBias;
80 };
81 TArray<FProducerDesc> UniqueProducers;
82
83 // Unique page table layers in this AllocatedVT.
84 // We create a page table layer for each physical space group in each producer.
85 struct FPageTableLayerDesc
86 {
88 uint8 UniqueProducerIndex;
89 uint8 ProducerPhysicalGroupIndex;
90 uint16 ProducerTextureLayerMask;
91 uint8 TextureLayerCount;
92 };
93 TArray<FPageTableLayerDesc> UniquePageTableLayers;
94
95 // Texture layers in this AllocatedVT.
96 // Each texture layer maps onto one page table layer.
97 // Each texture layer needs a unique index within the page table layer to describe the unique physical texture it references.
98 struct FTextureLayerDesc
99 {
100 uint8 UniquePageTableLayerIndex;
101 uint8 PhysicalTextureIndex;
102 };
103 FTextureLayerDesc TextureLayers[VIRTUALTEXTURE_SPACE_MAXLAYERS];
104
105 // The fallback color to use on each texture layer when unmapped.
106 // This is stored as linear UNorm instead of full FLinearColor since that is what the shader uses.
107 // That means that HDR formats will be clamped.
108 uint32 FallbackColorPerTextureLayer[VIRTUALTEXTURE_SPACE_MAXLAYERS];
109};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#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 AllocatedVirtualTexture.h:18
uint32 GetNumPageTableLayers() const
Definition AllocatedVirtualTexture.h:58
virtual ~FAllocatedVirtualTexture()
Definition AllocatedVirtualTexture.cpp:109
virtual void GetPackedPageTableUniform(FUintVector4 *OutUniform) const override
Definition AllocatedVirtualTexture.cpp:474
virtual uint32 GetNumPageTableTextures() const override
Definition AllocatedVirtualTexture.cpp:404
virtual FRHIShaderResourceView * GetPhysicalTextureSRV(uint32 InLayerIndex, bool bSRGB) const override
Definition AllocatedVirtualTexture.cpp:445
uint32 GetNumUniqueProducers() const
Definition AllocatedVirtualTexture.h:54
virtual bool TryMapLockedTiles(FVirtualTextureSystem *InSystem) const override
Definition AllocatedVirtualTexture.cpp:245
virtual uint32 GetPhysicalTextureSize(uint32 InLayerIndex) const override
Definition AllocatedVirtualTexture.cpp:419
void AssignVirtualAddress(uint32 vAddress)
Definition AllocatedVirtualTexture.cpp:113
virtual FRHITexture * GetPhysicalTexture(uint32 InLayerIndex) const override
Definition AllocatedVirtualTexture.cpp:429
FVirtualTexturePhysicalSpace * GetPhysicalSpaceForPageTableLayer(uint32 InLayerIndex) const
Definition AllocatedVirtualTexture.h:59
virtual void GetPackedUniform(FUintVector4 *OutUniform, uint32 LayerIndex) const override
Definition AllocatedVirtualTexture.cpp:519
virtual FRHITexture * GetPageTableIndirectionTexture() const override
Definition AllocatedVirtualTexture.cpp:414
uint32 GetProducerTextureLayerMaskForPageTableLayer(uint32 InLayerIndex) const
Definition AllocatedVirtualTexture.h:61
uint8 GetUniqueProducerMipBias(uint32 InProducerIndex) const
Definition AllocatedVirtualTexture.h:56
uint32 GetFrameAllocated() const
Definition AllocatedVirtualTexture.h:34
uint32 GetProducerPhysicalGroupIndexForPageTableLayer(uint32 InLayerIndex) const
Definition AllocatedVirtualTexture.h:62
uint32 GetProducerIndexForPageTableLayer(uint32 InLayerIndex) const
Definition AllocatedVirtualTexture.h:60
const FVirtualTextureProducerHandle & GetUniqueProducerHandle(uint32 InProducerIndex) const
Definition AllocatedVirtualTexture.h:55
virtual FRHITexture * GetPageTableTexture(uint32 InPageTableIndex) const override
Definition AllocatedVirtualTexture.cpp:409
void LockOrUnlockTiles(FVirtualTextureSystem *InSystem, bool bLock) const
Definition AllocatedVirtualTexture.cpp:192
virtual uint32 GetPersistentHash() const override
Definition AllocatedVirtualTexture.h:41
Definition RHICommandList.h:455
Definition RHIResources.h:3304
Definition RHIResources.h:2153
Definition VirtualTexturePhysicalSpace.h:86
Definition VirtualTextureProducer.h:15
Definition VirtualTextureSpace.h:48
Definition VirtualTextureSystem.h:108
Definition VirtualTexturing.h:374
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition RefCounting.h:454
Definition VirtualTexturing.h:69
Definition VirtualTexturing.h:33