UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FGPUScene Class Reference

#include <GPUScene.h>

Public Types

using FUpdateFromComputeCommands = FScenePrimitiveUpdates::TPayloadRangeView< FUpdateInstanceFromComputeCommand >
 
using FInstanceRange = FGPUSceneInstanceRange
 
using FInstanceGPULoadBalancer = TInstanceCullingLoadBalancer< SceneRenderingAllocator >
 

Public Member Functions

 FGPUScene (FScene &InScene)
 
 ~FGPUScene ()
 
void SetEnabled (ERHIFeatureLevel::Type InFeatureLevel)
 
bool IsEnabled () const
 
void BeginRender (FRDGBuilder &GraphBuilder, FGPUSceneDynamicContext &GPUSceneDynamicContext)
 
bool IsRendering () const
 
void EndRender ()
 
ERHIFeatureLevel::Type GetFeatureLevel () const
 
EShaderPlatform GetShaderPlatform () const
 
int32 AllocateInstanceSceneDataSlots (FPersistentPrimitiveIndex PersistentPrimitiveIndex, int32 NumInstanceSceneDataEntries)
 
void FreeInstanceSceneDataSlots (int32 InstanceSceneDataOffset, int32 NumInstanceSceneDataEntries)
 
int32 AllocateInstancePayloadDataSlots (int32 NumInstancePayloadFloat4Entries)
 
void FreeInstancePayloadDataSlots (int32 InstancePayloadDataOffset, int32 NumInstancePayloadFloat4Entries)
 
void UploadDynamicPrimitiveShaderDataForView (FRDGBuilder &GraphBuilder, FViewInfo &View, bool bRayTracing=false, UE::Renderer::Private::IShadowInvalidatingInstances *ShadowInvalidatingInstances=nullptr)
 
bool FillSceneUniformBuffer (FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUB) const
 
void Update (FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUB, FRDGExternalAccessQueue &ExternalAccessQueue, const FUpdateFromComputeCommands &UpdatesFromCompute, const UE::Tasks::FTask &UpdateTaskPrerequisites={})
 
void RENDERER_API AddPrimitiveToUpdate (FPersistentPrimitiveIndex PersistentPrimitiveIndex, EPrimitiveDirtyState DirtyState=EPrimitiveDirtyState::ChangedAll)
 
FORCEINLINE EPrimitiveDirtyState GetPrimitiveDirtyState (FPersistentPrimitiveIndex PersistentPrimitiveIndex) const
 
uint32 GetSceneFrameNumber () const
 
int32 GetNumInstances () const
 
int32 GetNumPrimitives () const
 
int32 GetMaxLightId () const
 
int32 GetNumLightmapDataItems () const
 
FGPUSceneDynamicContextGetCurrentDynamicContext () const
 
uint32 GetInstanceIdUpperBoundGPU () const
 
const FSpanAllocatorGetInstanceSceneDataAllocator () const
 
FGPUSceneResourceParameters GetShaderParameters (FRDGBuilder &GraphBuilder) const
 
void DebugRender (FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniformBuffer, FViewInfo &View)
 
void ConsolidateInstanceDataAllocations ()
 
bool ExecuteDeferredGPUWritePass (FRDGBuilder &GraphBuilder, TArray< FViewInfo > &Views, EGPUSceneGPUWritePass Pass)
 
bool HasPendingGPUWrite (uint32 PrimitiveId) const
 
void OnPreSceneUpdate (FRDGBuilder &GraphBuilder, const FScenePreUpdateChangeSet &ScenePreUpdateData)
 
void OnPostSceneUpdate (FRDGBuilder &GraphBuilder, const FScenePostUpdateChangeSet &ScenePostUpdateData)
 
void OnPostLightSceneInfoUpdate (FRDGBuilder &OnPostLightSceneInfoUpdate, const FLightSceneChangeSet &LightsPostUpdateData)
 
const FSceneGetScene () const
 
SIZE_T GetAllocatedSize () const
 
FGPUSceneResourceParametersRHI GetShaderParametersRHI () const
 

Public Attributes

bool bUpdateAllPrimitives
 
TRefCountPtr< FRDGPooledBufferPrimitiveBuffer
 
FRDGAsyncScatterUploadBuffer PrimitiveUploadBuffer
 
TRefCountPtr< FRDGPooledBufferInstanceSceneDataBuffer
 
FRDGAsyncScatterUploadBuffer InstanceSceneUploadBuffer
 
FSpanAllocator InstancePayloadDataAllocator
 
TRefCountPtr< FRDGPooledBufferInstancePayloadDataBuffer
 
FRDGAsyncScatterUploadBuffer InstancePayloadUploadBuffer
 
FSpanAllocator LightmapDataAllocator
 
TRefCountPtr< FRDGPooledBufferLightmapDataBuffer
 
FRDGAsyncScatterUploadBuffer LightmapUploadBuffer
 

Friends

