13#include "LightSceneData.h"
37 class IShadowInvalidatingInstances;
42#if !ENABLE_SCENE_DATA_DX11_UB_ERROR_WORKAROUND
110 check(bCommitted || UploadData ==
nullptr);
111 return PrimitiveIdRange;
116 check(bCommitted || UploadData ==
nullptr);
118 return UploadData !=
nullptr ? UploadData->InstanceSceneDataOffset : 0;
123 check(bCommitted || UploadData ==
nullptr);
125 return UploadData !=
nullptr ? UploadData->InstancePayloadDataOffset : 0;
128 int32 Num()
const {
return UploadData !=
nullptr ? UploadData->PrimitiveData.Num() : 0; }
129 int32 NumInstances()
const {
return UploadData !=
nullptr ? UploadData->TotalInstanceCount : 0; }
146 struct FPrimitiveData
161 uint32 TotalInstanceCount = 0;
163 uint32 InstancePayloadDataFloat4Count = 0;
164 bool bIsUploaded =
false;
167 FUploadData* AllocateUploadData();
173 FUploadData* UploadData =
nullptr;
174 bool bCommitted =
false;
197 FGPUScenePrimitiveCollector::FUploadData* AllocateDynamicPrimitiveData();
280 return PrimitiveDirtyState[PersistentPrimitiveIndex.
Index];
371 bool bUseTiledInstanceDataLayout =
true;
374 int32 InstanceDataTileSizeLog2 = -1;
376 uint32 GetInstanceDataTileSizeLog2()
const {
return InstanceDataTileSizeLog2; }
377 uint32 GetInstanceDataTileSize()
const {
return 1u << InstanceDataTileSizeLog2; }
378 uint32 GetInstanceDataTileSizeMask()
const;
379 uint32 GetInstanceDataTileStride()
const;
381 static constexpr int32 InitialBufferSize = 256;
384 int32 NumGPULights = 0;
400 struct FRegisteredBuffers
402 bool IsValid()
const {
return PrimitiveBuffer !=
nullptr; }
405 FRDGBuffer* InstanceSceneDataBuffer =
nullptr;
406 FRDGBuffer* InstancePayloadDataBuffer =
nullptr;
422 PrimitiveDirtyState.
AddZeroed(NewSize - PrimitiveDirtyState.
Num());
429 FRegisteredBuffers CachedRegisteredBuffers;
435 struct FDeferredGPUWrite
442 uint32 PackedInstanceSceneDataFlags = 0u;
458 uint32 SceneFrameNumber = 0xFFFFFFFF;
460 int32 DynamicPrimitivesOffset = 0;
462 int32 PrevDynamicPrimitivesMaxSize = 0;
463 int32 PrevDynamicPrimitivePayloadMaxSize = 0;
464 int32 PrevDynamicPrimitiveInstanceMaxSize = 0;
466 bool bIsEnabled =
false;
467 bool bInBeginEndBlock =
false;
477 FRegisteredBuffers RegisterBuffers(
FRDGBuilder& GraphBuilder)
const;
483 template<
typename FUploadDataSourceAdapter>
502#if !UE_BUILD_SHIPPING
504 bool bLoggedInstanceOverflow =
false;
505 uint32 MaxInstancesDuringPrevUpdate = 0;
506 bool bLoggedLightOverflow =
false;
507 int32 MaxLightsDuringPrevUpdate = 0;
508 bool bLoggedPayloadBufferOverflow =
false;
510 uint64 InstancePayloadDataSizeReserveUnclamped = 0;
519 GPUScene.
BeginRender(GraphBuilder, GPUSceneDynamicContext);
constexpr T Align(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:18
#define check(expr)
Definition AssertionMacros.h:314
@ NoInit
Definition CoreMiscDefines.h:158
@ INDEX_NONE
Definition CoreMiscDefines.h:150
@ InPlace
Definition CoreMiscDefines.h:162
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EGPUSceneGPUWritePass
Definition MeshBatch.h:61
UE_FORCEINLINE_HINT bool IsValid(const UObject *Test)
Definition Object.h:1875
EPrimitiveDirtyState
Definition PrimitiveDirtyState.h:9
#define GShaderPlatformForFeatureLevel
Definition RHIGlobals.h:915
#define DECLARE_GPU_STAT_NAMED_EXTERN(StatName, NameString)
Definition RealtimeGPUProfiler.h:260
#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1800
#define SHADER_PARAMETER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1720
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
#define SHADER_PARAMETER_STRUCT_INCLUDE(StructType, MemberName)
Definition ShaderParameterMacros.h:1895
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
Definition IDelegateInstance.h:14
Definition GPUScene.h:186
FGPUSceneDynamicContext(FGPUScene &InGPUScene)
Definition GPUScene.h:188
void Release()
Definition GPUScene.cpp:2398
~FGPUSceneDynamicContext()
Definition GPUScene.cpp:2393
int32 NumInstances() const
Definition GPUScene.h:129
FORCEINLINE const TRange< int32 > & GetPrimitiveIdRange() const
Definition GPUScene.h:108
FORCEINLINE int32 GetInstancePayloadDataOffset() const
Definition GPUScene.h:121
FGPUScenePrimitiveCollector(FGPUSceneDynamicContext *InGPUSceneDynamicContext=nullptr)
Definition GPUScene.h:82
int32 NumPayloadDataSlots() const
Definition GPUScene.h:130
FORCEINLINE int32 GetInstanceSceneDataOffset() const
Definition GPUScene.h:114
int32 Num() const
Definition GPUScene.h:128
Definition GPUScene.h:514
FGPUSceneScopeBeginEndHelper(FRDGBuilder &GraphBuilder, FGPUScene &InGPUScene, FGPUSceneDynamicContext &GPUSceneDynamicContext)
Definition GPUScene.h:516
~FGPUSceneScopeBeginEndHelper()
Definition GPUScene.h:522
Definition MeshBatch.h:44
Definition GPUScene.h:217
EShaderPlatform GetShaderPlatform() const
Definition GPUScene.h:236
FGPUSceneResourceParameters GetShaderParameters(FRDGBuilder &GraphBuilder) const
Definition GPUScene.cpp:1930
TRefCountPtr< FRDGPooledBuffer > LightmapDataBuffer
Definition GPUScene.h:352
FScenePrimitiveUpdates::TPayloadRangeView< FUpdateInstanceFromComputeCommand > FUpdateFromComputeCommands
Definition GPUScene.h:222
void EndRender()
Definition GPUScene.cpp:746
int32 AllocateInstanceSceneDataSlots(FPersistentPrimitiveIndex PersistentPrimitiveIndex, int32 NumInstanceSceneDataEntries)
Definition GPUScene.cpp:2019
uint32 GetSceneFrameNumber() const
Definition GPUScene.h:283
bool HasPendingGPUWrite(uint32 PrimitiveId) const
Definition GPUScene.cpp:2327
void DebugRender(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniformBuffer, FViewInfo &View)
Definition GPUScene.cpp:2140
FSpanAllocator LightmapDataAllocator
Definition GPUScene.h:351
bool IsRendering() const
Definition GPUScene.h:232
FGPUSceneDynamicContext * GetCurrentDynamicContext() const
Definition GPUScene.h:289
void BeginRender(FRDGBuilder &GraphBuilder, FGPUSceneDynamicContext &GPUSceneDynamicContext)
Definition GPUScene.cpp:726
void UploadDynamicPrimitiveShaderDataForView(FRDGBuilder &GraphBuilder, FViewInfo &View, bool bRayTracing=false, UE::Renderer::Private::IShadowInvalidatingInstances *ShadowInvalidatingInstances=nullptr)
Definition GPUScene.cpp:1993
~FGPUScene()
Definition GPUScene.cpp:719
void SetEnabled(ERHIFeatureLevel::Type InFeatureLevel)
Definition GPUScene.cpp:651
void RENDERER_API AddPrimitiveToUpdate(FPersistentPrimitiveIndex PersistentPrimitiveIndex, EPrimitiveDirtyState DirtyState=EPrimitiveDirtyState::ChangedAll)
Definition GPUScene.cpp:1951
FRDGAsyncScatterUploadBuffer InstanceSceneUploadBuffer
Definition GPUScene.h:344
TRefCountPtr< FRDGPooledBuffer > InstanceSceneDataBuffer
Definition GPUScene.h:343
TRefCountPtr< FRDGPooledBuffer > InstancePayloadDataBuffer
Definition GPUScene.h:347
bool ExecuteDeferredGPUWritePass(FRDGBuilder &GraphBuilder, TArray< FViewInfo > &Views, EGPUSceneGPUWritePass Pass)
Definition GPUScene.cpp:2278
bool bUpdateAllPrimitives
Definition GPUScene.h:336
int32 GetNumInstances() const
Definition GPUScene.h:285
void FreeInstanceSceneDataSlots(int32 InstanceSceneDataOffset, int32 NumInstanceSceneDataEntries)
Definition GPUScene.cpp:2040
void OnPreSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePreUpdateChangeSet &ScenePreUpdateData)
Definition GPUScene.cpp:2344
int32 GetNumPrimitives() const
Definition GPUScene.h:286
TRefCountPtr< FRDGPooledBuffer > PrimitiveBuffer
Definition GPUScene.h:339
int32 AllocateInstancePayloadDataSlots(int32 NumInstancePayloadFloat4Entries)
Definition GPUScene.cpp:2054
void FreeInstancePayloadDataSlots(int32 InstancePayloadDataOffset, int32 NumInstancePayloadFloat4Entries)
Definition GPUScene.cpp:2069
void OnPostSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePostUpdateChangeSet &ScenePostUpdateData)
Definition GPUScene.cpp:2353
FRDGAsyncScatterUploadBuffer InstancePayloadUploadBuffer
Definition GPUScene.h:348
void OnPostLightSceneInfoUpdate(FRDGBuilder &OnPostLightSceneInfoUpdate, const FLightSceneChangeSet &LightsPostUpdateData)
Definition GPUScene.cpp:2361
const FScene & GetScene() const
Definition GPUScene.h:358
ERHIFeatureLevel::Type GetFeatureLevel() const
Definition GPUScene.h:235
FRDGAsyncScatterUploadBuffer PrimitiveUploadBuffer
Definition GPUScene.h:340
FGPUSceneResourceParametersRHI GetShaderParametersRHI() const
Definition GPUScene.cpp:2374
FRDGAsyncScatterUploadBuffer LightmapUploadBuffer
Definition GPUScene.h:353
FSpanAllocator InstancePayloadDataAllocator
Definition GPUScene.h:346
bool IsEnabled() const
Definition GPUScene.h:225
int32 GetMaxLightId() const
Definition GPUScene.h:287
void ConsolidateInstanceDataAllocations()
Definition GPUScene.cpp:2249
int32 GetNumLightmapDataItems() const
Definition GPUScene.h:288
const FSpanAllocator & GetInstanceSceneDataAllocator() const
Definition GPUScene.h:296
bool FillSceneUniformBuffer(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUB) const
Definition GPUScene.cpp:1912
FORCEINLINE EPrimitiveDirtyState GetPrimitiveDirtyState(FPersistentPrimitiveIndex PersistentPrimitiveIndex) const
Definition GPUScene.h:274
uint32 GetInstanceIdUpperBoundGPU() const
Definition GPUScene.cpp:2079
SIZE_T GetAllocatedSize() const
Definition GPUScene.cpp:2366
Definition InstanceCullingOcclusionQuery.h:21
Definition InstanceCullingManager.h:22
Definition LightSceneInfo.h:36
Definition PrimitiveSceneProxy.h:296
Definition UnifiedBuffer.h:371
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition RenderGraphUtils.h:1272
Definition RHICommandList.h:3819
Definition ScenePrimitiveUpdates.h:129
Definition ScenePrimitiveUpdates.h:116
Definition ScenePrivate.h:2875
Definition SpanAllocator.h:15
int32 GetMaxSize() const
Definition SpanAllocator.h:80
Definition SceneRendering.h:1132
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
SizeType AddZeroed()
Definition Array.h:2755
static UE_FORCEINLINE_HINT TRange Empty()
Definition Range.h:671
Definition RefCounting.h:454
Definition StaticArray.h:26
Definition RendererPrivateUtils.h:191
Definition SceneRendererInterface.h:24
Type
Definition RHIFeatureLevel.h:20
Definition SceneView.h:41
Definition GPUScene.h:534
TStaticArray< FVector4f, DataStrideInFloat4s > Data
Definition GPUScene.h:537
static const uint32 DataStrideInFloat4s
Definition GPUScene.h:535
static void Emplace(FBatchedPrimitiveShaderData *Dest, const FPrimitiveUniformShaderParameters &ShaderParams)
Definition GPUScene.cpp:2538
FBatchedPrimitiveShaderData()
Definition GPUScene.h:539
FBatchedPrimitiveShaderData(const FPrimitiveUniformShaderParameters &PrimitiveUniformShaderParameters)
Definition GPUScene.h:545
Definition GPUScene.h:204
FGPUSceneInstanceRange(FPersistentPrimitiveIndex InPrimitive, uint32 InInstanceSceneDataOffset, uint32 InNumInstanceSceneDataEntries)
Definition GPUScene.h:205
uint32 InstanceSceneDataOffset
Definition GPUScene.h:212
uint32 NumInstanceSceneDataEntries
Definition GPUScene.h:213
FPersistentPrimitiveIndex Primitive
Definition GPUScene.h:211
Definition ScenePrivate.h:2850
Definition MeshBatch.h:124
Definition MeshPassProcessor.h:1559
int32 Index
Definition MeshPassProcessor.h:1561
Definition GPUScene.cpp:1643