UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RayTracingMeshDrawCommands.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 MeshPassProcessor.h
5=============================================================================*/
6
7#pragma once
8
9#include "MeshPassProcessor.h"
10#include "SpanAllocator.h"
11
14
16{
18 {
19 Data = 0;
20
21 bAllSegmentsOpaque = true;
24 bAnySegmentsDecal = false;
25 bAllSegmentsDecal = true;
26 bTwoSided = false;
27 bIsSky = false;
30 }
31
33 {
34 return CachedMeshCommandHash == Other.CachedMeshCommandHash &&
35 Data == Other.Data;
36 }
37
39 {
40 return !(*this == Other);
41 }
42
44 {
45 return HashCombine(GetTypeHash(Key.CachedMeshCommandHash), Key.Data);
46 }
47
49 union
50 {
51 struct
52 {
59 bool bTwoSided : 1;
60 bool bIsSky : 1;
63 };
65 };
66};
67
69{
70public:
73
77
78 bool bCastRayTracedShadows : 1 = true;
79 bool bOpaque : 1 = true;
80 bool bAlphaMasked : 1 = false;
81 bool bDecal : 1 = false;
82 bool bIsSky : 1 = false;
83 bool bIsTranslucent : 1 = false;
84 bool bTwoSided : 1 = false;
85 bool bReverseCulling : 1 = false;
86 bool bNaniteRayTracing : 1 = false;
87 bool bCanBeCached : 1 = false;
88
92 FRHIUniformBuffer* SceneUniformBuffer,
93 FRHIUniformBuffer* NaniteUniformBuffer,
94 uint32 RecordIndex,
95 const FRHIRayTracingGeometry* RayTracingGeometry,
96 uint32 SegmentIndex,
98 ERayTracingLocalShaderBindingType BindingType) const;
99
102
104
106
108 {
109 return ViewUniformBufferParameter.IsBound() ||
110 SceneUniformBufferParameter.IsBound() ||
111 NaniteUniformBufferParameter.IsBound();
112 }
113
114private:
115 FShaderUniformBufferParameter ViewUniformBufferParameter;
116 FShaderUniformBufferParameter SceneUniformBufferParameter;
117 FShaderUniformBufferParameter NaniteUniformBufferParameter;
118};
119
121{
122public:
124 {
125 const int32 StartOffset = Allocator.Allocate(Num);
126
127 {
128 const int32 MaxSize = Allocator.GetMaxSize();
129
130 if (MaxSize > Array.Num())
131 {
132 Array.SetNum(MaxSize);
133 }
134 }
135
136 return StartOffset;
137 }
138
139 void Free(int32 StartOffset, int32 Num)
140 {
141 Allocator.Free(StartOffset, Num);
142 }
143
145 {
146 return Array[Index];
147 }
148
150 {
151 return Array[Index];
152 }
153
154 bool IsEmpty() const
155 {
156 return Allocator.GetSparselyAllocatedSize() == 0;
157 }
158
159private:
161 FSpanAllocator Allocator;
162};
163
165{
166public:
167
168 // TODO: Deprecate and only support RayTracingMeshCommandIndex
184
200
205
206 const FRayTracingMeshCommand* RayTracingMeshCommand; // TODO: Deprecate and only support RayTracingMeshCommandIndex
212
219};
220
221template <>
223{
224 // Prevent Memcpy call overhead during FRayTracingShaderBindingData sorting
225 enum { Value = false };
226};
227
229
231{
232public:
233
235
237
238 virtual void FinalizeCommand(FRayTracingMeshCommand& RayTracingMeshCommand) = 0;
239};
240
242
243using FCachedRayTracingMeshCommandStorage UE_DEPRECATED(5.7, "Use FRayTracingMeshCommandStorage instead.") = TSparseArray<FRayTracingMeshCommand>;
244
246
247template<class T>
249{
250public:
252
254 {
255 CommandIndex = DrawListStorage.Add(Initializer);
256 return DrawListStorage[CommandIndex];
257 }
258
259 virtual void FinalizeCommand(FRayTracingMeshCommand& RayTracingMeshCommand) override final {}
260
262
263private:
264 T& DrawListStorage;
265};
266
268{
269public:
284
286 {
287 const int32 Index = DynamicCommandStorage.AddElement(Initializer);
288 FRayTracingMeshCommand& NewCommand = DynamicCommandStorage[Index];
289 NewCommand.GeometrySegmentIndex = GeometrySegmentIndex;
290 return NewCommand;
291 }
292
293 RENDERER_API virtual void FinalizeCommand(FRayTracingMeshCommand& RayTracingMeshCommand) override final;
294
295private:
296 FDynamicRayTracingMeshCommandStorage& DynamicCommandStorage;
298
299 const FRHIRayTracingGeometry* RayTracingGeometry;
300 uint32 GeometrySegmentIndex;
301
302 FRayTracingSBTAllocation* SBTAllocation;
303};
304
306{
307public:
310
313
317 FRHIUniformBuffer* SceneUniformBuffer,
318 FRHIUniformBuffer* NaniteUniformBuffer,
319 uint32 ShaderIndexInPipeline,
320 uint32 ShaderSlot) const;
321
324
325private:
326 FShaderUniformBufferParameter ViewUniformBufferParameter;
327 FShaderUniformBufferParameter SceneUniformBufferParameter;
328 FShaderUniformBufferParameter NaniteUniformBufferParameter;
329};
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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 PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
@ Num
Definition MetalRHIPrivate.h:234
ERayTracingLocalShaderBindingType
Definition RHICommandList.h:259
TArray< FRayTracingShaderBindingData, SceneRenderingAllocator > FRayTracingShaderBindingDataOneFrameArray
Definition RayTracingMeshDrawCommands.h:228
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RayTracingMeshDrawCommands.h:249
int32 CommandIndex
Definition RayTracingMeshDrawCommands.h:261
virtual void FinalizeCommand(FRayTracingMeshCommand &RayTracingMeshCommand) override final
Definition RayTracingMeshDrawCommands.h:259
virtual FRayTracingMeshCommand & AddCommand(const FRayTracingMeshCommand &Initializer) override final
Definition RayTracingMeshDrawCommands.h:253
FCachedRayTracingMeshCommandContext(T &InDrawListStorage)
Definition RayTracingMeshDrawCommands.h:251
Definition RayTracingMeshDrawCommands.h:268
virtual RENDERER_API void FinalizeCommand(FRayTracingMeshCommand &RayTracingMeshCommand) override final
virtual FRayTracingMeshCommand & AddCommand(const FRayTracingMeshCommand &Initializer) override final
Definition RayTracingMeshDrawCommands.h:285
FDynamicRayTracingMeshCommandContext(FDynamicRayTracingMeshCommandStorage &InDynamicCommandStorage, FRayTracingShaderBindingDataOneFrameArray &InShaderBindings, const FRHIRayTracingGeometry *InRayTracingGeometry, uint32 InGeometrySegmentIndex, FRayTracingSBTAllocation *InSBTAllocation)
Definition RayTracingMeshDrawCommands.h:271
Definition MeshPassProcessor.h:908
Definition RHIResources.h:3729
Definition RHIResources.h:984
Definition RHIResources.h:1232
Definition RayTracingGeometry.h:31
Definition RayTracingMeshDrawCommands.h:231
virtual FRayTracingMeshCommand & AddCommand(const FRayTracingMeshCommand &Initializer)=0
virtual ~FRayTracingMeshCommandContext()
Definition RayTracingMeshDrawCommands.h:234
virtual void FinalizeCommand(FRayTracingMeshCommand &RayTracingMeshCommand)=0
Definition RayTracingMeshDrawCommands.h:121
FRayTracingMeshCommand & operator[](int32 Index)
Definition RayTracingMeshDrawCommands.h:144
const FRayTracingMeshCommand & operator[](int32 Index) const
Definition RayTracingMeshDrawCommands.h:149
void Free(int32 StartOffset, int32 Num)
Definition RayTracingMeshDrawCommands.h:139
bool IsEmpty() const
Definition RayTracingMeshDrawCommands.h:154
int32 Allocate(int32 Num)
Definition RayTracingMeshDrawCommands.h:123
Definition RayTracingMeshDrawCommands.h:69
uint32 GeometrySegmentIndex
Definition RayTracingMeshDrawCommands.h:75
bool bCanBeCached
Definition RayTracingMeshDrawCommands.h:87
RENDERER_API void SetShader(const TShaderRef< FShader > &Shader)
uint8 InstanceMask
Definition RayTracingMeshDrawCommands.h:76
uint32 MaterialShaderIndex
Definition RayTracingMeshDrawCommands.h:74
bool HasGlobalUniformBufferBindings() const
Definition RayTracingMeshDrawCommands.h:107
FMeshDrawShaderBindings ShaderBindings
Definition RayTracingMeshDrawCommands.h:71
bool bIsTranslucent
Definition RayTracingMeshDrawCommands.h:83
bool bCastRayTracedShadows
Definition RayTracingMeshDrawCommands.h:78
bool bIsSky
Definition RayTracingMeshDrawCommands.h:82
bool bAlphaMasked
Definition RayTracingMeshDrawCommands.h:80
bool bTwoSided
Definition RayTracingMeshDrawCommands.h:84
FRHIRayTracingShader * MaterialShader
Definition RayTracingMeshDrawCommands.h:72
RENDERER_API void UpdateFlags(FRayTracingCachedMeshCommandFlags &Flags) const
RENDERER_API bool IsUsingNaniteRayTracing() const
RENDERER_API void SetRayTracingShaderBindingsForHitGroup(FRayTracingLocalShaderBindingWriter *BindingWriter, const TUniformBufferRef< FViewUniformShaderParameters > &ViewUniformBuffer, FRHIUniformBuffer *SceneUniformBuffer, FRHIUniformBuffer *NaniteUniformBuffer, uint32 RecordIndex, const FRHIRayTracingGeometry *RayTracingGeometry, uint32 SegmentIndex, uint32 HitGroupIndexInPipeline, ERayTracingLocalShaderBindingType BindingType) const
bool bDecal
Definition RayTracingMeshDrawCommands.h:81
bool bOpaque
Definition RayTracingMeshDrawCommands.h:79
bool bNaniteRayTracing
Definition RayTracingMeshDrawCommands.h:86
bool bReverseCulling
Definition RayTracingMeshDrawCommands.h:85
Definition RayTracingMeshDrawCommands.h:165
uint32 RayTracingMeshCommandIndex
Definition RayTracingMeshDrawCommands.h:208
FRayTracingShaderBindingData & operator=(const FRayTracingShaderBindingData &)=default
FRayTracingShaderBindingData(FRayTracingShaderBindingData &&)=default
const FRayTracingMeshCommand * RayTracingMeshCommand
Definition RayTracingMeshDrawCommands.h:206
const FRHIRayTracingGeometry * RayTracingGeometry
Definition RayTracingMeshDrawCommands.h:207
const FRayTracingMeshCommand & GetRayTracingMeshCommand(const FRayTracingMeshCommandStorage &Storage) const
Definition RayTracingMeshDrawCommands.h:201
uint32 SBTRecordIndex
Definition RayTracingMeshDrawCommands.h:209
ERayTracingLocalShaderBindingType BindingType
Definition RayTracingMeshDrawCommands.h:210
bool bHidden
Definition RayTracingMeshDrawCommands.h:211
FRayTracingShaderBindingData & operator=(FRayTracingShaderBindingData &&)=default
FRayTracingShaderBindingData(uint32 InRayTracingMeshCommandIndex, const FRHIRayTracingGeometry *InRayTracingGeometry, uint32 InSBTRecordIndex, ERayTracingLocalShaderBindingType InBindingType, bool bInHidden)
Definition RayTracingMeshDrawCommands.h:185
PRAGMA_DISABLE_DEPRECATION_WARNINGS FRayTracingShaderBindingData(const FRayTracingShaderBindingData &)=default
FRayTracingShaderBindingData(const FRayTracingMeshCommand *InRayTracingMeshCommand, const FRHIRayTracingGeometry *InRayTracingGeometry, uint32 InSBTRecordIndex, ERayTracingLocalShaderBindingType InBindingType, bool bInHidden)
Definition RayTracingMeshDrawCommands.h:169
Definition RayTracingMeshDrawCommands.h:306
FRHIRayTracingShader * Shader
Definition RayTracingMeshDrawCommands.h:309
FMeshDrawShaderBindings ShaderBindings
Definition RayTracingMeshDrawCommands.h:308
RENDERER_API void SetShader(const TShaderRef< FShader > &Shader)
RENDERER_API void SetRayTracingShaderBindings(FRayTracingLocalShaderBindingWriter *BindingWriter, const TUniformBufferRef< FViewUniformShaderParameters > &ViewUniformBuffer, FRHIUniformBuffer *SceneUniformBuffer, FRHIUniformBuffer *NaniteUniformBuffer, uint32 ShaderIndexInPipeline, uint32 ShaderSlot) const
uint32 SlotInScene
Definition RayTracingMeshDrawCommands.h:312
uint32 ShaderIndex
Definition RayTracingMeshDrawCommands.h:311
Definition ShaderParameters.h:109
bool IsBound() const
Definition ShaderParameters.h:128
Definition SpanAllocator.h:15
void Free(int32 BaseOffset, int32 Num=1)
Definition SpanAllocator.h:63
int32 GetMaxSize() const
Definition SpanAllocator.h:80
int32 GetSparselyAllocatedSize() const
Definition SpanAllocator.h:75
int32 Allocate(int32 Num=1)
Definition SpanAllocator.h:23
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
Definition ChunkedArray.h:56
int32 AddElement(const ElementType &Item)
Definition ChunkedArray.h:193
Definition Shader.h:1021
Definition SparseArray.h:524
Definition ShaderParameterMacros.h:136
U16 Index
Definition radfft.cpp:71
Definition RayTracingMeshDrawCommands.h:16
FRayTracingCachedMeshCommandFlags()
Definition RayTracingMeshDrawCommands.h:17
bool bAllSegmentsReverseCulling
Definition RayTracingMeshDrawCommands.h:62
bool bAllSegmentsCastShadow
Definition RayTracingMeshDrawCommands.h:55
bool bAllSegmentsTranslucent
Definition RayTracingMeshDrawCommands.h:61
friend uint32 GetTypeHash(const FRayTracingCachedMeshCommandFlags &Key)
Definition RayTracingMeshDrawCommands.h:43
uint32 Data
Definition RayTracingMeshDrawCommands.h:64
bool bTwoSided
Definition RayTracingMeshDrawCommands.h:59
uint64 CachedMeshCommandHash
Definition RayTracingMeshDrawCommands.h:48
bool operator==(const FRayTracingCachedMeshCommandFlags &Other) const
Definition RayTracingMeshDrawCommands.h:32
bool operator!=(const FRayTracingCachedMeshCommandFlags &Other) const
Definition RayTracingMeshDrawCommands.h:38
bool bIsSky
Definition RayTracingMeshDrawCommands.h:60
uint8 InstanceMask
Definition RayTracingMeshDrawCommands.h:53
bool bAnySegmentsCastShadow
Definition RayTracingMeshDrawCommands.h:56
bool bAnySegmentsDecal
Definition RayTracingMeshDrawCommands.h:57
bool bAllSegmentsDecal
Definition RayTracingMeshDrawCommands.h:58
bool bAllSegmentsOpaque
Definition RayTracingMeshDrawCommands.h:54
Definition UseBitwiseSwap.h:13
@ Value
Definition UseBitwiseSwap.h:15