class FGPUScenePrimitiveCollector
 

Member Typedef Documentation

◆ FInstanceGPULoadBalancer

◆ FInstanceRange

◆ FUpdateFromComputeCommands

using FGPUScene::FUpdateFromComputeCommands = FScenePrimitiveUpdates::TPayloadRangeView<FUpdateInstanceFromComputeCommand>

Constructor & Destructor Documentation

◆ FGPUScene()

FGPUScene::FGPUScene ( FScene InScene)

◆ ~FGPUScene()

FGPUScene::~FGPUScene ( )

Member Function Documentation

◆ AddPrimitiveToUpdate()

void FGPUScene::AddPrimitiveToUpdate ( FPersistentPrimitiveIndex  PersistentPrimitiveIndex,
EPrimitiveDirtyState  DirtyState = EPrimitiveDirtyState::ChangedAll 
)

Queue the given primitive for upload to GPU at next call to Update. May be called multiple times, dirty-flags are cumulative.

◆ AllocateInstancePayloadDataSlots()

int32 FGPUScene::AllocateInstancePayloadDataSlots ( int32  NumInstancePayloadFloat4Entries)

◆ AllocateInstanceSceneDataSlots()

int32 FGPUScene::AllocateInstanceSceneDataSlots ( FPersistentPrimitiveIndex  PersistentPrimitiveIndex,
int32  NumInstanceSceneDataEntries 
)

Allocates a range of space in the instance scene data buffer for the required number of instances, returns the offset to the first instance or INDEX_NONE if either the allocation failed or NumInstanceSceneDataEntries was zero. Marks the instances as requiring update (actual update is handled later).

◆ BeginRender()

void FGPUScene::BeginRender ( FRDGBuilder GraphBuilder,
FGPUSceneDynamicContext GPUSceneDynamicContext 
)

Call at start of rendering (but after scene primitives are updated) to let GPU-Scene record scene primitive count and prepare for dynamic primitive allocations. Scene may be NULL which means there are zero scene primitives (but there may be dynamic ones added later).

◆ ConsolidateInstanceDataAllocations()

void FGPUScene::ConsolidateInstanceDataAllocations ( )

Manually trigger an allocator consolidate (will otherwise be done when an item is allocated).

◆ DebugRender()

void FGPUScene::DebugRender ( FRDGBuilder GraphBuilder,
FSceneUniformBuffer SceneUniformBuffer,
FViewInfo View 
)

Draw GPU-Scene debug info, such as bounding boxes. Call once per view at some point in the frame after GPU scene has been updated fully. What is drawn is controlled by the CVar: r.GPUScene.DebugMode. Enabling this cvar causes ShaderDraw to be being active (if supported).

◆ EndRender()

void FGPUScene::EndRender ( )

◆ ExecuteDeferredGPUWritePass()

bool FGPUScene::ExecuteDeferredGPUWritePass ( FRDGBuilder GraphBuilder,
TArray< FViewInfo > &  Views,
EGPUSceneGPUWritePass  Pass 
)

Executes GPUScene writes that were deferred until a later point in scene rendering

◆ FillSceneUniformBuffer()

bool FGPUScene::FillSceneUniformBuffer ( FRDGBuilder GraphBuilder,
FSceneUniformBuffer SceneUB 
) const

Modifies the GPUScene specific scene UB parameters to the current versions. Returns true if any of the parameters changed.

◆ FreeInstancePayloadDataSlots()

void FGPUScene::FreeInstancePayloadDataSlots ( int32  InstancePayloadDataOffset,
int32  NumInstancePayloadFloat4Entries 
)

◆ FreeInstanceSceneDataSlots()

void FGPUScene::FreeInstanceSceneDataSlots ( int32  InstanceSceneDataOffset,
int32  NumInstanceSceneDataEntries 
)

Free the instance data slots for reuse.

◆ GetAllocatedSize()

SIZE_T FGPUScene::GetAllocatedSize ( ) const

◆ GetCurrentDynamicContext()

FGPUSceneDynamicContext * FGPUScene::GetCurrentDynamicContext ( ) const
inline

◆ GetFeatureLevel()

ERHIFeatureLevel::Type FGPUScene::GetFeatureLevel ( ) const
inline

◆ GetInstanceIdUpperBoundGPU()

uint32 FGPUScene::GetInstanceIdUpperBoundGPU ( ) const

Returns the highest instance ID that is represented in the GPU scene (which may be lower than the host allocated IDs due to various limits) Never larger than MAX_INSTANCE_ID, see Engine\Shaders\Shared\SceneDefinitions.h

◆ GetInstanceSceneDataAllocator()

const FSpanAllocator & FGPUScene::GetInstanceSceneDataAllocator ( ) const
inline

◆ GetMaxLightId()

int32 FGPUScene::GetMaxLightId ( ) const
inline

◆ GetNumInstances()

int32 FGPUScene::GetNumInstances ( ) const
inline

