17 constexpr static int32 MinParticlePerTask = 40;
31 int32 NumDynParticles;
50 for (
int32 ViewIndex = 0; ViewIndex <
NumView; ++ViewIndex)
58 template<
typename Lambda>
63 int32 NumDynTask = FMath::Max(FMath::Min(NumTasks, NumDynParticles), 1);
76 EndIndex = FMath::Min(NumDynParticles, EndIndex);
87 template<
typename Lambda>
98 template<
typename Lambda>
110 PendingTasks.
Add(AsyncQueueKinTask);
116 PendingTasks.Append(KinematicPendingTasks);
140 template<
typename Lambda>
148 check(NumBatches > 0)
150 for (
int32 BatchIndex = 0; BatchIndex < NumBatches; BatchIndex++)
154 EndIndex = FMath::Min(NumParticles, EndIndex);
165 template <
typename Lambda>
243 UE_LOG(
LogChaos,
Warning,
TEXT(
"No pruning happened in the Spatial Acceleration structure, a slight perfromance hit could occured. IntegrationPendingTasks.Num(): %d != NumBatchDyn: %d"), IntegrationPendingTasks.
Num(),
NumBatchDyn);
293 UE_LOG(
LogChaos,
Warning,
TEXT(
"No pruning happened in the Spatial Acceleration structure, a slight perfromance hit could occured. KinematicPendingTasks.Num(): %d != NumBatchKin: %d"), KinematicPendingTasks.
Num(),
NumBatchKin);
297 IntegrationPendingTasks.
Reset();
298 KinematicPendingTasks.
Reset();
301 template<
typename Lambda>
305 PendingTasks.Append(KinematicPendingTasks);
318 Tasks.Reserve(IntegrationPendingTasks.
Num() + KinematicPendingTasks.
Num() + 1);
319 Tasks.Append(IntegrationPendingTasks);
320 Tasks.Append(KinematicPendingTasks);
323 IntegrationPendingTasks.
Reset();
324 KinematicPendingTasks.
Reset();
#define check(expr)
Definition AssertionMacros.h:314
#define QUICK_SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:652
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define UE_SOURCE_LOCATION
Definition PreprocessorHelpers.h:71
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition PBDRigidsSOAs.h:269
void UpdateDirtyViews()
Definition PBDRigidsSOAs.h:329
const TParticleView< FPBDRigidParticles > & GetActiveMovingKinematicParticlesView() const
Definition PBDRigidsSOAs.h:944
void UpdateAllMovingKinematic(const bool bUpdateViews=true)
Definition PBDRigidsSOAs.h:829
const TArray< FPBDRigidParticleHandle * > & GetActiveParticlesArray() const
Definition PBDRigidsSOAs.h:933
Definition TaskDispatcherEvolution.h:15
void FlushAccelerationQueue(Lambda FlushAccelerationQueueLambda)
Definition TaskDispatcherEvolution.h:302
void DispatchKinAsyncDirtyAndUpdateKinematic(Lambda AsyncDirty, bool bIsLastStep)
Definition TaskDispatcherEvolution.h:99
void DispatchIntegrate(Lambda IntegrateWork)
Definition TaskDispatcherEvolution.h:59
void DispatchKinematicsTarget(Lambda KinematicTargetsWork, int32 NumParticles, int32 DispatchBatchIndex)
Definition TaskDispatcherEvolution.h:141
FTaskDispatcherEvolution(FPBDRigidsSOAs &ParticlesIn, FPendingSpatialInternalDataQueue &InternalAccelerationQueueIn)
Definition TaskDispatcherEvolution.h:35
void PruneInternalPendingData(Lambda HasToBeUpdated)
Definition TaskDispatcherEvolution.h:166
void WaitAsyncQueueTask()
Definition TaskDispatcherEvolution.h:327
void WaitIntegrationComplete()
Definition TaskDispatcherEvolution.h:315
void DispatchDynAsyncDirty(Lambda AsyncDirtyWork)
Definition TaskDispatcherEvolution.h:88
void ComputeKinematicBatch()
Definition TaskDispatcherEvolution.h:44
void WaitTaskEndSpatial()
Definition TaskDispatcherEvolution.h:332
Definition ParticleIterator.h:639
Definition TaskGraphInterfaces.h:265
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition BodyInstance.h:90
Definition SkeletalMeshComponent.h:307
CHAOS_API int32 MaxNumWorkers
Definition Parallel.cpp:13
Private::FTaskHandle FTask
Definition Task.h:333
TTask< TInvokeResult_T< TaskBodyType > > Launch(const TCHAR *DebugName, TaskBodyType &&TaskBody, ETaskPriority Priority=ETaskPriority::Normal, EExtendedTaskPriority ExtendedPriority=EExtendedTaskPriority::None, ETaskFlags Flags=ETaskFlags::None)
Definition Task.h:266
bool Wait(const TaskCollectionType &Tasks, FTimespan InTimeout=FTimespan::MaxValue())
Definition Task.h:381
Definition PendingSpatialData.h:25
Definition PendingSpatialData.h:65
int32 KinematicBatchStartIndex
Definition PendingSpatialData.h:75
TArray< TArray< FPendingSpatialData > > PendingDataArrays
Definition PendingSpatialData.h:70
void CleanUpDuplicated()
Definition PendingSpatialData.h:159
Definition UnrealMathUtility.h:270
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundUp(T Dividend, T Divisor)
Definition UnrealMathUtility.h:694