UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RenderResource.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 RenderResource.h: Render resource definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "RHIFwd.h"
10#include "RHIShaderPlatform.h"
11#include "RHIFeatureLevel.h"
12#include "RenderTimer.h"
13#include "CoreGlobals.h"
14
18
20{
21 Default,
23 Deleted,
24};
25
27{
28 Disabled,
29 Enabled,
31};
32
37{
38public:
40
42 enum class EInitPhase : uint8
43 {
44 Pre,
45 Default,
46 MAX
47 };
48
51
54
57
60
62
65
68
74
77
83 virtual void InitRHI(FRHICommandListBase& RHICmdList) {}
84
90 virtual void ReleaseRHI() {}
91
96 RENDERCORE_API virtual void InitResource(FRHICommandListBase& RHICmdList);
97
102 RENDERCORE_API virtual void ReleaseResource();
103
109
111 virtual FString GetFriendlyName() const { return TEXT("undefined"); }
112
113 // Accessors.
114 inline bool IsInitialized() const { return ListIndex != INDEX_NONE; }
115
116 int32 GetListIndex() const { return ListIndex; }
117 EInitPhase GetInitPhase() const { return InitPhase; }
118
121 {
122#if RHI_ENABLE_RESOURCE_INFO
123 OwnerName = InOwnerName;
124#endif
125 }
126
128 {
129#if RHI_ENABLE_RESOURCE_INFO
130 return OwnerName;
131#else
132 return NAME_None;
133#endif
134 }
135
137 {
138#if RHI_ENABLE_RESOURCE_INFO
139 ResourceName = InResourceName;
140#endif
141 }
142
144 {
145#if RHI_ENABLE_RESOURCE_INFO
146 return ResourceName;
147#else
148 return NAME_None;
149#endif
150 }
151
152protected:
153 // This is used during mobile editor preview refactor, this will eventually be replaced with a parameter to InitRHI() etc..
155 const FStaticFeatureLevel GetFeatureLevel() const { return FeatureLevel == ERHIFeatureLevel::Num ? FStaticFeatureLevel(GMaxRHIFeatureLevel) : FeatureLevel; }
156 inline bool HasValidFeatureLevel() const { return FeatureLevel < ERHIFeatureLevel::Num; }
157
158 // Helper for submitting a resource array to RHI and freeing eligible CPU memory
159 template<typename T>
161 {
163
165 if (ResourceCount != 0)
166 {
167 Buffer = CreateRHIBufferInternal(RHICmdList, InDebugName, GetOwnerName(), ResourceCount, InBufferUsageFlags, ResourceArray, InOutResourceObject == nullptr);
168 }
169
170 // If the buffer creation emptied the resource array, delete the containing structure as well
171 if (ShouldFreeResourceObject(InOutResourceObject, ResourceArray))
172 {
173 delete InOutResourceObject;
174 InOutResourceObject = nullptr;
175 }
176
177 return Buffer;
178 }
179
181
188
189private:
190 static RENDERCORE_API bool ShouldFreeResourceObject(void* ResourceObject, FResourceArrayInterface* ResourceArray);
191 static RENDERCORE_API FBufferRHIRef CreateRHIBufferInternal(
192 FRHICommandListBase& RHICmdList,
193 const TCHAR* InDebugName,
194 const FName& InOwnerName,
199 );
200
201#if RHI_ENABLE_RESOURCE_INFO
202 FName OwnerName;
203 FName ResourceName;
204#endif
205
206 int32 ListIndex;
209
210public:
212};
213
218extern RENDERCORE_API void BeginInitResource(FRenderResource* Resource, FRenderCommandPipe* RenderCommandPipe = nullptr);
219
220inline void BeginInitResource(FName OwnerName, FRenderResource* Resource, FRenderCommandPipe* RenderCommandPipe = nullptr)
221{
222#if RHI_ENABLE_RESOURCE_INFO
223 Resource->SetOwnerName(OwnerName);
224#endif
225
226 BeginInitResource(Resource, RenderCommandPipe);
227}
228
233extern RENDERCORE_API void BeginUpdateResourceRHI(FRenderResource* Resource, FRenderCommandPipe* RenderCommandPipe = nullptr);
234
239extern RENDERCORE_API void BeginReleaseResource(FRenderResource* Resource, FRenderCommandPipe* RenderCommandPipe = nullptr);
240
246
252
258
266
282
285
288
293{
296 : TotalMipCount(0.0f)
297 , MipCountDelta(0.0f)
298 , StartTime(0.0f)
299 , MipCountFadingRate(0.0f)
300 , BiasOffset(0.0f)
301 {
302 }
303
306
309
312
315
318
326 RENDERCORE_API void SetNewMipCount( float ActualMipCount, float TargetMipCount, double LastRenderTime, EMipFadeSettings FadeSetting );
327
332 inline float CalcMipBias() const
333 {
335 float TimeFactor = FMath::Min<float>(DeltaTime * MipCountFadingRate, 1.0f);
336 float MipBias = BiasOffset - MipCountDelta*TimeFactor;
337 return FMath::FloatSelect(GEnableMipLevelFading, MipBias, 0.0f);
338 }
339
344 inline bool IsFading( ) const
345 {
347 float TimeFactor = DeltaTime * MipCountFadingRate;
348 return (FMath::Abs<float>(MipCountDelta) > UE_SMALL_NUMBER && TimeFactor < 1.0f);
349 }
350};
351
354{
355public:
356
359
362
365
367 mutable double LastRenderTime = -FLT_MAX;
368
371
376 bool bGreyScaleFormat = false;
377
386 //UE_DEPRECATED(5.5,"bIgnoreGammaConversions should not be used")
388
392 bool bSRGB = false;
393
400
402
404 RENDERCORE_API virtual uint32 GetSizeX() const;
405
407 RENDERCORE_API virtual uint32 GetSizeY() const;
408
410 RENDERCORE_API virtual uint32 GetSizeZ() const;
411
412 // FRenderResource interface.
413 RENDERCORE_API virtual void ReleaseRHI() override;
414 RENDERCORE_API virtual FString GetFriendlyName() const override;
415
416protected:
418};
419
432
435{
436public:
439
440private:
442 bool bInitialized_GameThread;
443
444public:
447
448 // Destructor
450
452 RENDERCORE_API double GetLastRenderTime() const;
453
456
458 bool IsInitialized_GameThread() const { return bInitialized_GameThread; }
459
462
465
466 // FRenderResource interface.
467 RENDERCORE_API virtual void InitRHI(FRHICommandListBase& RHICmdList);
468 RENDERCORE_API virtual void ReleaseRHI();
469 RENDERCORE_API virtual FString GetFriendlyName() const;
470};
471
474{
475public:
480
481 // FRenderResource interface.
482 RENDERCORE_API virtual void ReleaseRHI() override;
483 RENDERCORE_API virtual FString GetFriendlyName() const override;
484
485 const FBufferRHIRef& GetRHI() const { return VertexBufferRHI; }
486
487 RENDERCORE_API void SetRHI(const FBufferRHIRef& BufferRHI);
488
490};
491
506
509{
510public:
515
516 // FRenderResource interface.
517 RENDERCORE_API virtual void ReleaseRHI() override;
518 RENDERCORE_API virtual FString GetFriendlyName() const override;
519
520 const FBufferRHIRef& GetRHI() const { return IndexBufferRHI; }
521
522 RENDERCORE_API void SetRHI(const FBufferRHIRef& BufferRHI);
523
525};
526
539
541template<class ResourceType, FRenderResource::EInitPhase InInitPhase = FRenderResource::EInitPhase::Default>
542class TGlobalResource : public ResourceType
543{
544public:
547 {
548 InitGlobalResource();
549 }
550
552 template<typename... Args>
553 explicit TGlobalResource(Args... InArgs)
554 : ResourceType(InArgs...)
555 {
556 InitGlobalResource();
557 }
558
561 {
562 ReleaseGlobalResource();
563 }
564
565private:
566
570 void InitGlobalResource()
571 {
572 ResourceType::SetInitPhase(InInitPhase);
573
575 {
576 // If the resource is constructed in the rendering thread, directly initialize it.
577 ((ResourceType*)this)->InitResource(FRenderResource::GetImmediateCommandList());
578 }
579 else
580 {
581 // If the resource is constructed outside of the rendering thread, enqueue a command to initialize it.
582 BeginInitResource((ResourceType*)this);
583 }
584 }
585
589 void ReleaseGlobalResource()
590 {
591 // This should be called in the rendering thread, or at shutdown when the rendering thread has exited.
592 // However, it may also be called at shutdown after an error, when the rendering thread is still running.
593 // To avoid a second error in that case we don't assert.
594#if 0
596#endif
597
598 // Cleanup the resource.
599 ((ResourceType*)this)->ReleaseResource();
600 }
601};
602
605{
610
615
616private:
617 FName PreviousName;
618};
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RESTRICT
Definition Platform.h:706
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EBufferUsageFlags
Definition RHIDefinitions.h:892
ERHIFeatureLevel::Type GMaxRHIFeatureLevel
Definition RHI.cpp:1338
FRenderTimer GRenderingRealtimeClock
Definition RenderCore.cpp:241
RENDERCORE_API void ReleaseResourceAndFlush(FRenderResource *Resource)
Definition RenderResource.cpp:383
RENDERCORE_API FMipFadeSettings GMipFadeSettings[MipFade_NumSettings]
Definition RenderResource.cpp:625
RENDERCORE_API void EndBatchedRelease()
Definition RenderResource.cpp:362
ERayTracingMode
Definition RenderResource.h:27
RENDERCORE_API void BeginUpdateResourceRHI(FRenderResource *Resource, FRenderCommandPipe *RenderCommandPipe=nullptr)
Definition RenderResource.cpp:302
RENDERCORE_API void StartBatchedRelease()
Definition RenderResource.cpp:357
RENDERCORE_API void BeginReleaseResource(FRenderResource *Resource, FRenderCommandPipe *RenderCommandPipe=nullptr)
Definition RenderResource.cpp:369
RENDERCORE_API void BeginInitResource(FRenderResource *Resource, FRenderCommandPipe *RenderCommandPipe=nullptr)
Definition RenderResource.cpp:293
ERenderResourceState
Definition RenderResource.h:20
RENDERCORE_API float GEnableMipLevelFading
Definition RenderResource.cpp:19
EMipFadeSettings
Definition RenderResource.h:260
@ MipFade_NumSettings
Definition RenderResource.h:264
@ MipFade_Slow
Definition RenderResource.h:262
@ MipFade_Normal
Definition RenderResource.h:261
CORE_API bool IsInRenderingThread()
Definition ThreadingBase.cpp:273
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RenderResource.h:528
RENDERCORE_API FBufferWithRDG & operator=(const FBufferWithRDG &Other)
RENDERCORE_API void ReleaseRHI() override
Definition RenderResource.cpp:614
RENDERCORE_API ~FBufferWithRDG() override
TRefCountPtr< FRDGPooledBuffer > Buffer
Definition RenderResource.h:537
RENDERCORE_API FBufferWithRDG()
RENDERCORE_API FBufferWithRDG(const FBufferWithRDG &Other)
Definition RenderResource.h:509
virtual RENDERCORE_API FString GetFriendlyName() const override
Definition RenderResource.cpp:597
RENDERCORE_API void SetRHI(const FBufferRHIRef &BufferRHI)
Definition RenderResource.cpp:602
RENDERCORE_API FIndexBuffer()
RENDERCORE_API FIndexBuffer & operator=(const FIndexBuffer &Other)
FBufferRHIRef IndexBufferRHI
Definition RenderResource.h:524
virtual RENDERCORE_API ~FIndexBuffer()
const FBufferRHIRef & GetRHI() const
Definition RenderResource.h:520
RENDERCORE_API FIndexBuffer(const FIndexBuffer &)
virtual RENDERCORE_API void ReleaseRHI() override
Definition RenderResource.cpp:592
Definition NameTypes.h:617
Definition RenderGraphResources.h:1196
Definition RHICommandList.h:455
Definition RHIResources.h:671
Definition RenderingThread.h:652
Definition RenderResource.h:37
virtual FString GetFriendlyName() const
Definition RenderResource.h:111
RENDERCORE_API FRenderResource(FRenderResource &&)
virtual void ReleaseRHI()
Definition RenderResource.h:90
virtual RENDERCORE_API void ReleaseResource()
Definition RenderResource.cpp:206
RENDERCORE_API FRenderResource()
Definition RenderResource.cpp:233
FName GetOwnerName() const
Definition RenderResource.h:127
ERenderResourceState ResourceState
Definition RenderResource.h:211
void SetOwnerName(FName InOwnerName)
Definition RenderResource.h:120
virtual void InitRHI(FRHICommandListBase &RHICmdList)
Definition RenderResource.h:83
void SetResourceName(FName InResourceName)
Definition RenderResource.h:136
void SetFeatureLevel(const FStaticFeatureLevel InFeatureLevel)
Definition RenderResource.h:154
FBufferRHIRef CreateRHIBuffer(FRHICommandListBase &RHICmdList, T &InOutResourceObject, uint32 ResourceCount, EBufferUsageFlags InBufferUsageFlags, const TCHAR *InDebugName)
Definition RenderResource.h:160
RENDERCORE_API FRenderResource & operator=(const FRenderResource &Other)
FName GetResourceName() const
Definition RenderResource.h:143
static RENDERCORE_API FRHICommandListBase & GetImmediateCommandList()
Definition RenderResource.cpp:173
bool IsInitialized() const
Definition RenderResource.h:114
static RENDERCORE_API void ReleaseRHIForAllResources()
Definition RenderResource.cpp:116
static RENDERCORE_API FName SetScopeName(FName Name)
Definition RenderResource.cpp:166
bool HasValidFeatureLevel() const
Definition RenderResource.h:156
EInitPhase GetInitPhase() const
Definition RenderResource.h:117
EInitPhase
Definition RenderResource.h:43
int32 GetListIndex() const
Definition RenderResource.h:116
RENDERCORE_API FRenderResource(const FRenderResource &)
virtual RENDERCORE_API ~FRenderResource()
Definition RenderResource.cpp:250
void SetInitPhase(EInitPhase InInitPhase)
Definition RenderResource.h:182
static RENDERCORE_API void ChangeFeatureLevel(ERHIFeatureLevel::Type NewFeatureLevel)
Definition RenderResource.cpp:145
RENDERCORE_API void UpdateRHI(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:225
static RENDERCORE_API void InitPreRHIResources()
Definition RenderResource.cpp:124
virtual RENDERCORE_API void InitResource(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:178
const FStaticFeatureLevel GetFeatureLevel() const
Definition RenderResource.h:155
RENDERCORE_API FRenderResource & operator=(FRenderResource &&Other)
float GetCurrentTime() const
Definition RenderTimer.h:21
Definition ResourceArray.h:77
Definition RenderResource.h:435
RENDERCORE_API void InvalidateLastRenderTime()
Definition RenderResource.cpp:518
virtual RENDERCORE_API void ReleaseRHI()
Definition RenderResource.cpp:538
bool IsInitialized_GameThread() const
Definition RenderResource.h:458
virtual RENDERCORE_API ~FTextureReference()
Definition RenderResource.cpp:492
FTextureReferenceRHIRef TextureReferenceRHI
Definition RenderResource.h:438
RENDERCORE_API void BeginRelease_GameThread()
Definition RenderResource.cpp:502
RENDERCORE_API FTextureReference()
Definition RenderResource.cpp:487
virtual RENDERCORE_API FString GetFriendlyName() const
Definition RenderResource.cpp:543
virtual RENDERCORE_API void InitRHI(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:526
RENDERCORE_API void BeginInit_GameThread()
Definition RenderResource.cpp:496
RENDERCORE_API double GetLastRenderTime() const
Definition RenderResource.cpp:508
Definition RenderResource.h:422
virtual RENDERCORE_API ~FTextureWithSRV()
virtual RENDERCORE_API void ReleaseRHI() override
Definition RenderResource.cpp:478
FShaderResourceViewRHIRef ShaderResourceViewRHI
Definition RenderResource.h:430
RENDERCORE_API FTextureWithSRV()
Definition RenderResource.h:354
RENDERCORE_API FTexture & operator=(const FTexture &Other)
virtual RENDERCORE_API uint32 GetSizeZ() const
Definition RenderResource.cpp:435
virtual RENDERCORE_API void ReleaseRHI() override
Definition RenderResource.cpp:440
FMipBiasFade MipBiasFade
Definition RenderResource.h:370
bool bIgnoreGammaConversions
Definition RenderResource.h:387
FSamplerStateRHIRef DeferredPassSamplerStateRHI
Definition RenderResource.h:364
RENDERCORE_API FTexture(FTexture &&)
virtual RENDERCORE_API uint32 GetSizeX() const
Definition RenderResource.cpp:425
virtual RENDERCORE_API uint32 GetSizeY() const
Definition RenderResource.cpp:430
FTextureRHIRef TextureRHI
Definition RenderResource.h:358
static RENDERCORE_API FRHISamplerState * GetOrCreateSamplerState(const FSamplerStateInitializerRHI &Initializer)
Definition RenderResource.cpp:452
FSamplerStateRHIRef SamplerStateRHI
Definition RenderResource.h:361
RENDERCORE_API FTexture(const FTexture &)
bool bSRGB
Definition RenderResource.h:392
const FTextureRHIRef & GetTextureRHI()
Definition RenderResource.h:401
RENDERCORE_API FTexture()
virtual RENDERCORE_API FString GetFriendlyName() const override
Definition RenderResource.cpp:447
double LastRenderTime
Definition RenderResource.h:367
bool bGreyScaleFormat
Definition RenderResource.h:376
virtual RENDERCORE_API ~FTexture()
RENDERCORE_API FTexture & operator=(FTexture &&Other)
Definition RenderResource.h:493
FShaderResourceViewRHIRef ShaderResourceViewRHI
Definition RenderResource.h:501
FUnorderedAccessViewRHIRef UnorderedAccessViewRHI
Definition RenderResource.h:504
RENDERCORE_API ~FVertexBufferWithSRV()
RENDERCORE_API FVertexBufferWithSRV()
virtual RENDERCORE_API void ReleaseRHI() override
Definition RenderResource.cpp:577
Definition RenderResource.h:474
FBufferRHIRef VertexBufferRHI
Definition RenderResource.h:489
virtual RENDERCORE_API ~FVertexBuffer()
virtual RENDERCORE_API void ReleaseRHI() override
Definition RenderResource.cpp:556
RENDERCORE_API FVertexBuffer(const FVertexBuffer &)
RENDERCORE_API FVertexBuffer & operator=(const FVertexBuffer &Other)
RENDERCORE_API FVertexBuffer()
RENDERCORE_API void SetRHI(const FBufferRHIRef &BufferRHI)
Definition RenderResource.cpp:566
const FBufferRHIRef & GetRHI() const
Definition RenderResource.h:485
virtual RENDERCORE_API FString GetFriendlyName() const override
Definition RenderResource.cpp:561
Definition EnumAsByte.h:22
Definition RenderResource.h:543
TGlobalResource()
Definition RenderResource.h:546
TGlobalResource(Args... InArgs)
Definition RenderResource.h:553
virtual ~TGlobalResource()
Definition RenderResource.h:560
Type
Definition RHIFeatureLevel.h:20
@ Num
Definition RHIFeatureLevel.h:54
Definition RenderResource.h:293
bool IsFading() const
Definition RenderResource.h:344
float MipCountDelta
Definition RenderResource.h:308
float BiasOffset
Definition RenderResource.h:317
float StartTime
Definition RenderResource.h:311
float CalcMipBias() const
Definition RenderResource.h:332
float TotalMipCount
Definition RenderResource.h:305
FMipBiasFade()
Definition RenderResource.h:295
RENDERCORE_API void SetNewMipCount(float ActualMipCount, float TargetMipCount, double LastRenderTime, EMipFadeSettings FadeSetting)
Definition RenderResource.cpp:641
float MipCountFadingRate
Definition RenderResource.h:314
Definition RenderResource.h:269
float FadeOutSpeed
Definition RenderResource.h:280
FMipFadeSettings(float InFadeInSpeed, float InFadeOutSpeed)
Definition RenderResource.h:270
float FadeInSpeed
Definition RenderResource.h:277
Definition RenderResource.h:605
FRenderResourceNameScope(FName Name)
Definition RenderResource.h:606
~FRenderResourceNameScope()
Definition RenderResource.h:611
Definition RHI.h:232
Definition AndroidStaticFeatureLevel.inl:12