UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DynamicRenderScaling.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "Containers/List.h"
8#include "CoreMinimal.h"
9#include "CoreTypes.h"
10#include "HAL/IConsoleManager.h"
12#include "Stats/Stats.h"
13
15{
16
17template<typename Type>
18class TMap;
19
20/* Model how the GPU costs of a budget scales with a ResolutionFraction. */
22{
23 Unknown,
24
25 // GPU cost scales linearly to the ResolutionFraction
26 Linear,
27
28 // GPU cost scales quadratically to the ResolutionFraction
30};
31
32/* Represent an independent budget to dynamically scale by its own. */
34{
35 static constexpr float kDefaultMinResolutionFraction = 0.5f;
36 static constexpr float kDefaultMaxResolutionFraction = 1.0f;
37 static constexpr float kDefaultThrottlingMaxResolutionFraction = 0.0f;
38 static constexpr float kBudgetMsDisabled = 0.0f;
39 static constexpr float kDefaultChangeThreshold = 0.02f;
40 static constexpr float kDefaultTargetedHeadRoom = 0.05f;
41 static constexpr float kDefaultIncreaseAmortizationFactor = 0.9f;
42 static constexpr int32 kDefaultFractionQuantization = 0;
44
47
57
59 RENDERCORE_API bool IsEnabled() const;
60
62 RENDERCORE_API float GetTargetedMs(float BudgetMs) const;
63
65 RENDERCORE_API float EstimateCostScale(float ResolutionFraction) const;
66
69
72
75
78};
79
80
81/* Represent an independent budget to dynamically scale by its own. */
82class FBudget final
83{
84public:
85 RENDERCORE_API FBudget(const TCHAR* Name, FHeuristicSettings (*HeuristicSettingsGetter)(void));
87
88 /* Returns the global list of all dynamic resolution budgets. */
91
92 inline const TCHAR* GetName() const
93 {
94 return Name;
95 }
96
97 inline const char* GetAnsiName() const
98 {
99 return AnsiName.GetData();
100 }
101
102 /* Returns the settings of the heuristic for this budget. */
103 inline const FHeuristicSettings& GetSettings() const
104 {
105 return CachedSettings;
106 }
107
108 inline int32 GetBudgetId() const
109 {
110 return BudgetId;
111 }
112
113 inline bool operator == (const FBudget& Other) const
114 {
115 return BudgetId == Other.BudgetId;
116 }
117
118#if STATS
119 inline const TStatId& GetStatId_TargetMs() const
120 {
121 return StatId_TargetMs;
122 }
123
124 inline const TStatId& GetStatId_MeasuredMs() const
125 {
126 return StatId_MeasuredMs;
127 }
128
129 inline const TStatId& GetStatId_MinScaling() const
130 {
131 return StatId_MinScaling;
132 }
133
134 inline const TStatId& GetStatId_MaxScaling() const
135 {
136 return StatId_MaxScaling;
137 }
138
139 inline const TStatId& GetStatId_CurrentScaling() const
140 {
142 }
143#endif
144
145private:
146 const TCHAR* Name;
147 TArray<char> AnsiName;
148 FHeuristicSettings(*HeuristicSettingsGetter)(void);
149 TLinkedList<FBudget*> GlobalListLink;
150 FHeuristicSettings CachedSettings;
151 int32 BudgetId = 0;
152
153#if STATS
159#endif
160
161 UE_NONCOPYABLE(FBudget);
162
163 template<typename Type>
164 friend class TMap;
166};
167
168
169/* Map of FBudget -> <Type>. */
170template<typename Type>
171class TMap final
172{
173public:
174 static constexpr int32 kInlineAllocatedBudgets = 16;
175
177 {
178 Array.SetNum(FBudget::GetGlobalListSize());
179#if !UE_BUILD_SHIPPING
181 {
182 Array[BudgetIt->BudgetId].Name = BudgetIt->GetName();
183 }
184#endif
185 }
186
187 TMap(const Type& Value)
188 : TMap()
189 {
190 SetAll(Value);
191 }
192
193 TMap(const TMap<Type>& Map) = default;
194 ~TMap() = default;
195
196 inline void SetAll(const Type& Value)
197 {
198 Array.SetNum(FBudget::GetGlobalListSize());
199 for (int32 i = 0; i < Array.Num(); i++)
200 {
201 Array[i].Value = Value;
202 }
203 }
204
205 inline const Type& operator [](const FBudget& Budget) const
206 {
207 check(Array.Num() == FBudget::GetGlobalListSize());
208 return Array[Budget.BudgetId].Value;
209 }
210
211 inline Type& operator [](const FBudget& Budget)
212 {
213 check(Array.Num() == FBudget::GetGlobalListSize());
214 return Array[Budget.BudgetId].Value;
215 }
216
217 inline const Type& operator [](const int32 BudgetId) const
218 {
219 check(Array.Num() == FBudget::GetGlobalListSize());
220 return Array[BudgetId].Value;
221 }
222
223 inline Type& operator [](const int32 BudgetId)
224 {
225 check(Array.Num() == FBudget::GetGlobalListSize());
226 return Array[BudgetId].Value;
227 }
228
229private:
230 struct FItem
231 {
232#if !UE_BUILD_SHIPPING
233 const TCHAR* Name = nullptr;
234#endif
235 Type Value;
236 };
238};
239
240
241constexpr float FractionToPercentage(float Fraction)
242{
243 return Fraction * 100.0f;
244}
245
246constexpr float PercentageToFraction(float Percentage)
247{
248 return Percentage / 100.0f;
249}
250
252{
253 return PercentageToFraction(Percentage.GetValueOnAnyThread());
254}
255
258
261
264
267
270
271
272} // namespace DynamicRenderScaling
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ Percentage
Definition DynamicRenderScaling.h:83
const TCHAR * GetName() const
Definition DynamicRenderScaling.h:92
bool operator==(const FBudget &Other) const
Definition DynamicRenderScaling.h:113
friend RENDERCORE_API void UpdateHeuristicsSettings()
Definition DynamicRenderScaling.cpp:174
const FHeuristicSettings & GetSettings() const
Definition DynamicRenderScaling.h:103
int32 GetBudgetId() const
Definition DynamicRenderScaling.h:108
static RENDERCORE_API int32 GetGlobalListSize()
Definition DynamicRenderScaling.cpp:169
const char * GetAnsiName() const
Definition DynamicRenderScaling.h:97
static RENDERCORE_API TLinkedList< FBudget * > *& GetGlobalList()
Definition DynamicRenderScaling.cpp:162
RENDERCORE_API ~FBudget()
Definition DynamicRenderScaling.cpp:155
Definition DynamicRenderScaling.h:172
const Type & operator[](const FBudget &Budget) const
Definition DynamicRenderScaling.h:205
TMap(const TMap< Type > &Map)=default
static constexpr int32 kInlineAllocatedBudgets
Definition DynamicRenderScaling.h:174
TMap(const Type &Value)
Definition DynamicRenderScaling.h:187
TMap()
Definition DynamicRenderScaling.h:176
void SetAll(const Type &Value)
Definition DynamicRenderScaling.h:196
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
Definition IConsoleManager.h:1792
void Next()
Definition List.h:21
Definition List.h:55
Definition List.h:285
Definition UnrealString.h.inl:34
Definition DynamicRenderScaling.cpp:14
constexpr float FractionToPercentage(float Fraction)
Definition DynamicRenderScaling.h:241
void EndFrame()
Definition RenderGraphEvent.cpp:245
constexpr float PercentageToFraction(float Percentage)
Definition DynamicRenderScaling.h:246
float GetPercentageCVarToFraction(const TAutoConsoleVariable< float > &Percentage)
Definition DynamicRenderScaling.h:251
const TMap< uint64 > & GetLatestTimings()
Definition RenderGraphEvent.cpp:250
EHeuristicModel
Definition DynamicRenderScaling.h:22
bool IsSupported()
Definition RenderGraphEvent.cpp:234
void UpdateHeuristicsSettings()
Definition DynamicRenderScaling.cpp:174
const TCHAR * Name
Definition OodleDataCompression.cpp:30
Definition DynamicRenderScaling.h:34
float ThrottlingMaxResolutionFraction
Definition DynamicRenderScaling.h:50
RENDERCORE_API float EstimateCostScale(float ResolutionFraction) const
Definition DynamicRenderScaling.cpp:27
float MaxResolutionFraction
Definition DynamicRenderScaling.h:49
float IncreaseAmortizationFactor
Definition DynamicRenderScaling.h:54
int32 UpperBoundQuantization
Definition DynamicRenderScaling.h:56
static constexpr int32 kDefaultFractionQuantization
Definition DynamicRenderScaling.h:42
bool bModelScalesWithPrimaryScreenPercentage
Definition DynamicRenderScaling.h:46
float TargetedHeadRoom
Definition DynamicRenderScaling.h:53
RENDERCORE_API float CorrectNewResolutionFraction(float CurrentResolutionFraction, float NewResolutionFraction, float ResolutionFractionScale) const
Definition DynamicRenderScaling.cpp:64
static constexpr float kDefaultMaxResolutionFraction
Definition DynamicRenderScaling.h:36
EHeuristicModel Model
Definition DynamicRenderScaling.h:45
static constexpr float kDefaultIncreaseAmortizationFactor
Definition DynamicRenderScaling.h:41
static constexpr float kDefaultThrottlingMaxResolutionFraction
Definition DynamicRenderScaling.h:37
RENDERCORE_API float EstimateTimeFactor(float CurrentResolutionFraction, float NewResolutionFraction) const
Definition DynamicRenderScaling.cpp:103
RENDERCORE_API bool DoesResolutionChangeEnough(float CurrentResolutionFraction, float NewResolutionFraction, bool bCanChangeResolution) const
Definition DynamicRenderScaling.cpp:87
RENDERCORE_API float EstimateResolutionFactor(float TargetMs, float TimingMs) const
Definition DynamicRenderScaling.cpp:45
float MinResolutionFraction
Definition DynamicRenderScaling.h:48
RENDERCORE_API bool IsEnabled() const
Definition DynamicRenderScaling.cpp:16
static constexpr int32 kDefaultUpperBoundQuantization
Definition DynamicRenderScaling.h:43
RENDERCORE_API float GetTargetedMs(float BudgetMs) const
Definition DynamicRenderScaling.cpp:21
float BudgetMs
Definition DynamicRenderScaling.h:51
static constexpr float kBudgetMsDisabled
Definition DynamicRenderScaling.h:38
static constexpr float kDefaultMinResolutionFraction
Definition DynamicRenderScaling.h:35
float ChangeThreshold
Definition DynamicRenderScaling.h:52
static constexpr float kDefaultChangeThreshold
Definition DynamicRenderScaling.h:39
int32 FractionQuantization
Definition DynamicRenderScaling.h:55
static constexpr float kDefaultTargetedHeadRoom
Definition DynamicRenderScaling.h:40
Definition LightweightStats.h:416