UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VulkanGPUProfiler.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 VulkanGPUProfiler.h: Vulkan Utility definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "Containers/Queue.h"
10#include "GPUProfiler.h"
11#include "VulkanConfiguration.h"
12
15class FVulkanDevice;
16
17#if (RHI_NEW_GPU_PROFILER == 0)
18
21
22class FVulkanGPUTiming : public FGPUTiming
23{
24public:
26 : Device(InDevice)
27 , Context(InContext)
28 , bIsTiming(false)
29 , bEndTimestampIssued(false)
30 {
31 }
32
34
39
45
53
57 void Initialize(uint32 PoolSize = 8);
58
62 void Release();
63
64 bool IsComplete() const
65 {
66 check(bEndTimestampIssued);
67 return true;
68 }
69
70 bool IsTiming() const
71 {
72 return bIsTiming;
73 }
74
75 static void CalibrateTimers(FVulkanDevice& Device);
76
77private:
78
79 void DiscardOldestQuery();
80
84 static void PlatformStaticInitialize(void* UserData);
85
86 FVulkanDevice* Device = nullptr;
87 FVulkanContextCommon* Context = nullptr;
88
90 bool bIsTiming;
91 bool bEndTimestampIssued;
92 uint64 LastTime = 0;
93
94 struct FPendingQuery
95 {
96 FVulkanSyncPointRef StartSyncPoint;
97 uint64 StartResult = 0;
98 FVulkanSyncPointRef EndSyncPoint;
99 uint64 EndResult = 0;
100 };
101 const uint32 MaxPendingQueries = 4;
102 uint32 NumPendingQueries = 0;
103 TQueue<FPendingQuery*> PendingQueries;
104 FPendingQuery* ActiveQuery = nullptr;
105};
106
108class FVulkanEventNode : public FGPUProfilerEventNode
109{
110public:
112 FGPUProfilerEventNode(InName, InParent),
114 {
115 // Initialize Buffered timestamp queries
117 }
118
120 {
121 Timing.Release();
122 }
123
128 virtual float GetTiming() override final;
129
130
132 {
134 }
135
136 virtual void StopTiming() override final
137 {
139 }
140
142};
143
145class FVulkanEventNodeFrame : public FGPUProfilerEventNodeFrame
146{
147public:
148
154
159
161 virtual void StartFrame() override final;
162
164 virtual void EndFrame() override final;
165
168
169 virtual bool PlatformDisablesVSync() const { return true; }
170
173};
174
179struct FVulkanGPUProfiler : public FGPUProfiler
180{
183
185
186 virtual ~FVulkanGPUProfiler();
187
188 virtual FGPUProfilerEventNode* CreateEventNode(const TCHAR* InName, FGPUProfilerEventNode* InParent) override final
189 {
191 return EventNode;
192 }
193
194 void BeginFrame();
195
197 void EndFrame();
198
202
204};
205
206#endif // (RHI_NEW_GPU_PROFILER == 0)
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition VulkanCommandBuffer.h:43
Definition VulkanContext.h:55
Definition VulkanDevice.h:279
Definition VulkanGPUProfiler.h:146
~FVulkanEventNodeFrame()
Definition VulkanGPUProfiler.h:155
virtual float GetRootTimingResults() override final
Definition VulkanUtil.cpp:270
FVulkanEventNodeFrame(FVulkanContextCommon *InContext, FVulkanDevice *InDevice)
Definition VulkanGPUProfiler.h:149
virtual void StartFrame() override final
Definition VulkanUtil.cpp:258
virtual bool PlatformDisablesVSync() const
Definition VulkanGPUProfiler.h:169
virtual void EndFrame() override final
Definition VulkanUtil.cpp:265
FVulkanGPUTiming RootEventTiming
Definition VulkanGPUProfiler.h:172
Definition VulkanGPUProfiler.h:109
FVulkanGPUTiming Timing
Definition VulkanGPUProfiler.h:141
virtual void StartTiming() override final
Definition VulkanGPUProfiler.h:131
virtual void StopTiming() override final
Definition VulkanGPUProfiler.h:136
virtual float GetTiming() override final
Definition VulkanUtil.cpp:284
virtual ~FVulkanEventNode()
Definition VulkanGPUProfiler.h:119
FVulkanEventNode(const TCHAR *InName, FGPUProfilerEventNode *InParent, FVulkanContextCommon *InContext, FVulkanDevice *InDevice)
Definition VulkanGPUProfiler.h:111
Definition VulkanGPUProfiler.h:23
void Release()
Definition VulkanUtil.cpp:114
void StartTiming(FVulkanContextCommon *InContext=nullptr)
Definition VulkanUtil.cpp:121
FVulkanGPUTiming(FVulkanContextCommon *InContext, FVulkanDevice *InDevice)
Definition VulkanGPUProfiler.h:25
uint64 GetTiming(bool bGetCurrentResultsAndBlock=false)
Definition VulkanUtil.cpp:208
static void CalibrateTimers(FVulkanDevice &Device)
Definition VulkanUtil.cpp:88
~FVulkanGPUTiming()
Definition VulkanUtil.cpp:97
bool IsTiming() const
Definition VulkanGPUProfiler.h:70
void EndTiming(FVulkanContextCommon *InContext=nullptr)
Definition VulkanUtil.cpp:157
bool IsComplete() const
Definition VulkanGPUProfiler.h:64
void Initialize(uint32 PoolSize=8)
Definition VulkanUtil.cpp:104
Definition VulkanSubmission.h:54
Definition IndirectArray.h:20
Definition Queue.h:48
@ false
Definition radaudio_common.h:23
Definition VulkanGPUProfiler.h:180
TIndirectArray< FVulkanEventNodeFrame > GPUHitchEventNodeFrames
Definition VulkanGPUProfiler.h:182
FVulkanDevice * Device
Definition VulkanGPUProfiler.h:200
virtual FGPUProfilerEventNode * CreateEventNode(const TCHAR *InName, FGPUProfilerEventNode *InParent) override final
Definition VulkanGPUProfiler.h:188
void EndFrameBeforeSubmit()
Definition VulkanUtil.cpp:359
FVulkanContextCommon * CmdContext
Definition VulkanGPUProfiler.h:201
void BeginFrame()
Definition VulkanUtil.cpp:311
bool bBeginFrame
Definition VulkanGPUProfiler.h:203
bool bCommandlistSubmitted
Definition VulkanGPUProfiler.h:199
void EndFrame()
Definition VulkanUtil.cpp:381
virtual ~FVulkanGPUProfiler()
Definition VulkanUtil.cpp:307