UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VulkanContext.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 VulkanContext.h: Class to generate Vulkan command buffers from RHI CommandLists
5=============================================================================*/
6
7#pragma once
8
9#include "VulkanResources.h"
10#include "VulkanRHIPrivate.h"
11#include "VulkanGPUProfiler.h"
12#include "VulkanSubmission.h"
14
15class FVulkanDevice;
19class FVulkanQueue;
21
22
24{
25 None = 0,
26
27 // Block the calling thread until the submission thread has dispatched all work.
29
30 // Both the calling thread until the GPU has signaled completion of all dispatched work.
32};
34
35
44
52
53
55{
56protected:
57 // Phases are used to track where we are at in filling the current payload.
58 // Phases always move forward in the order declared here, never backwards.
59 // Always use GetPayload(EPhase) to fetch the payload for the phase you want,
60 // it will take care of creating a new payload when necessary.
61 enum class EPhase
62 {
63 Wait,
65 Execute,
66 Signal
67 };
68
69public:
71 virtual ~FVulkanContextCommon();
72
74 {
75 if (Payloads.Num() == 0 || Phase < CurrentPhase)
76 {
77 NewPayload();
78 }
79
80 CurrentPhase = Phase;
81 return *Payloads.Last();
82 }
83
84 // NOTE: This call is getting phased out, use GetCommandBuffer()
89
91 {
93 checkSlow(Payload.SignalSemaphores.Num() == 0);
94
95 if (Payload.CommandBuffers.Num() == 0)
96 {
97 PrepareNewCommandBuffer(Payload);
98 }
99
100 return *Payload.CommandBuffers.Last();
101 }
102
108 {
109 if (InWaitSemaphores.Num())
110 {
112 checkSlow((Payload.CommandBuffers.Num() == 0) && (Payload.SignalSemaphores.Num() == 0));
113
114 Payload.WaitFlags.Reserve(Payload.WaitFlags.Num() + InWaitSemaphores.Num());
115 for (int32 Index = 0; Index < InWaitSemaphores.Num(); ++Index)
116 {
117 InWaitSemaphores[Index]->AddRef();
118 Payload.WaitFlags.Add(InWaitFlags);
119 }
121 }
122 }
123
136
137 // Complete recording of the current command list set, and appends the resulting
138 // payloads to the given array. Resets the context so new commands can be recorded.
140
142 {
143 return Pool.GetHandle();
144 }
145
147
148 // Should only ne used when we are certain there are no other pending contexts (like UploadContext)
150
151 // Public immutable references, access them directly
154
155 // Add a provided sync point that will be signaled at the end of the current payload's accumulated work
157 {
159 Payload.SyncPoints.Add(InSync);
160 }
161
162 // Add provided sync points that will be appended next time a payload reaches the Signal phase
164 {
165 PendingSyncPoints.Add(InSyncs);
166 }
167
168 // Add an event to be signaled with the current payload is submitted (does not alter phase)
170 {
171 FVulkanPayload& Payload = GetPayload(CurrentPhase);
172 Payload.SubmissionEvents.Add(InEvent);
173 }
174
175 // Force pending syncs to be sent to a payload
177 {
178 if (PendingSyncPoints.Num())
179 {
181 Payload.SyncPoints.Append(PendingSyncPoints);
182 PendingSyncPoints.Empty();
183 }
184 }
185
186 // Returns a single sync point for the context that will be inserted when it is finalized
188 {
189 if (!ContextSyncPoint)
190 {
191 ContextSyncPoint = FVulkanSyncPoint::Create(EVulkanSyncPointType::Context, TEXT("VulkanContextSyncPoint"));
192 }
193 return ContextSyncPoint;
194 }
195
201
206
208 {
209 return nullptr;
210 }
211
213
214protected:
215
216 // End the current payload, insert the parallel rendering work, and leave context with a valid payload
218
219private:
220
222 void PrepareNewCommandBuffer(FVulkanPayload& Payload);
223 void NewPayload();
224 void EndPayload();
225
227
229 EPhase CurrentPhase = EPhase::Wait;
230
231 // Sync points signaled at the next Signal phase (will not force a phase change) or when context is finalized
232 TArray<FVulkanSyncPointRef> PendingSyncPoints;
233
234 // Sync point signaled when the current context is finalized
235 FVulkanSyncPointRef ContextSyncPoint;
236};
237
238
239
241{
242public:
245
246 // Constructor for parallel render contexts that use secondary command buffers
248
250 {
251 return static_cast<FVulkanCommandListContext&>(RHICmdList.GetContext().GetLowestLevelContext());
252 }
253
254 inline bool IsImmediate() const
255 {
256 return Immediate == nullptr;
257 }
258
259 virtual ERHIPipeline GetPipeline() const override
260 {
261 return RHIPipeline;
262 }
263
264 template <class ShaderType> void SetResourcesFromTables(const ShaderType* RESTRICT);
267
268 virtual void RHISetStreamSource(uint32 StreamIndex, FRHIBuffer* VertexBuffer, uint32 Offset) final override;
269 virtual void RHISetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ) final override;
270 virtual void RHISetStereoViewport(float LeftMinX, float RightMinX, float LeftMinY, float RightMinY, float MinZ, float LeftMaxX, float RightMaxX, float LeftMaxY, float RightMaxY, float MaxZ) override;
271 virtual void RHISetScissorRect(bool bEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY) final override;
284 virtual void RHISetUniformBufferDynamicOffset(FUniformBufferStaticSlot Slot, uint32 InOffset) final override;
287 void RHISetShaderParameter(FRHIGraphicsShader* Shader, uint32 BufferIndex, uint32 BaseIndex, uint32 NumBytes, const void* NewValue);
288 void RHISetShaderParameter(FRHIComputeShader* ComputeShader, uint32 BufferIndex, uint32 BaseIndex, uint32 NumBytes, const void* NewValue);
291 virtual void RHISetStencilRef(uint32 StencilRef) final override;
292 virtual void RHIDrawPrimitive(uint32 BaseVertexIndex, uint32 NumPrimitives, uint32 NumInstances) final override;
293 virtual void RHIDrawPrimitiveIndirect(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
294 virtual void RHIDrawIndexedIndirect(FRHIBuffer* IndexBufferRHI, FRHIBuffer* ArgumentsBufferRHI, int32 DrawArgumentsIndex, uint32 NumInstances) final override;
295 virtual void RHIDrawIndexedPrimitive(FRHIBuffer* IndexBuffer, int32 BaseVertexIndex, uint32 FirstInstance, uint32 NumVertices, uint32 StartIndex, uint32 NumPrimitives, uint32 NumInstances) final override;
296 virtual void RHIDrawIndexedPrimitiveIndirect(FRHIBuffer* IndexBuffer, FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
297#if PLATFORM_SUPPORTS_MESH_SHADERS
298 virtual void RHIDispatchMeshShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ) final override;
299 virtual void RHIDispatchIndirectMeshShader(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
300#endif
301 virtual void RHISetDepthBounds(float MinDepth, float MaxDepth) final override;
302#if WITH_RHI_BREADCRUMBS
303 virtual void RHIBeginBreadcrumbGPU(FRHIBreadcrumbNode* Breadcrumb) final override;
304 virtual void RHIEndBreadcrumbGPU (FRHIBreadcrumbNode* Breadcrumb) final override;
305#endif
306
307 virtual void RHISetComputePipelineState(FRHIComputePipelineState* ComputePipelineState) final override;
308 virtual void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ) final override;
309 virtual void RHIDispatchIndirectComputeShader(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
310
311 virtual void RHISetMultipleViewports(uint32 Count, const FViewportBounds* Data) final override;
312 virtual void RHIClearUAVFloat(FRHIUnorderedAccessView* UnorderedAccessViewRHI, const FVector4f& Values) final override;
313 virtual void RHIClearUAVUint(FRHIUnorderedAccessView* UnorderedAccessViewRHI, const FUintVector4& Values) final override;
314 virtual void RHICopyTexture(FRHITexture* SourceTexture, FRHITexture* DestTexture, const FRHICopyTextureInfo& CopyInfo) final override;
315 virtual void RHICopyBufferRegion(FRHIBuffer* DstBuffer, uint64 DstOffset, FRHIBuffer* SrcBuffer, uint64 SrcOffset, uint64 NumBytes) final override;
316 virtual void RHIBeginTransitions(TArrayView<const FRHITransition*> Transitions) override final;
317 virtual void RHIEndTransitions(TArrayView<const FRHITransition*> Transitions) override final;
318 virtual void RHICopyToStagingBuffer(FRHIBuffer* SourceBuffer, FRHIStagingBuffer* DestinationStagingBuffer, uint32 Offset, uint32 NumBytes) final override;
319 virtual void RHIWriteGPUFence(FRHIGPUFence* Fence) final override;
320
321 // Render time measurement
322 virtual void RHIBeginRenderQuery(FRHIRenderQuery* RenderQuery) final override;
323 virtual void RHIEndRenderQuery(FRHIRenderQuery* RenderQuery) final override;
324
325#if RHI_NEW_GPU_PROFILER
326 void FlushProfilerStats()
327 {
328 // Flush accumulated draw stats (if breadcrumbs are available to attach them to)
330 {
332 StatEvent = {};
333 }
334 }
335#else
337#endif
338
339 virtual void Finalize(TArray<FVulkanPayload*>& OutPayloads) override;
340
341 virtual void RHIEndDrawingViewport(FRHIViewport* Viewport, bool bPresent, bool bLockToVsync) final override;
342
343 virtual void RHIBeginRenderPass(const FRHIRenderPassInfo& InInfo, const TCHAR* InName) final override;
344 virtual void RHIEndRenderPass() final override;
345 virtual void RHINextSubpass() final override;
346
349
355
358 uint32 Width, uint32 Height) final override;
361 FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) final override;
362
366 ERayTracingBindingType BindingType) final override;
367
372
377
379
384
389
390#if (RHI_NEW_GPU_PROFILER == 0)
392 {
393 return GpuProfiler;
394 }
395#endif
396
398 {
399 // Nothing to do
400 }
401
402 void ReleasePendingState();
403
405
410
412 {
413 CurrentParallelRenderPassInfo = ParallelRenderPassInfo;
414 }
415
417
420
423
425
426protected:
429
433
435
437
440
442
445
446 // Match the D3D12 maximum of 16 constant buffers per shader stage.
448
449 // Track the currently bound uniform buffers.
451
452 // Bit array to track which uniform buffers have changed since the last draw call.
454
455 void InternalClearMRT(FVulkanCommandBuffer& CommandBuffer, bool bClearColor, int32 NumClearColors, const FLinearColor* ColorArray, bool bClearDepth, float Depth, bool bClearStencil, uint32 Stencil);
456
460
461private:
462 void RHIClearMRT(bool bClearColor, int32 NumClearColors, const FLinearColor* ColorArray, bool bClearDepth, float Depth, bool bClearStencil, uint32 Stencil);
463
464 friend class FVulkanDevice;
465 friend class FVulkanDynamicRHI;
466
467#if (RHI_NEW_GPU_PROFILER == 0)
468 void RegisterGPUWork(uint32 NumPrimitives = 0, uint32 NumVertices = 0) { GpuProfiler.RegisterGPUWork(NumPrimitives, NumVertices); }
469 void RegisterGPUDispatch(FIntVector GroupCount) { GpuProfiler.RegisterGPUDispatch(GroupCount); }
470
471 FVulkanGPUProfiler GpuProfiler;
472 FVulkanGPUTiming* FrameTiming = nullptr;
473#endif
474
475 template <typename TRHIShader>
476 void ApplyStaticUniformBuffers(TRHIShader* Shader);
477
478 TArray<FRHIUniformBuffer*> GlobalUniformBuffers;
479 const FRHIShaderBindingLayout* ShaderBindingLayout = nullptr;
480};
481
492
494{
495public:
496
497 static inline FVulkanUploadContext& Get(FRHICommandListBase& RHICmdList)
498 {
499 return static_cast<FVulkanUploadContext&>(RHICmdList.GetUploadContext());
500 }
501
503 virtual ~FVulkanUploadContext();
504
506 static void DestroyPool();
507};
508
509template<>
514
515
516struct FVulkanContextArray : public TRHIPipelineArray<FVulkanCommandListContext*>
517{
519 : TRHIPipelineArray(InPlace, nullptr)
520 {
521 }
522
524 : TRHIPipelineArray(InPlace, nullptr)
525 {
527 {
529 (*this)[Pipeline] = Context ? static_cast<FVulkanCommandListContext*>(&Context->GetLowestLevelContext()) : nullptr;
530 }
531 }
532};
#define checkSlow(expr)
Definition AssertionMacros.h:332
@ InPlace
Definition CoreMiscDefines.h:162
#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
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
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
UE::EnumFlags::Private::TRange< EnumType > MakeFlagsRange(EnumType Flags)
Definition EnumRange.h:285
ERayTracingBindingType
Definition RHICommandList.h:281
@ SF_NumStandardFrequencies
Definition RHIDefinitions.h:222
uint8 FUniformBufferStaticSlot
Definition RHIDefinitions.h:722
ERHIPipeline
Definition RHIPipeline.h:13
EVulkanCommandBufferType
Definition VulkanCommandBuffer.h:28
EVulkanFlushFlags
Definition VulkanContext.h:24
uint32 Offset
Definition VulkanMemory.cpp:4033
EVulkanQueryPoolType
Definition VulkanQuery.h:23
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHIResources.h:4572
Definition RHIResources.h:1581
Definition RHICommandList.h:455
IRHIUploadContext & GetUploadContext()
Definition RHICommandList.h:700
IRHICommandContext & GetContext()
Definition RHICommandList.h:686
Definition RHIResources.h:1078
Definition RHIResources.h:1018
Definition RHIResources.h:5541
Definition RHIResources.h:2387
Definition RHIResources.h:1058
Definition RHIResources.h:947
Definition RHIResources.h:972
Definition RHIResources.h:1115
Definition RHIResources.h:3755
Definition RHIResources.h:984
Definition RHIResources.h:2444
Definition RHIResources.h:671
Definition RHIShaderBindingLayout.h:72
Definition RHIResources.h:3863
Definition RHIResources.h:3304
Definition RHIResources.h:3981
Definition RHIResources.h:2153
Definition RHIResources.h:1232
Definition RHIResources.h:3294
Definition RHIResources.h:2515
Definition RHIContext.h:49
Definition VulkanCommandBuffer.h:204
VkCommandPool GetHandle() const
Definition VulkanCommandBuffer.h:209
Definition VulkanCommandBuffer.h:43
Definition VulkanContext.h:483
static FVulkanCommandListContextImmediate & Get(FRHICommandListBase &RHICmdList)
Definition VulkanContext.h:485
Definition VulkanContext.h:241
virtual void RHIClearUAVUint(FRHIUnorderedAccessView *UnorderedAccessViewRHI, const FUintVector4 &Values) final override
Definition VulkanUAV.cpp:236
void BeginOcclusionQueryBatch(uint32 NumQueriesInBatch, uint32 MultiViewCount)
Definition VulkanQuery.cpp:113
virtual void RHIBeginParallelRenderPass(TSharedPtr< FRHIParallelRenderPassInfo > InInfo, const TCHAR *InName) final override
Definition VulkanContext.cpp:560
virtual FVulkanParallelRenderPassInfo * GetParallelRenderPassInfo()
Definition VulkanContext.h:406
virtual void RHIDrawIndexedPrimitive(FRHIBuffer *IndexBuffer, int32 BaseVertexIndex, uint32 FirstInstance, uint32 NumVertices, uint32 StartIndex, uint32 NumPrimitives, uint32 NumInstances) final override
Definition VulkanCommands.cpp:689
virtual void RHISetStaticUniformBuffers(const FUniformBufferStaticBindings &InUniformBuffers) final override
Definition VulkanCommands.cpp:454
void InternalClearMRT(FVulkanCommandBuffer &CommandBuffer, bool bClearColor, int32 NumClearColors, const FLinearColor *ColorArray, bool bClearDepth, float Depth, bool bClearStencil, uint32 Stencil)
Definition VulkanCommands.cpp:831
virtual void RHIWriteGPUFence(FRHIGPUFence *Fence) final override
Definition VulkanCommands.cpp:927
void CommitGraphicsResourceTables()
Definition VulkanCommands.cpp:228
virtual void RHIBeginTransitions(TArrayView< const FRHITransition * > Transitions) override final
Definition VulkanBarriers.cpp:1605
virtual void RHIBuildAccelerationStructures(TConstArrayView< FRayTracingGeometryBuildParams > Params, const FRHIBufferRange &ScratchBufferRange) final override
Definition VulkanRayTracing.cpp:1164
void SetParallelRenderPassInfo(FVulkanParallelRenderPassInfo *ParallelRenderPassInfo)
Definition VulkanContext.h:411
TMap< uint32, class FVulkanTypedDescriptorPoolSet * > TypedDescriptorPoolSets
Definition VulkanContext.h:458
const bool bSupportsBreadcrumbs
Definition VulkanContext.h:432
virtual void RHISetStreamSource(uint32 StreamIndex, FRHIBuffer *VertexBuffer, uint32 Offset) final override
Definition VulkanCommands.cpp:115
virtual void RHISetShaderParameters(FRHIGraphicsShader *Shader, TConstArrayView< uint8 > InParametersData, TConstArrayView< FRHIShaderParameter > InParameters, TConstArrayView< FRHIShaderParameterResource > InResourceParameters, TConstArrayView< FRHIShaderParameterResource > InBindlessParameters) final override
Definition VulkanCommands.cpp:430
virtual void RHIEndRenderQuery(FRHIRenderQuery *RenderQuery) final override
Definition VulkanQuery.cpp:335
virtual void RHIBeginRenderPass(const FRHIRenderPassInfo &InInfo, const TCHAR *InName) final override
Definition VulkanRenderTarget.cpp:607
virtual void RHIDrawPrimitive(uint32 BaseVertexIndex, uint32 NumPrimitives, uint32 NumInstances) final override
Definition VulkanCommands.cpp:637
void RHISetShaderResourceViewParameter(FRHIGraphicsShader *Shader, uint32 SamplerIndex, FRHIShaderResourceView *SRV)
Definition VulkanCommands.cpp:379
FVulkanParallelRenderPassInfo * CurrentParallelRenderPassInfo
Definition VulkanContext.h:441
void AcquirePoolSetContainer()
Definition VulkanContext.cpp:690
virtual void RHISetGraphicsPipelineState(FRHIGraphicsPipelineState *GraphicsState, uint32 StencilRef, bool bApplyAdditionalState) final override
Definition VulkanPipelineState.cpp:568
virtual void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ) final override
Definition VulkanCommands.cpp:279
uint16 DirtyUniformBuffers[SF_NumStandardFrequencies]
Definition VulkanContext.h:453
virtual void RHISetComputePipelineState(FRHIComputePipelineState *ComputePipelineState) final override
Definition VulkanPipelineState.cpp:605
bool IsImmediate() const
Definition VulkanContext.h:254
void RHISetUAVParameter(FRHIPixelShader *PixelShader, uint32 UAVIndex, FRHIUnorderedAccessView *UAV)
Definition VulkanCommands.cpp:332
const ERHIPipeline RHIPipeline
Definition VulkanContext.h:431
virtual void RHISetDepthBounds(float MinDepth, float MaxDepth) final override
Definition VulkanCommands.cpp:891
virtual void RHIEndRenderPass() final override
Definition VulkanRenderTarget.cpp:666
virtual void RHISetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ) final override
Definition VulkanViewport.cpp:944
FVulkanPendingComputeState * PendingComputeState
Definition VulkanContext.h:444
void RHISetShaderTexture(FRHIGraphicsShader *Shader, uint32 TextureIndex, FRHITexture *NewTexture)
Definition VulkanCommands.cpp:358
virtual void RHISetUniformBufferDynamicOffset(FUniformBufferStaticSlot Slot, uint32 InOffset) final override
Definition VulkanCommands.cpp:486
virtual void RHIBindAccelerationStructureMemory(FRHIRayTracingScene *Scene, FRHIBuffer *Buffer, uint32 BufferOffset) final override
Definition VulkanRayTracing.cpp:1158
virtual void RHICalibrateTimers(FRHITimestampCalibrationQuery *CalibrationQuery) final override
Definition VulkanQuery.cpp:355
FVulkanUniformBuffer * BoundUniformBuffers[SF_NumStandardFrequencies][MAX_UNIFORM_BUFFERS_PER_SHADER_STAGE]
Definition VulkanContext.h:450
void RHISetShaderParameter(FRHIGraphicsShader *Shader, uint32 BufferIndex, uint32 BaseIndex, uint32 NumBytes, const void *NewValue)
Definition VulkanCommands.cpp:416
void ExtractDepthStencilLayouts(const FRHIRenderPassInfo &InInfo, VkImageLayout &OutDepthLayout, VkImageLayout &OutStencilLayout)
Definition VulkanRenderTarget.cpp:562
virtual void RHIClearShaderBindingTable(FRHIShaderBindingTable *SBT) final override
Definition VulkanRayTracing.cpp:1146
virtual void RHISetStereoViewport(float LeftMinX, float RightMinX, float LeftMinY, float RightMinY, float MinZ, float LeftMaxX, float RightMaxX, float LeftMaxY, float RightMaxY, float MaxZ) override
Definition VulkanViewport.cpp:949
FVulkanPendingGfxState * PendingGfxState
Definition VulkanContext.h:443
virtual void RHIRayTraceDispatchIndirect(FRHIRayTracingPipelineState *RayTracingPipelineState, FRHIRayTracingShader *RayGenShader, FRHIShaderBindingTable *SBT, const FRayTracingShaderBindings &GlobalResourceBindings, FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset) final override
Definition VulkanRayTracing.cpp:1999
void FillDynamicRenderingInfo(const FRHIRenderPassInfo &RenderPassInfo, FVulkanDynamicRenderingInfo &OutRenderingInfo)
Definition VulkanContext.cpp:331
virtual ~FVulkanCommandListContext()
Definition VulkanContext.cpp:314
virtual void RHIDrawIndexedPrimitiveIndirect(FRHIBuffer *IndexBuffer, FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset) final override
Definition VulkanCommands.cpp:746
FVulkanRenderPass * PrepareRenderPassForPSOCreation(const FGraphicsPipelineStateInitializer &Initializer)
Definition VulkanRenderTarget.cpp:57
virtual ERHIPipeline GetPipeline() const override
Definition VulkanContext.h:259
virtual void RHIDispatchIndirectComputeShader(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset) final override
Definition VulkanCommands.cpp:306
@ MAX_UNIFORM_BUFFERS_PER_SHADER_STAGE
Definition VulkanContext.h:447
virtual void RHISetBindingsOnShaderBindingTable(FRHIShaderBindingTable *SBT, FRHIRayTracingPipelineState *Pipeline, uint32 NumBindings, const FRayTracingLocalShaderBindings *Bindings, ERayTracingBindingType BindingType) final override
Definition VulkanRayTracing.cpp:2145
virtual void RHISetMultipleViewports(uint32 Count, const FViewportBounds *Data) final override
Definition VulkanViewport.cpp:970
FVulkanCommandListContext * Immediate
Definition VulkanContext.h:430
virtual void RHISetStencilRef(uint32 StencilRef) final override
Definition VulkanCommands.cpp:632
FVulkanGPUProfiler & GetGPUProfiler()
Definition VulkanContext.h:391
virtual void RHISetStaticUniformBuffer(FUniformBufferStaticSlot Slot, FRHIUniformBuffer *Buffer) final override
Definition VulkanCommands.cpp:481
virtual void RHIBeginRenderQuery(FRHIRenderQuery *RenderQuery) final override
Definition VulkanQuery.cpp:320
FVulkanPendingGfxState * GetPendingGfxState()
Definition VulkanContext.h:368
virtual void RHICommitShaderBindingTable(FRHIShaderBindingTable *SBT, FRHIBuffer *InlineBindingDataBuffer) final override
Definition VulkanRayTracing.cpp:1152
void ReleasePendingState()
Definition VulkanContext.cpp:305
FVulkanRenderPass * GetCurrentRenderPass()
Definition VulkanContext.h:380
virtual void RHISetScissorRect(bool bEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY) final override
Definition VulkanViewport.cpp:975
virtual void RHINextSubpass() final override
Definition VulkanRenderTarget.cpp:681
virtual void RHIDrawIndexedIndirect(FRHIBuffer *IndexBufferRHI, FRHIBuffer *ArgumentsBufferRHI, int32 DrawArgumentsIndex, uint32 NumInstances) final override
Definition VulkanCommands.cpp:718
FVulkanFramebuffer * CurrentFramebuffer
Definition VulkanContext.h:439
void ApplyShaderBindingLayout(VkShaderStageFlags ShaderStageFlags)
Definition VulkanContext.cpp:720
FVulkanQueryPool * GetCurrentOcclusionQueryPool()
Definition VulkanQuery.cpp:366
void NotifyDeletedRenderTarget(VkImage Image)
Definition VulkanContext.cpp:296
bool AcquirePoolSetAndDescriptorsIfNeeded(const class FVulkanDescriptorSetsLayout &Layout, bool bNeedDescriptors, VkDescriptorSet *OutDescriptors)
Definition VulkanContext.cpp:699
static FVulkanCommandListContext & Get(FRHICommandListBase &RHICmdList)
Definition VulkanContext.h:249
FVulkanDescriptorPoolSetContainer * CurrentDescriptorPoolSetContainer
Definition VulkanContext.h:457
virtual void RHICopyBufferRegion(FRHIBuffer *DstBuffer, uint64 DstOffset, FRHIBuffer *SrcBuffer, uint64 SrcOffset, uint64 NumBytes) final override
Definition VulkanTexture.cpp:2802
void RHISetShaderUniformBuffer(FRHIGraphicsShader *Shader, uint32 BufferIndex, FRHIUniformBuffer *Buffer)
Definition VulkanCommands.cpp:525
virtual void RHICopyToStagingBuffer(FRHIBuffer *SourceBuffer, FRHIStagingBuffer *DestinationStagingBuffer, uint32 Offset, uint32 NumBytes) final override
Definition VulkanCommands.cpp:897
void CommitComputeResourceTables()
Definition VulkanCommands.cpp:273
virtual void RHIEndParallelRenderPass() final override
Definition VulkanContext.cpp:585
bool IsSwapchainImage(FRHITexture *InTexture) const
Definition VulkanRenderTarget.cpp:541
FVulkanPendingComputeState * GetPendingComputeState()
Definition VulkanContext.h:373
virtual void RHIRayTraceDispatch(FRHIRayTracingPipelineState *RayTracingPipelineState, FRHIRayTracingShader *RayGenShader, FRHIShaderBindingTable *SBT, const FRayTracingShaderBindings &GlobalResourceBindings, uint32 Width, uint32 Height) final override
Definition VulkanRayTracing.cpp:1968
virtual void RHIDrawPrimitiveIndirect(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset) final override
Definition VulkanCommands.cpp:662
FVulkanFramebuffer * GetCurrentFramebuffer()
Definition VulkanContext.h:385
void SetResourcesFromTables(const ShaderType *RESTRICT)
Definition VulkanCommands.cpp:194
virtual void RHICopyTexture(FRHITexture *SourceTexture, FRHITexture *DestTexture, const FRHICopyTextureInfo &CopyInfo) final override
Definition VulkanTexture.cpp:2670
TArray< FString > EventStack
Definition VulkanContext.h:436
void BeginRecursiveCommand()
Definition VulkanContext.h:397
void RHISetShaderSampler(FRHIComputeShader *ComputeShader, uint32 SamplerIndex, FRHISamplerState *NewState)
Definition VulkanCommands.cpp:407
virtual void RHIEndDrawingViewport(FRHIViewport *Viewport, bool bPresent, bool bLockToVsync) final override
Definition VulkanRHI.cpp:1286
FVulkanRenderPass * CurrentRenderPass
Definition VulkanContext.h:438
virtual void RHIEndTransitions(TArrayView< const FRHITransition * > Transitions) override final
Definition VulkanBarriers.cpp:1627
virtual void RHIClearUAVFloat(FRHIUnorderedAccessView *UnorderedAccessViewRHI, const FVector4f &Values) final override
Definition VulkanUAV.cpp:230
FVulkanSwapChain * GetSwapChain() const
Definition VulkanRenderTarget.cpp:528
Definition VulkanContext.h:55
FVulkanCommandBuffer * GetActiveCmdBuffer()
Definition VulkanContext.h:85
void SignalSyncPoint(const FVulkanSyncPointRef &InSync)
Definition VulkanContext.h:156
FVulkanSyncPointRef GetContextSyncPoint()
Definition VulkanContext.h:187
void AppendParallelRenderPayload(FVulkanPayload *ParallelRenderingPayload)
Definition VulkanContext.cpp:76
FVulkanPayload & GetPayload(EPhase Phase)
Definition VulkanContext.h:73
void AddSignalSemaphore(FVulkanSemaphore *InSignalSemaphore)
Definition VulkanContext.h:124
TArray< FVulkanQueryPool * > & GetQueryPoolArray(EVulkanQueryPoolType Type)
Definition VulkanContext.h:196
void AddWaitSemaphore(VkPipelineStageFlags InWaitFlags, FVulkanSemaphore *InWaitSemaphore)
Definition VulkanContext.h:103
FVulkanDevice & Device
Definition VulkanContext.h:152
VkCommandPool GetHandle() const
Definition VulkanContext.h:141
virtual FVulkanParallelRenderPassInfo * GetParallelRenderPassInfo()
Definition VulkanContext.h:207
FVulkanQueryPool * GetCurrentTimestampQueryPool()
Definition VulkanContext.h:202
void HandleReservedResourceCommits(TArrayView< const FRHITransition * > Transitions)
Definition VulkanContext.cpp:217
FVulkanQueue & Queue
Definition VulkanContext.h:153
void AddSubmissionEvent(const FGraphEventRef &InEvent)
Definition VulkanContext.h:169
void FlushCommands(EVulkanFlushFlags FlushFlags=EVulkanFlushFlags::None)
Definition VulkanContext.cpp:105
void AddWaitSemaphores(VkPipelineStageFlags InWaitFlags, TArrayView< FVulkanSemaphore * > InWaitSemaphores)
Definition VulkanContext.h:107
void FreeUnusedCmdBuffers(bool bTrimMemory)
Definition VulkanContext.cpp:165
void AddSignalSemaphores(TArrayView< FVulkanSemaphore * > InSignalSemaphores)
Definition VulkanContext.h:128
EPhase
Definition VulkanContext.h:62
virtual ~FVulkanContextCommon()
Definition VulkanContext.cpp:25
FVulkanCommandBuffer & GetCommandBuffer()
Definition VulkanContext.h:90
void AddPendingSyncPoint(const FVulkanSyncPointRef &InSyncs)
Definition VulkanContext.h:163
void FlushPendingSyncPoints()
Definition VulkanContext.h:176
Definition VulkanDescriptorSets.h:363
Definition VulkanDescriptorSets.h:245
Definition VulkanDevice.h:279
Definition VulkanDynamicRHI.h:69
Definition VulkanFramebuffer.h:8
Definition VulkanGPUProfiler.h:23
Definition VulkanSubmission.h:148
TArray< FVulkanCommandBuffer * > CommandBuffers
Definition VulkanSubmission.h:174
TStaticArray< TArray< FVulkanQueryPool * >,(int32) EVulkanQueryPoolType::Count > QueryPools
Definition VulkanSubmission.h:188
TArray< FGraphEventRef > SubmissionEvents
Definition VulkanSubmission.h:178
TArray< FVulkanSemaphore * > WaitSemaphores
Definition VulkanSubmission.h:173
TArray< FVulkanSemaphore * > SignalSemaphores
Definition VulkanSubmission.h:175
TArray< FVulkanSyncPointRef > SyncPoints
Definition VulkanSubmission.h:185
TArray< VkPipelineStageFlags > WaitFlags
Definition VulkanSubmission.h:172
Definition VulkanPendingState.h:21
Definition VulkanPendingState.h:121
Definition VulkanQuery.h:49
Definition VulkanQueue.h:53
Definition VulkanRenderpass.h:453
Definition VulkanRenderTargetLayout.h:8
Definition VulkanSynchronization.h:127
Definition VulkanSwapChain.h:30
static FVulkanSyncPointRef Create(EVulkanSyncPointType Type, const TCHAR *InDebugName)
Definition VulkanSubmission.h:77
Definition VulkanResources.h:957
Definition VulkanContext.h:494
static TLockFreePointerListUnordered< FVulkanUploadContext, PLATFORM_CACHE_LINE_SIZE > Pool
Definition VulkanContext.h:505
static FVulkanUploadContext & Get(FRHICommandListBase &RHICmdList)
Definition VulkanContext.h:497
virtual ~FVulkanUploadContext()
Definition VulkanContext.cpp:762
static void DestroyPool()
Definition VulkanContext.cpp:748
Definition RHIContext.h:693
virtual void RHIDispatchIndirectMeshShader(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)
Definition RHIContext.h:821
virtual void RHIDispatchMeshShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)
Definition RHIContext.h:816
FRHIRenderPassInfo RenderPassInfo
Definition RHIContext.h:882
Definition RHIContext.h:257
IRHIComputeContext & GetLowestLevelContext()
Definition RHIContext.h:506
UE::RHI::GPUProfiler::FEvent::FStats StatEvent
Definition RHIContext.h:567
Definition RHIContext.h:573
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType & Last(SizeType IndexFromTheEnd=0) UE_LIFETIMEBOUND
Definition Array.h:1263
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Append(const TArray< OtherElementType, OtherAllocatorType > &Source)
Definition Array.h:2412
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition LockFreeList.h:904
Definition UnrealString.h.inl:34
Definition RHIPipeline.h:55
Definition SharedPointer.h:692
Definition StaticArray.h:26
U16 Index
Definition radfft.cpp:71
Definition Color.h:48
Definition RHICommandList.h:212
Definition RHICommandList.h:183
Definition RHIResources.h:5548
Definition RHIResources.h:5248
Definition RHIContext.h:590
Definition RHICommandList.h:267
Definition RHIContext.h:600
Definition RHICommandList.h:248
Definition RHI.h:507
Definition VulkanContext.h:517
FVulkanContextArray(FRHIContextArray const &Contexts)
Definition VulkanContext.h:523
FVulkanContextArray()
Definition VulkanContext.h:518
Definition VulkanContext.h:37
VkRenderingAttachmentInfo StencilAttachmentInfo
Definition VulkanContext.h:40
VkRenderingAttachmentInfo DepthAttachmentInfo
Definition VulkanContext.h:39
TStaticArray< VkRenderingAttachmentInfo, MaxSimultaneousRenderTargets > ColorAttachmentInfos
Definition VulkanContext.h:38
VkRenderingInfo RenderingInfo
Definition VulkanContext.h:42
VkRenderingFragmentShadingRateAttachmentInfoKHR FragmentShadingRateAttachmentInfo
Definition VulkanContext.h:41
Definition VulkanGPUProfiler.h:180
Definition VulkanContext.h:46
FVulkanDynamicRenderingInfo * DynamicRenderingInfo
Definition VulkanContext.h:48
std::atomic< int32 > NumParallelContexts
Definition VulkanContext.h:50
TArray< FVulkanPayload * > SecondaryPayloads
Definition VulkanContext.h:49
VkRenderPass RenderPassHandle
Definition VulkanContext.h:47
FVulkanUploadContext TConcreteType
Definition VulkanContext.h:512
Definition VulkanResources.h:1168
Definition GPUProfiler.h:196