UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RHIContext.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 RHIContext.h: Interface for RHI Contexts
5=============================================================================*/
6
7#pragma once
8
10#include "Math/Color.h"
11#include "Math/IntPoint.h"
12#include "Math/IntRect.h"
13#include "Math/Box2D.h"
16#include "Math/ScaleMatrix.h"
17#include "Math/Float16Color.h"
19#include "RHIBreadcrumbs.h"
20#include "RHIResources.h"
21#include "RHIShaderParameters.h"
22#include "GPUProfiler.h"
23
28struct FViewportBounds;
36enum class ERayTracingBindingType : uint8;
37enum class EAsyncComputeBudget;
38
39struct FRHIBufferRange;
41struct FRHIDrawStats;
43
44
45#define VALIDATE_UNIFORM_BUFFER_STATIC_BINDINGS (!UE_BUILD_SHIPPING && !UE_BUILD_TEST)
46
49{
50public:
52
53 template <typename... TArgs>
55 {
56 std::initializer_list<FRHIUniformBuffer*> InitList = { Args... };
57
59 {
61 }
62 }
63
65
67
75
77 {
78 return UniformBuffers.Num();
79 }
80
82 {
83 return UniformBuffers[Index];
84 }
85
87 {
88 return Slots[Index];
89 }
90
92 {
93 return SlotCount;
94 }
95
97 {
98 return ShaderBindingLayout;
99 }
100
101 RHI_API void Bind(TArray<FRHIUniformBuffer*>& Bindings) const;
102
103private:
104 static const uint32 InlineUniformBufferCount = 8;
107 int32 SlotCount = 0;
108
109 // Shader binding layout used during shader generation to validate runtime bindings and know where uniform buffers need to be bound
110 const FRHIShaderBindingLayout* ShaderBindingLayout = nullptr;
111};
112
122
131
133{
134#if WITH_MGPU
136#else
137 return nullptr;
138#endif
139}
140
142{
143#if WITH_MGPU
144 return new FCrossGPUTransferFence;
145#else
146 return nullptr;
147#endif
148}
149
152{
154
160
166
172
173 void SetRect(const FIntRect& Rect)
174 {
175 // Do nothing if this isn't a texture
176 if (!Texture)
177 {
178 return;
179 }
180
181 // Reset the extents to default (zero), if the rect is empty or covers the full extent of the texture. Forces a more efficient full resource copy.
182 if (Rect.IsEmpty() || (Rect.Min.X == 0 && Rect.Min.Y == 0 && Rect.Max.X == Texture->GetDesc().Extent.X && Rect.Max.Y == Texture->GetDesc().Extent.Y))
183 {
184 Min = FIntVector3(0);
185 Max = FIntVector3(0);
186 return;
187 }
188
189 // Initialize the extent
190 Min = FIntVector3(Rect.Min.X, Rect.Min.Y, 0);
191 Max = FIntVector3(Rect.Max.X, Rect.Max.Y, 1);
192 }
193
194 // The texture which must be must be allocated on both GPUs
196 // Or alternately, a buffer that's allocated on both GPUs
198 // The min rect of the texture region to copy
200 // The max rect of the texture region to copy
202 // The GPU index where the data will be read from.
204 // The GPU index where the data will be written to.
206 // Whether the data is read by the dest GPU, or written by the src GPU (not allowed if the texture is a backbuffer)
207 bool bPullData = true;
208 // Whether the GPUs must handshake before and after the transfer. Required if the texture rect is being written to in several render passes.
209 // Otherwise, minimal synchronization will be used.
210 bool bLockStepGPUs = true;
226};
227
228//
229// Type representing a finalized platform GPU command list, which can be submitted to the GPU via RHISubmitCommandLists().
230// This type is intended only for use by RHI command list management. Platform RHIs provide the implementation.
231// Also contains RHI breadcrumb allocators and ranges that platform RHIs must use if they implement GPU crash debugging.
232//
234{
235 // Prevent copying
237 IRHIPlatformCommandList& operator = (IRHIPlatformCommandList const&) = delete;
238
239protected:
240 // Allow moving
243
244 // This type is only usable by derived types (platform RHI implementations)
247
248public:
249#if WITH_RHI_BREADCRUMBS
252#endif
253};
254
257{
258public:
260 {
261 }
262
263 virtual ERHIPipeline GetPipeline() const
264 {
266 }
267
268 virtual void RHISetComputePipelineState(FRHIComputePipelineState* ComputePipelineState) = 0;
269
270 virtual void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ) = 0;
271
278
285
286 virtual void RHIDispatchIndirectComputeShader(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) = 0;
287
290
292
294
304 virtual void RHIClearUAVFloat(FRHIUnorderedAccessView* UnorderedAccessViewRHI, const FVector4f& Values) = 0;
305
315 virtual void RHIClearUAVUint(FRHIUnorderedAccessView* UnorderedAccessViewRHI, const FUintVector4& Values) = 0;
316
317 virtual void RHISetShaderRootConstants(const FUint32Vector4& Constants)
318 {
319 checkNoEntry();
320 }
321
328
336
337 virtual void RHIBeginUAVOverlap() {}
338 virtual void RHIEndUAVOverlap() {}
339
342
344
356
358 {
359 checkf(false, TEXT("RHISetShaderUnbinds called when the active RHI hasn't overridden it and GRHIGlobals.NeedsShaderUnbinds is set."));
360 }
361
363
365
367 {
368 /* empty default implementation */
369 }
370
371#if WITH_RHI_BREADCRUMBS
374#endif
375
387
393 {
394 check(false);
395 }
396
397 virtual void RHISetGPUMask(FRHIGPUMask GPUMask)
398 {
399 ensure(GPUMask == FRHIGPUMask::GPU0());
400 }
401
403 {
404 return FRHIGPUMask::GPU0();
405 }
406
407#if WITH_MGPU
413 {
414 /* empty default implementation */
415 }
416
417 /*
418 * Signal where a cross GPU resource transfer can start. Useful when the destination resource of a copy may still be in use, and
419 * the copy from the source GPUs needs to wait until the destination is finished with it. SrcGPUMask must not overlap the current
420 * GPU mask of the context (which specifies the destination GPUs), and the number of items in the "FenceDatas" array MUST match the
421 * number of bits set in SrcGPUMask.
422 */
424 {
425 /* default noop implementation */
427 {
428 delete FenceData;
429 }
430 }
431
433 {
434 /* default noop implementation */
436 {
437 delete FenceData;
438 }
439 }
440
448 {
450 }
451
453 {
454 /* default noop implementation */
455 for (FCrossGPUTransferFence* SyncPoint : PreTransfer)
456 {
457 delete SyncPoint;
458 }
459 }
460
462 {
463 /* default noop implementation */
464 for (FCrossGPUTransferFence* SyncPoint : SyncPoints)
465 {
466 delete SyncPoint;
467 }
468 }
469#endif // WITH_MGPU
470
475
480
485
490
491#if ENABLE_RHI_VALIDATION
492
493 RHIValidation::FTracker* Tracker = nullptr;
495
496 // Always returns the platform RHI context, even when the validation RHI is active.
497 virtual IRHIComputeContext& GetLowestLevelContext() { return *this; }
498
499 // Returns the validation RHI context if the validation RHI is active, otherwise returns the platform RHI context.
502
503#else
504
505 // Fast implementations when the RHI validation layer is disabled.
507
508 IRHIComputeContext const& GetHighestLevelContext() const { return *this; }
510
511#endif
512
513#if ENABLE_RHI_VALIDATION
514 virtual
515#endif
517 {
518 Info.Resource->SetTrackedAccessFromContext(Info);
519 }
520
522 {
523 check(Resource);
524 return Resource->TrackedAccess.Access;
525 }
526
528 {
529 check(Resource);
530 // The assumption is that all resources begin life on the gfx pipe
531 return Resource->TrackedAccess.Pipelines != ERHIPipeline::None ? Resource->TrackedAccess.Pipelines : ERHIPipeline::Graphics;
532 }
533
534 virtual void* RHIGetNativeCommandBuffer() { return nullptr; }
536
537private:
538 // Pointer to the RHI command list that is replaying commands into this context.
539 class FRHICommandListBase* ExecutingCmdList = nullptr;
540
541public:
542 // Returns the RHI command list that is currently replaying commands into this context.
544 {
545 check(ExecutingCmdList);
546 return *ExecutingCmdList;
547 }
548
549 // Used within FRHICommandListBase::ActivatePipeline to setup a context for command execution.
551 {
552 ExecutingCmdList = InCmdList;
553 }
554
555#if WITH_RHI_BREADCRUMBS
556 //
557 // Returns true if RHI breadcrumb strings should be emitted to platform GPU profiling APIs.
558 // Platform RHI implementations should check for this inside RHIBeginBreadcrumbGPU and RHIEndBreadcrumbGPU.
559 //
560 inline bool ShouldEmitBreadcrumbs() const;
561#endif
562
563protected:
564#if RHI_NEW_GPU_PROFILER
565 // Used to accumulate draw call and primitive counts,
566 // via the RHI_DRAW_CALL_INC / RHI_DRAW_CALL_STATS macros.
568#endif
569};
570
573{};
574
575// Utility function to generate pre-transfer sync points to pass to CrossGPUTransferSignal and CrossGPUTransfer
577
579{
580 // Perform a full acceleration structure build.
581 Build,
582
583 // Update existing acceleration structure, based on new vertex positions.
584 // Index buffer must not change between initial build and update operations.
585 // Only valid when geometry was created with FRayTracingGeometryInitializer::bAllowUpdate = true.
586 Update,
587};
588
590{
593
594 // Optional array of geometry segments that can be used to change per-segment vertex buffers.
595 // Only fields related to vertex buffer are used. If empty, then geometry vertex buffers are not changed.
597};
598
600{
601 // Scene to be built. May be null if explicit instance buffer is provided.
603
604 // Acceleration structure will be written to this buffer. The buffer must be in BVHWrite state.
607
608 // Scratch buffer used to build Acceleration structure. Must be in UAV state.
611
612 // Buffer of native ray tracing instance descriptors. Must be in SRV state.
615
616 // Buffer of native ray tracing hit contribution buffer. Must be in SRV state.
617 // Only used when RequiresSeparateHitGroupContributionsBuffer is set
620
622
623 // Unique list of geometries referenced by all instances in this scene.
624 // Any referenced geometry is kept alive while the scene is alive.
626
627 UE_DEPRECATED(5.6, "No longer necessary.")
629
631
640};
641
643{
645
647 {
648 static const uint32 InAdditionalResourceCount = 4;
650
652 {
653 uint64 ResultCountOffsetInBytes = 0; // Offset (in bytes) to where the count is in the ResultCount resource
654 uint64 DescriptorsOffsetInBytes = 0; // Offset (in bytes) to where the descriptors array starts in the Descriptors resource
655 uint64 ScratchOffsetInBytes = 0; // Offset (in bytes) to where the scratch memory starts in the Scratch resource
656
657 FRHIBuffer* ResultCount = nullptr; // The number of AS to build, instantiate, or move
658 FRHIBuffer* Descriptors = nullptr; // Array of descriptors
659 FRHIBuffer* Scratch = nullptr; // Scratch memory
660
661 FAdditionalResourcesArray AdditionalResources; // List of additional resources that need to be resident for this operation
662 } In;
663
665 {
666 uint64 AddressesOffsetInBytes = 0; // Offset (in bytes) to where the addresses array starts in the Addresses resource
667
668 FRHIBuffer* Addresses = nullptr; // Addresseses of CLAS, CLAS Templates, or BLAS
669 } InOut;
670
672 {
673 uint64 SizesOffsetInBytes = 0; // Offset (in bytes) to where the output sizes array starts in the Sizes resource
674 uint64 AccelerationStructuresOffsetInBytes = 0; // Offset (in bytes) to where the output acceleration structures array starts in the AccelerationStructures resource
675
676 FRHIBuffer* Sizes = nullptr; // Sizes (in bytes) of CLAS, CLAS Templates, or BLAS
677 FRHIBuffer* AccelerationStructures = nullptr; // CLAS, CLAS Template, or BLAS
678 } Out;
679 } Resources;
680};
681
690
693{
694public:
696 {
697 }
698
699 virtual ERHIPipeline GetPipeline() const override
700 {
702 }
703
704 virtual void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ) = 0;
705
706 virtual void RHIDispatchIndirectComputeShader(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) = 0;
707
708 // Useful when used with geometry shader (emit polygons to different viewports), otherwise SetViewPort() is simpler
709 // @param Count >0
710 // @param Data must not be 0
711 virtual void RHISetMultipleViewports(uint32 Count, const FViewportBounds* Data) = 0;
712
717 virtual void RHIResummarizeHTile(FRHITexture* DepthTexture)
718 {
719 /* empty default implementation */
720 }
721
723
725
726#if (RHI_NEW_GPU_PROFILER == 0)
727 virtual void RHICalibrateTimers(FRHITimestampCalibrationQuery* CalibrationQuery)
728 {
729 /* empty default implementation */
730 }
731#endif
732
733 // This method is queued with an RHIThread, otherwise it will flush after it is queued; without an RHI thread there is no benefit to queuing this frame advance commands
734 virtual void RHIEndDrawingViewport(FRHIViewport* Viewport, bool bPresent, bool bLockToVsync) = 0;
735
737
738 // @param MinX including like Win32 RECT
739 // @param MinY including like Win32 RECT
740 // @param MaxX excluding like Win32 RECT
741 // @param MaxY excluding like Win32 RECT
742 virtual void RHISetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ) = 0;
743
744 virtual void RHISetStereoViewport(float LeftMinX, float RightMinX, float LeftMinY, float RightMinY, float MinZ, float LeftMaxX, float RightMaxX, float LeftMaxY, float RightMaxY, float MaxZ)
745 {
746 /* empty default implementation */
747 }
748
749 // @param MinX including like Win32 RECT
750 // @param MinY including like Win32 RECT
751 // @param MaxX excluding like Win32 RECT
752 // @param MaxY excluding like Win32 RECT
753 virtual void RHISetScissorRect(bool bEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY) = 0;
754
756
757#if PLATFORM_USE_FALLBACK_PSO
758 virtual void RHISetGraphicsPipelineState(const FGraphicsPipelineStateInitializer& PsoInit, uint32 StencilRef, bool bApplyAdditionalState) = 0;
759#endif
760
761 // Inherit the parent context's RHISet functions that take FRHIComputeShader arguments
762 // Required to avoid warning C4263 : 'function' : member function does not override any base class virtual member function
766
768
770 {
771 RHISetShaderParameters(
772 InShader,
773 InBatchedParameters.ParametersData,
774 InBatchedParameters.Parameters,
775 InBatchedParameters.ResourceParameters,
776 InBatchedParameters.BindlessParameters);
777
778 InBatchedParameters.Reset();
779 }
780
782 {
783 checkf(false, TEXT("RHISetShaderUnbinds called when the active RHI hasn't overridden it and GRHIGlobals.NeedsShaderUnbinds is set."));
784 }
785
787
788 virtual void RHISetBlendFactor(const FLinearColor& BlendFactor) {}
789
790 virtual void RHIDrawPrimitive(uint32 BaseVertexIndex, uint32 NumPrimitives, uint32 NumInstances) = 0;
791
792 virtual void RHIDrawPrimitiveIndirect(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) = 0;
793
795
796 // @param NumPrimitives need to be >0
797 virtual void RHIDrawIndexedPrimitive(FRHIBuffer* IndexBuffer, int32 BaseVertexIndex, uint32 FirstInstance, uint32 NumVertices, uint32 StartIndex, uint32 NumPrimitives, uint32 NumInstances) = 0;
798
799 virtual void RHIDrawIndexedPrimitiveIndirect(FRHIBuffer* IndexBuffer, FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset) = 0;
800
815
816 virtual void RHIDispatchMeshShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)
817 {
818 /* empty default implementation */
819 }
820
821 virtual void RHIDispatchIndirectMeshShader(FRHIBuffer* ArgumentBuffer, uint32 ArgumentOffset)
822 {
823 /* empty default implementation */
824 }
825
832 virtual void RHISetDepthBounds(float MinDepth, float MaxDepth) = 0;
833
835 {
836 /* empty default implementation */
837 }
838
839 virtual void RHISetShadingRate(EVRSShadingRate ShadingRate, EVRSRateCombiner Combiner)
840 {
841 /* empty default implementation */
842 }
843
845 {
846 /* empty default implementation */
847 }
848
850 {
851 /* empty default implementation */
852 }
853
854 virtual void RHIBeginRenderPass(const FRHIRenderPassInfo& InInfo, const TCHAR* InName) = 0;
855
856 virtual void RHIEndRenderPass() = 0;
857
858 virtual void RHINextSubpass()
859 {
860 }
861
862 virtual void RHICopyTexture(FRHITexture* SourceTexture, FRHITexture* DestTexture, const FRHICopyTextureInfo& CopyInfo) = 0;
863
864 virtual void RHICopyBufferRegion(FRHIBuffer* DestBuffer, uint64 DstOffset, FRHIBuffer* SourceBuffer, uint64 SrcOffset, uint64 NumBytes) = 0;
865
870
875
880
881protected:
883};
884
885
886
888 FRHIVertexDeclaration* VertexDeclaration,
891 FRHIGeometryShader* GeometryShader
892);
893
895 FRHIAmplificationShader* AmplificationShader,
898);
899
900
901// Command Context for RHIs that do not support real Graphics/Compute Pipelines.
903{
904public:
905 virtual void RHISetBoundShaderState(FRHIBoundShaderState* BoundShaderState) = 0;
907 virtual void RHISetRasterizerState(FRHIRasterizerState* NewState) = 0;
908 virtual void RHISetBlendState(FRHIBlendState* NewState, const FLinearColor& BlendFactor) = 0;
909 virtual void RHIEnableDepthBoundsTest(bool bEnable) = 0;
911
921
922#if PLATFORM_USE_FALLBACK_PSO
923 virtual void RHISetGraphicsPipelineState(const FGraphicsPipelineStateInitializer& PsoInit, uint32 StencilRef, bool bApplyAdditionalState) override
924 {
925 SetGraphicsPipelineStateFromInitializer(PsoInit, StencilRef, bApplyAdditionalState);
926 }
927#endif
928
929 virtual void RHISetComputePipelineState(FRHIComputePipelineState* ComputePipelineState)
930 {
932 {
933 RHISetComputeShader(FallbackState->GetComputeShader());
934 }
935 }
936
937private:
938 RHI_API void SetGraphicsPipelineStateFromInitializer(const FGraphicsPipelineStateInitializer& PsoInit, uint32 StencilRef, bool bApplyAdditionalState);
939};
#define check(expr)
Definition AssertionMacros.h:314
#define checkNoEntry()
Definition AssertionMacros.h:316
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
@ 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
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 X(Name, Desc)
Definition FormatStringSan.h:47
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
UE::Math::TIntVector3< int32 > FIntVector3
Definition MathFwd.h:92
ERHIAccess
Definition RHIAccess.h:11
ERayTracingBindingType
Definition RHICommandList.h:281
FBoundShaderStateRHIRef RHICreateBoundShaderState(FRHIVertexDeclaration *VertexDeclaration, FRHIVertexShader *VertexShader, FRHIPixelShader *PixelShader, FRHIGeometryShader *GeometryShader)
Definition DynamicRHI.h:1169
FTransferResourceFenceData * RHICreateTransferResourceFenceData()
Definition RHIContext.h:132
FCrossGPUTransferFence * RHICreateCrossGPUTransferFence()
Definition RHIContext.h:141
RHI_API void RHIGenerateCrossGPUPreTransferFences(TConstArrayView< FTransferResourceParams > Params, TArray< FCrossGPUTransferFence * > &OutPreTransfer)
EAccelerationStructureBuildMode
Definition RHIContext.h:579
uint8 FUniformBufferStaticSlot
Definition RHIDefinitions.h:722
ESyncComputeBudget
Definition RHIDefinitions.h:1331
EVRSRateCombiner
Definition RHIDefinitions.h:873
EAsyncComputeBudget
Definition RHIDefinitions.h:1317
EVRSShadingRate
Definition RHIDefinitions.h:860
ERHIPipeline
Definition RHIPipeline.h:13
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHIResources.h:4572
Definition RHIResources.h:966
Definition RHIResources.h:696
Definition RHIResources.h:733
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHIResources.h:5123
Definition RHIResources.h:1078
Definition RHIResources.h:1018
Definition RHIResources.h:4073
Definition RHIResources.h:686
Definition RHIResources.h:2387
Definition RHIResources.h:978
Definition RHIResources.h:5097
Definition RHIResources.h:1058
Definition RHIResources.h:947
Definition RHIResources.h:960
Definition RHIResources.h:972
Definition RHIResources.h:679
Definition RHIResources.h:3729
Definition RHIResources.h:1115
Definition RHIResources.h:3755
Definition RHIResources.h:984
Definition RHIResources.h:2444
Definition RHIResources.h:4018
Definition RHIResources.h:4167
Definition RHIShaderBindingLayout.h:72
Definition RHIResources.h:3863
Definition RHIResources.h:3919
Definition RHIResources.h:3981
Definition RHIResources.h:2153
virtual const FRHITextureDesc & GetDesc() const
Definition RHIResources.h:2170
Definition RHIResources.h:1232
Definition RHIResources.h:3294
Definition RHIResources.h:725
Definition RHIResources.h:954
Definition RHIResources.h:1265
Definition RHIResources.h:2515
Definition RHIContext.h:49
RHI_API void Bind(TArray< FRHIUniformBuffer * > &Bindings) const
Definition RHIContext.cpp:86
FUniformBufferStaticBindings(TArgs... Args)
Definition RHIContext.h:54
RHI_API void AddUniformBuffer(FRHIUniformBuffer *UniformBuffer)
Definition RHIContext.cpp:56
int32 GetSlotCount() const
Definition RHIContext.h:91
FUniformBufferStaticSlot GetSlot(int32 Index) const
Definition RHIContext.h:86
FRHIUniformBuffer * GetUniformBuffer(int32 Index) const
Definition RHIContext.h:81
int32 GetUniformBufferCount() const
Definition RHIContext.h:76
void TryAddUniformBuffer(FRHIUniformBuffer *UniformBuffer)
Definition RHIContext.h:68
const FRHIShaderBindingLayout * GetShaderBindingLayout() const
Definition RHIContext.h:96
Definition RHIContext.h:903
virtual void RHISetComputePipelineState(FRHIComputePipelineState *ComputePipelineState)
Definition RHIContext.h:929
virtual void RHISetComputeShader(FRHIComputeShader *ComputeShader)=0
virtual void RHISetGraphicsPipelineState(FRHIGraphicsPipelineState *GraphicsState, uint32 StencilRef, bool bApplyAdditionalState) override
Definition RHIContext.h:916
virtual void RHIEnableDepthBoundsTest(bool bEnable)=0
virtual void RHISetRasterizerState(FRHIRasterizerState *NewState)=0
virtual void RHISetBoundShaderState(FRHIBoundShaderState *BoundShaderState)=0
virtual void RHISetDepthStencilState(FRHIDepthStencilState *NewState, uint32 StencilRef)=0
virtual void RHISetBlendState(FRHIBlendState *NewState, const FLinearColor &BlendFactor)=0
Definition RHIContext.h:693
virtual void RHIDrawIndexedIndirect(FRHIBuffer *IndexBufferRHI, FRHIBuffer *ArgumentsBufferRHI, int32 DrawArgumentsIndex, uint32 NumInstances)=0
virtual void RHINextSubpass()
Definition RHIContext.h:858
virtual void RHISetStereoViewport(float LeftMinX, float RightMinX, float LeftMinY, float RightMinY, float MinZ, float LeftMaxX, float RightMaxX, float LeftMaxY, float RightMaxY, float MaxZ)
Definition RHIContext.h:744
virtual void RHISetStreamSource(uint32 StreamIndex, FRHIBuffer *VertexBuffer, uint32 Offset)=0
virtual void RHIDrawIndexedPrimitive(FRHIBuffer *IndexBuffer, int32 BaseVertexIndex, uint32 FirstInstance, uint32 NumVertices, uint32 StartIndex, uint32 NumPrimitives, uint32 NumInstances)=0
void RHISetBatchedShaderParameters(FRHIGraphicsShader *InShader, FRHIBatchedShaderParameters &InBatchedParameters)
Definition RHIContext.h:769
virtual void RHIDrawPrimitiveIndirect(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)=0
virtual void RHICommitShaderBindingTable(FRHIShaderBindingTable *SBT, FRHIBuffer *InlineBindingDataBuffer)
Definition RHIContext.h:876
virtual void RHICopyBufferRegion(FRHIBuffer *DestBuffer, uint64 DstOffset, FRHIBuffer *SourceBuffer, uint64 SrcOffset, uint64 NumBytes)=0
virtual void RHISetBlendFactor(const FLinearColor &BlendFactor)
Definition RHIContext.h:788
virtual void RHIBeginRenderQuery(FRHIRenderQuery *RenderQuery)=0
virtual void RHISetShaderUnbinds(FRHIGraphicsShader *Shader, TConstArrayView< FRHIShaderParameterUnbind > InUnbinds)
Definition RHIContext.h:781
virtual ~IRHICommandContext()
Definition RHIContext.h:695
virtual void RHIResummarizeHTile(FRHITexture *DepthTexture)
Definition RHIContext.h:717
virtual void RHIDispatchIndirectMeshShader(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)
Definition RHIContext.h:821
virtual void RHIDispatchIndirectComputeShader(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)=0
virtual void RHIEndRenderQuery(FRHIRenderQuery *RenderQuery)=0
virtual void RHISetBindingsOnShaderBindingTable(FRHIShaderBindingTable *SBT, FRHIRayTracingPipelineState *Pipeline, uint32 NumBindings, const FRayTracingLocalShaderBindings *Bindings, ERayTracingBindingType BindingType)
Definition RHIContext.h:871
virtual void RHIBeginParallelRenderPass(TSharedPtr< FRHIParallelRenderPassInfo > InInfo, const TCHAR *InName)
Definition RHIContext.h:844
virtual void RHIEndDrawingViewport(FRHIViewport *Viewport, bool bPresent, bool bLockToVsync)=0
virtual void RHIDrawIndexedPrimitiveIndirect(FRHIBuffer *IndexBuffer, FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)=0
virtual void RHISetDepthBounds(float MinDepth, float MaxDepth)=0
virtual void RHISetShadingRate(EVRSShadingRate ShadingRate, EVRSRateCombiner Combiner)
Definition RHIContext.h:839
virtual void RHIEndRenderPass()=0
virtual void RHIDispatchMeshShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)
Definition RHIContext.h:816
virtual void RHIEndParallelRenderPass()
Definition RHIContext.h:849
virtual void RHIClearShaderBindingTable(FRHIShaderBindingTable *SBT)
Definition RHIContext.h:866
virtual void RHIBeginRenderPass(const FRHIRenderPassInfo &InInfo, const TCHAR *InName)=0
virtual void RHISetGraphicsPipelineState(FRHIGraphicsPipelineState *GraphicsState, uint32 StencilRef, bool bApplyAdditionalState)=0
virtual void RHIDrawPrimitive(uint32 BaseVertexIndex, uint32 NumPrimitives, uint32 NumInstances)=0
virtual void RHISetViewport(float MinX, float MinY, float MinZ, float MaxX, float MaxY, float MaxZ)=0
virtual void RHIMultiDrawIndexedPrimitiveIndirect(FRHIBuffer *IndexBuffer, FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset, FRHIBuffer *CountBuffer, uint32 CountBuffeOffset, uint32 MaxDrawArguments)
Definition RHIContext.h:811
FRHIRenderPassInfo RenderPassInfo
Definition RHIContext.h:882
virtual void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)=0
virtual void RHISetScissorRect(bool bEnable, uint32 MinX, uint32 MinY, uint32 MaxX, uint32 MaxY)=0
virtual ERHIPipeline GetPipeline() const override
Definition RHIContext.h:699
virtual void RHISetMultipleViewports(uint32 Count, const FViewportBounds *Data)=0
virtual void RHICopyTexture(FRHITexture *SourceTexture, FRHITexture *DestTexture, const FRHICopyTextureInfo &CopyInfo)=0
virtual void RHISetStencilRef(uint32 StencilRef)
Definition RHIContext.h:786
virtual void RHIGpuHangCommandListCorruption()
Definition RHIContext.h:834
virtual void RHISetShaderParameters(FRHIGraphicsShader *Shader, TConstArrayView< uint8 > InParametersData, TConstArrayView< FRHIShaderParameter > InParameters, TConstArrayView< FRHIShaderParameterResource > InResourceParameters, TConstArrayView< FRHIShaderParameterResource > InBindlessParameters)=0
Definition RHIContext.h:257
virtual void RHISetStaticUniformBuffer(FUniformBufferStaticSlot Slot, FRHIUniformBuffer *UniformBuffer)=0
virtual void RHIDispatchComputeShaderBundle(FRHIShaderBundle *ShaderBundle, FRHIBuffer *RecordArgBuffer, TConstArrayView< FRHIShaderParameterResource > SharedBindlessParameters, TConstArrayView< FRHIShaderBundleComputeDispatch > Dispatches, bool bEmulated)
Definition RHIContext.h:322
ERHIPipeline GetTrackedPipelines(const FRHIViewableResource *Resource) const
Definition RHIContext.h:527
virtual void RHIBeginUAVOverlap()
Definition RHIContext.h:337
virtual void RHISetStaticUniformBuffers(const FUniformBufferStaticBindings &InUniformBuffers)=0
IRHIComputeContext & GetHighestLevelContext()
Definition RHIContext.h:509
IRHIComputeContext & GetLowestLevelContext()
Definition RHIContext.h:506
virtual void RHISetShaderUnbinds(FRHIComputeShader *ComputeShader, TConstArrayView< FRHIShaderParameterUnbind > InUnbinds)
Definition RHIContext.h:357
virtual void RHIClearUAVFloat(FRHIUnorderedAccessView *UnorderedAccessViewRHI, const FVector4f &Values)=0
virtual void RHIEndUAVOverlap()
Definition RHIContext.h:338
UE::RHI::GPUProfiler::FEvent::FStats StatEvent
Definition RHIContext.h:567
virtual void RHIBuildAccelerationStructures(TConstArrayView< FRayTracingGeometryBuildParams > Params, const FRHIBufferRange &ScratchBufferRange)
Definition RHIContext.h:476
void SetTrackedAccess(const FRHITrackedAccessInfo &Info)
Definition RHIContext.h:516
virtual void RHIEndTransitions(TArrayView< const FRHITransition * > Transitions)=0
virtual void RHISetUniformBufferDynamicOffset(FUniformBufferStaticSlot Slot, uint32 Offset)
Definition RHIContext.h:366
virtual void RHIBuildAccelerationStructures(TConstArrayView< FRayTracingSceneBuildParams > Params)
Definition RHIContext.h:481
IRHIComputeContext const & GetHighestLevelContext() const
Definition RHIContext.h:508
virtual void RHIBeginUAVOverlap(TConstArrayView< FRHIUnorderedAccessView * > UAVs)
Definition RHIContext.h:340
virtual void RHIPostExternalCommandsReset()
Definition RHIContext.h:535
virtual FRHIGPUMask RHIGetGPUMask() const
Definition RHIContext.h:402
virtual ERHIPipeline GetPipeline() const
Definition RHIContext.h:263
virtual void RHIBeginTransitions(TArrayView< const FRHITransition * > Transitions)=0
virtual void RHISetGPUMask(FRHIGPUMask GPUMask)
Definition RHIContext.h:397
virtual void RHISetShaderParameters(FRHIComputeShader *ComputeShader, TConstArrayView< uint8 > InParametersData, TConstArrayView< FRHIShaderParameter > InParameters, TConstArrayView< FRHIShaderParameterResource > InResourceParameters, TConstArrayView< FRHIShaderParameterResource > InBindlessParameters)=0
void RHISetBatchedShaderParameters(FRHIComputeShader *InShader, FRHIBatchedShaderParameters &InBatchedParameters)
Definition RHIContext.h:345
virtual void RHIEndUAVOverlap(TConstArrayView< FRHIUnorderedAccessView * > UAVs)
Definition RHIContext.h:341
virtual void RHISetComputeBudget(ESyncComputeBudget Budget)
Definition RHIContext.h:289
virtual void RHIBindAccelerationStructureMemory(FRHIRayTracingScene *Scene, FRHIBuffer *Buffer, uint32 BufferOffset)
Definition RHIContext.h:486
virtual void RHIDispatchGraphicsShaderBundle(FRHIShaderBundle *ShaderBundle, FRHIBuffer *RecordArgBuffer, const FRHIShaderBundleGraphicsState &BundleState, TConstArrayView< FRHIShaderParameterResource > SharedBindlessParameters, TConstArrayView< FRHIShaderBundleGraphicsDispatch > Dispatches, bool bEmulated)
Definition RHIContext.h:329
virtual void RHICopyToStagingBuffer(FRHIBuffer *SourceBufferRHI, FRHIStagingBuffer *DestinationStagingBufferRHI, uint32 InOffset, uint32 InNumBytes)
Definition RHIContext.h:383
virtual void RHIExecuteMultiIndirectClusterOperation(const FRayTracingClusterOperationParams &Params)
Definition RHIContext.h:471
virtual void RHIRayTraceDispatchIndirect(FRHIRayTracingPipelineState *RayTracingPipelineState, FRHIRayTracingShader *RayGenShader, FRHIShaderBindingTable *SBT, const FRayTracingShaderBindings &GlobalResourceBindings, FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)
Definition RHIContext.h:279
virtual void RHISetAsyncComputeBudget(EAsyncComputeBudget Budget)
Definition RHIContext.h:288
ERHIAccess GetTrackedAccess(const FRHIViewableResource *Resource) const
Definition RHIContext.h:521
virtual void SetExecutingCommandList(FRHICommandListBase *InCmdList)
Definition RHIContext.h:550
virtual void RHISetComputePipelineState(FRHIComputePipelineState *ComputePipelineState)=0
virtual void RHIWriteGPUFence(FRHIGPUFence *FenceRHI)
Definition RHIContext.h:392
FRHICommandListBase & GetExecutingCommandList() const
Definition RHIContext.h:543
virtual void RHIDispatchIndirectComputeShader(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)=0
virtual void RHIClearUAVUint(FRHIUnorderedAccessView *UnorderedAccessViewRHI, const FUintVector4 &Values)=0
virtual void RHIRayTraceDispatch(FRHIRayTracingPipelineState *RayTracingPipelineState, FRHIRayTracingShader *RayGenShader, FRHIShaderBindingTable *SBT, const FRayTracingShaderBindings &GlobalResourceBindings, uint32 Width, uint32 Height)
Definition RHIContext.h:272
virtual void RHISetShaderRootConstants(const FUint32Vector4 &Constants)
Definition RHIContext.h:317
virtual void RHIDispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)=0
virtual void * RHIGetNativeCommandBuffer()
Definition RHIContext.h:534
virtual ~IRHIComputeContext()
Definition RHIContext.h:259
Definition RHIContext.h:234
~IRHIPlatformCommandList()=default
IRHIPlatformCommandList(IRHIPlatformCommandList &&)=default
IRHIPlatformCommandList()=default
Definition RHIContext.h:573
Definition ArrayView.h:139
Definition Array.h:670
Definition SharedPointer.h:692
Definition StaticArray.h:26
U16 Index
Definition radfft.cpp:71
Definition RHIContext.h:683
uint64 SrcOffset
Definition RHIContext.h:687
uint64 DstOffset
Definition RHIContext.h:685
FRHIBuffer * DestBuffer
Definition RHIContext.h:684
uint64 NumBytes
Definition RHIContext.h:688
FRHIBuffer * SourceBuffer
Definition RHIContext.h:686
Definition RHIContext.h:124
FCrossGPUTransferFence()=default
void * SyncPoint
Definition RHIContext.h:127
uint32 SignalGPUIndex
Definition RHIContext.h:125
uint32 WaitGPUIndex
Definition RHIContext.h:126
Definition Color.h:48
Definition RHIShaderParameters.h:241
Definition RHICommandList.h:212
Definition RHICommandList.h:183
Definition RHIStats.h:137
Definition MultiGPU.h:33
static GPUMASK_CONSTEXPR FRHIGPUMask GPU0()
Definition MultiGPU.h:186
Definition RHIResources.h:5248
Definition RHIShaderParameters.h:414
FIntPoint Extent
Definition RHIResources.h:1856
Definition RHITransition.h:450
ERHIPipeline Pipelines
Definition RHITransition.h:446
ERHIAccess Access
Definition RHITransition.h:445
Definition RHIResources.h:3842
FAdditionalResourcesArray AdditionalResources
Definition RHIContext.h:661
TArray< FRHIBuffer *, TInlineAllocator< InAdditionalResourceCount > > FAdditionalResourcesArray
Definition RHIContext.h:649
Definition RHIContext.h:643
FRayTracingClusterOperationInitializer Initializer
Definition RHIContext.h:644
Definition RHIContext.h:590
EAccelerationStructureBuildMode BuildMode
Definition RHIContext.h:592
TConstArrayView< FRayTracingGeometrySegment > Segments
Definition RHIContext.h:596
FRayTracingGeometryRHIRef Geometry
Definition RHIContext.h:591
Definition RHIResources.h:3357
Definition RHIResources.h:3463
Definition RHICommandList.h:267
Definition RHIContext.h:600
TConstArrayView< FRHIRayTracingGeometry * > ReferencedGeometries
Definition RHIContext.h:625
uint32 ScratchBufferOffset
Definition RHIContext.h:610
FRHIBuffer * ScratchBuffer
Definition RHIContext.h:609
FRHIRayTracingScene * Scene
Definition RHIContext.h:602
FRHIBuffer * InstanceBuffer
Definition RHIContext.h:613
FRHIBuffer * ResultBuffer
Definition RHIContext.h:605
TConstArrayView< FRHIRayTracingGeometry * > PerInstanceGeometries
Definition RHIContext.h:628
uint32 InstanceBufferOffset
Definition RHIContext.h:614
uint32 ResultBufferOffset
Definition RHIContext.h:606
uint32 HitGroupContributionsBufferOffset
Definition RHIContext.h:619
EAccelerationStructureBuildMode BuildMode
Definition RHIContext.h:630
FRHIBuffer * HitGroupContributionsBuffer
Definition RHIContext.h:618
uint32 NumInstances
Definition RHIContext.h:621
Definition RHICommandList.h:248
Definition RHIContext.h:114
FTransferResourceFenceData()
Definition RHIContext.h:118
FRHIGPUMask Mask
Definition RHIContext.h:116
TStaticArray< void *, MAX_NUM_GPUS > SyncPoints
Definition RHIContext.h:115
Definition RHIContext.h:152
uint32 DestGPUIndex
Definition RHIContext.h:205
FBufferRHIRef Buffer
Definition RHIContext.h:197
FIntVector Min
Definition RHIContext.h:199
FTransferResourceFenceData * PreTransferFence
Definition RHIContext.h:225
FTransferResourceParams(FRHITexture *InTexture, const FIntRect &InRect, uint32 InSrcGPUIndex, uint32 InDestGPUIndex, bool InPullData, bool InLockStepGPUs)
Definition RHIContext.h:155
bool bPullData
Definition RHIContext.h:207
FTransferResourceParams(FRHITexture *InTexture, uint32 InSrcGPUIndex, uint32 InDestGPUIndex, bool InPullData, bool InLockStepGPUs)
Definition RHIContext.h:161
FIntVector Max
Definition RHIContext.h:201
bool bLockStepGPUs
Definition RHIContext.h:210
uint32 SrcGPUIndex
Definition RHIContext.h:203
void SetRect(const FIntRect &Rect)
Definition RHIContext.h:173
FTransferResourceParams(FRHIBuffer *InBuffer, uint32 InSrcGPUIndex, uint32 InDestGPUIndex, bool InPullData, bool InLockStepGPUs)
Definition RHIContext.h:167
FTransferResourceFenceData * DelayedFence
Definition RHIContext.h:218
FTransferResourceParams()
Definition RHIContext.h:153
FTextureRHIRef Texture
Definition RHIContext.h:195
Definition RHI.h:507
Definition LinuxPlatformSplash.cpp:43
IntType Y
Definition IntPoint.h:37
IntType X
Definition IntPoint.h:34
Definition GPUProfiler.h:196