◆ GetNumLightmapDataItems()

int32 FGPUScene::GetNumLightmapDataItems ( ) const
inline

◆ GetNumPrimitives()

int32 FGPUScene::GetNumPrimitives ( ) const
inline

◆ GetPrimitiveDirtyState()

FORCEINLINE EPrimitiveDirtyState FGPUScene::GetPrimitiveDirtyState ( FPersistentPrimitiveIndex  PersistentPrimitiveIndex) const
inline

◆ GetScene()

const FScene & FGPUScene::GetScene ( ) const
inline

◆ GetSceneFrameNumber()

uint32 FGPUScene::GetSceneFrameNumber ( ) const
inline

◆ GetShaderParameters()

FGPUSceneResourceParameters FGPUScene::GetShaderParameters ( FRDGBuilder GraphBuilder) const

Return the GPU scene resource

◆ GetShaderParametersRHI()

FGPUSceneResourceParametersRHI FGPUScene::GetShaderParametersRHI ( ) const

◆ GetShaderPlatform()

EShaderPlatform FGPUScene::GetShaderPlatform ( ) const
inline

◆ HasPendingGPUWrite()

bool FGPUScene::HasPendingGPUWrite ( uint32  PrimitiveId) const

Returns whether or not a GPU Write is pending for the specified primitive

◆ IsEnabled()

bool FGPUScene::IsEnabled ( ) const
inline

◆ IsRendering()

bool FGPUScene::IsRendering ( ) const
inline

◆ OnPostLightSceneInfoUpdate()

void FGPUScene::OnPostLightSceneInfoUpdate ( FRDGBuilder OnPostLightSceneInfoUpdate,
const FLightSceneChangeSet LightsPostUpdateData 
)

◆ OnPostSceneUpdate()

void FGPUScene::OnPostSceneUpdate ( FRDGBuilder GraphBuilder,
const FScenePostUpdateChangeSet ScenePostUpdateData 
)

Called by FScene::UpdateAllPrimimitiveSceneInfos after the scene is udated.

◆ OnPreSceneUpdate()

void FGPUScene::OnPreSceneUpdate ( FRDGBuilder GraphBuilder,
const FScenePreUpdateChangeSet ScenePreUpdateData 
)

Called by FScene::UpdateAllPrimimitiveSceneInfos before the scene is udated.

◆ SetEnabled()

void FGPUScene::SetEnabled ( ERHIFeatureLevel::Type  InFeatureLevel)

◆ Update()

void FGPUScene::Update ( FRDGBuilder GraphBuilder,
FSceneUniformBuffer SceneUB,
FRDGExternalAccessQueue ExternalAccessQueue,
const FUpdateFromComputeCommands UpdatesFromCompute,
const UE::Tasks::FTask UpdateTaskPrerequisites = {} 
)

Pull all pending updates from Scene and upload primitive & instance data.

◆ UploadDynamicPrimitiveShaderDataForView()

void FGPUScene::UploadDynamicPrimitiveShaderDataForView ( FRDGBuilder GraphBuilder,
FViewInfo View,
bool  bRayTracing = false,
UE::Renderer::Private::IShadowInvalidatingInstances ShadowInvalidatingInstances = nullptr 
)

Upload primitives from View.DynamicPrimitiveCollector.

Friends And Related Symbol Documentation

◆ FGPUScenePrimitiveCollector

Member Data Documentation

◆ bUpdateAllPrimitives

bool FGPUScene::bUpdateAllPrimitives

◆ InstancePayloadDataAllocator

FSpanAllocator FGPUScene::InstancePayloadDataAllocator

◆ InstancePayloadDataBuffer

TRefCountPtr<FRDGPooledBuffer> FGPUScene::InstancePayloadDataBuffer

◆ InstancePayloadUploadBuffer

FRDGAsyncScatterUploadBuffer FGPUScene::InstancePayloadUploadBuffer

◆ InstanceSceneDataBuffer

TRefCountPtr<FRDGPooledBuffer> FGPUScene::InstanceSceneDataBuffer

GPU primitive instance list

◆ InstanceSceneUploadBuffer

FRDGAsyncScatterUploadBuffer FGPUScene::InstanceSceneUploadBuffer

◆ LightmapDataAllocator

FSpanAllocator FGPUScene::LightmapDataAllocator

GPU light map data

◆ LightmapDataBuffer

TRefCountPtr<FRDGPooledBuffer> FGPUScene::LightmapDataBuffer

◆ LightmapUploadBuffer

FRDGAsyncScatterUploadBuffer FGPUScene::LightmapUploadBuffer

◆ PrimitiveBuffer

TRefCountPtr<FRDGPooledBuffer> FGPUScene::PrimitiveBuffer

GPU mirror of Primitives

◆ PrimitiveUploadBuffer

FRDGAsyncScatterUploadBuffer FGPUScene::PrimitiveUploadBuffer

The documentation for this class was generated from the following files: