UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VulkanQueue.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved..
2
3/*=============================================================================
4 VulkanQueue.h: Private Vulkan RHI definitions.
5=============================================================================*/
6
7#pragma once
8
10#include "VulkanBarriers.h"
11#include "VulkanCommandBuffer.h"
12#include "RHIDiagnosticBuffer.h"
14
16class FVulkanDevice;
17class FVulkanPayload;
18class FVulkanTiming;
19
20namespace VulkanRHI
21{
22 class FFence;
23 class FSemaphore;
24}
25
27{
28 Graphics = 0,
31
32 Count,
33};
34
36{
37 switch (QueueType)
38 {
39 default: checkNoEntry(); // fallthrough
40 case EVulkanQueueType::Graphics: return TEXT("Graphics");
41 case EVulkanQueueType::AsyncCompute: return TEXT("AsyncCompute");
42 case EVulkanQueueType::Transfer: return TEXT("Transfer");
43 }
44}
45
51
53{
54public:
57
59 {
60 return QueueType;
61 }
62
64 {
65 return FamilyIndex;
66 }
67
69 {
70 return QueueIndex;
71 }
72
74 {
75 return Queue;
76 }
77
80
82 {
83 return SupportedStages;
84 }
85
87 {
88 return SupportedAccess;
89 }
90
92 {
93 return TimelineSempahore;
94 }
95
97 {
98 return NextTimelineSemaphoreValue - 1;
99 }
100
102 {
103 return CompletedTimelineSemaphoreValue;
104 }
105
107 {
108 PendingSubmission.Enqueue(InPayload);
109 }
110
113
114#if RHI_NEW_GPU_PROFILER
116#endif
117
120 {
121 return DiagnosticBuffer.Get();
122 }
123
124private:
127
128 void BindSparseResources(FVulkanPayload& Payload);
129
130 // Used by submission pipe which holds the proper locks to access this queue
131 FVulkanPayload* GetNextInterruptPayload()
132 {
133 FVulkanPayload* Payload = nullptr;
134 PendingInterrupt.Peek(Payload);
135 return Payload;
136 }
137 friend FVulkanDynamicRHI;
138
139 VkQueue Queue;
140 uint32 FamilyIndex;
141 uint32 QueueIndex;
142 EVulkanQueueType QueueType;
143 FVulkanDevice& Device;
144
145 FCriticalSection CommandBufferPoolCS;
147
148 const bool bUseTimelineSemaphores;
149 FVulkanSemaphore* TimelineSempahore = nullptr;
150 uint64 NextTimelineSemaphoreValue = 1;
151 uint64 CompletedTimelineSemaphoreValue = 0;
152
153 uint64 SubmitCounter;
155 VkAccessFlags SupportedAccess = VK_ACCESS_NONE;
156
159
160#if RHI_NEW_GPU_PROFILER
161 // The active timing struct on this queue. Updated / accessed by the interrupt thread.
162 FVulkanTiming* Timing = nullptr;
163#endif
164
166
167 void FillSupportedStageBits();
168};
169
170
171//
172// Per Queue diagnostic buffer. Stays accessible after a GPU crash to allow readback of diagnostic messages.
173// Also used to track the progress of the GPU via breadcrumb markers.
174//
176{
177public:
180
181 // :todo: Bindings for shader asserts, etc
182
183#if WITH_RHI_BREADCRUMBS
186
188 {
189 Allocation.InvalidateMappedMemory(&Device);
190 return Data->MarkerIn;
191 }
193 {
194 Allocation.InvalidateMappedMemory(&Device);
195 return Data->MarkerOut;
196 }
197#endif // WITH_RHI_BREADCRUMBS
198
199 bool IsValid() const { return (Buffer != VK_NULL_HANDLE); }
200
201private:
202 FVulkanDevice& Device;
203 FVulkanQueue& Queue;
204 VkBuffer Buffer = VK_NULL_HANDLE;
206
207#if WITH_RHI_BREADCRUMBS
208 // Extend lifetime of breadcrumbs so we can use the pointers directly
209 // One array per frame, and cycle which array is used on EndFrame
212#endif // WITH_RHI_BREADCRUMBS
213
214 friend FVulkanDynamicRHI;
215};
#define checkNoEntry()
Definition AssertionMacros.h:316
#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
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
EVulkanCommandBufferType
Definition VulkanCommandBuffer.h:28
EVulkanQueueType
Definition VulkanQueue.h:27
const TCHAR * GetVulkanQueueTypeName(EVulkanQueueType QueueType)
Definition VulkanQueue.h:35
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition PThreadSemaphore.h:15
Definition RHIDiagnosticBuffer.h:13
FQueue * Data
Definition RHIDiagnosticBuffer.h:47
Definition VulkanCommandBuffer.h:204
Definition VulkanCommandBuffer.h:43
Definition VulkanDevice.h:279
Definition VulkanQueue.h:176
~FVulkanDiagnosticBuffer()
Definition VulkanQueue.cpp:752
bool IsValid() const
Definition VulkanQueue.h:199
Definition VulkanDynamicRHI.h:69
Definition VulkanSynchronization.h:17
Definition VulkanSubmission.h:148
Definition VulkanQueue.h:53
~FVulkanQueue()
Definition VulkanQueue.cpp:82
uint64 GetLastSubmittedTimelineSemaphoreValue() const
Definition VulkanQueue.h:96
VkPipelineStageFlags GetSupportedStageBits() const
Definition VulkanQueue.h:81
void ReleaseCommandBufferPool(FVulkanCommandBufferPool *CommandBufferPool)
Definition VulkanQueue.cpp:699
uint32 GetQueueIndex() const
Definition VulkanQueue.h:68
int32 SubmitQueuedPayloads(TMap< VkSemaphore, FBinarySemaphoreSignalInfo > &SignaledSemas)
Definition VulkanQueue.cpp:171
uint64 GetCompletedTimelineSemaphoreValue() const
Definition VulkanQueue.h:101
EVulkanQueueType GetQueueType()
Definition VulkanQueue.h:58
VkQueue GetHandle() const
Definition VulkanQueue.h:73
uint32 GetFamilyIndex() const
Definition VulkanQueue.h:63
int32 ProcessInterruptQueue(uint64 Timeout)
Definition VulkanQueue.cpp:506
void InitDiagnosticBuffer()
Definition VulkanQueue.cpp:707
class FVulkanDiagnosticBuffer * GetDiagnosticBuffer()
Definition VulkanQueue.h:119
FVulkanCommandBufferPool * AcquireCommandBufferPool(EVulkanCommandBufferType CommandBufferType)
Definition VulkanQueue.cpp:688
VkAccessFlags GetSupportedAccessFlags() const
Definition VulkanQueue.h:86
void EnqueuePayload(FVulkanPayload *InPayload)
Definition VulkanQueue.h:106
const FVulkanSemaphore * GetTimelineSemaphore() const
Definition VulkanQueue.h:91
Definition VulkanSynchronization.h:127
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition Queue.h:48
bool Peek(FElementType &OutItem) const
Definition Queue.h:219
bool Enqueue(const FElementType &Item)
Definition Queue.h:123
Definition StaticArray.h:26
Definition UniquePtr.h:107
Definition VulkanMemory.h:418
void InvalidateMappedMemory(FVulkanDevice *Device)
Definition VulkanMemory.cpp:3860
Definition VulkanCommandBuffer.h:22
Definition VulkanQueue.h:47
EVulkanQueueType QueueType
Definition VulkanQueue.h:49
uint64 TimelineValue
Definition VulkanQueue.h:48
Definition GPUProfiler.h:25