16#if !defined(CHAOS_SPHERICAL_ISPC_ENABLED_DEFAULT)
17#define CHAOS_SPHERICAL_ISPC_ENABLED_DEFAULT 1
20#if !defined(USE_ISPC_KERNEL_CONSOLE_VARIABLES_IN_SHIPPING)
21#define USE_ISPC_KERNEL_CONSOLE_VARIABLES_IN_SHIPPING 0
25#if !INTEL_ISPC || (UE_BUILD_SHIPPING && !USE_ISPC_KERNEL_CONSOLE_VARIABLES_IN_SHIPPING)
28extern CHAOS_API bool bChaos_Spherical_ISPC_Enabled;
83 template<
typename SolverParticlesOrRange>
90 ApplyHelperISPC(Particles, Dt);
115 template<
bool bHasMaxDistance,
typename SolverParticlesOrRange>
123 if (Particles.InvM(ParticleIndex) == 0)
144 template<
typename SolverParticlesOrRange>
246 if (bUseLegacyBackstop)
253 ApplyLegacyHelperISPC(Particles, Dt);
255 else if (SphereRadii.Num() == ParticleCount)
257 if (SphereOffsetDistances.Num() == ParticleCount)
270 else if (SphereOffsetDistances.Num() == ParticleCount)
288 ApplyHelperISPC(Particles, Dt);
290 else if (SphereRadii.Num() == ParticleCount)
292 if (SphereOffsetDistances.Num() == ParticleCount)
305 else if (SphereOffsetDistances.Num() == ParticleCount)
327 return bUseLegacyBackstop;
332 return SphereRadii.Num() == ParticleCount ? BackstopRadiusBase + BackstopRadiusRange * SphereRadii[ConstraintIndex] : BackstopRadiusBase;
337 return SphereOffsetDistances.Num() == ParticleCount ? BackstopDistanceBase + BackstopDistanceRange * SphereOffsetDistances[ConstraintIndex] : BackstopDistanceBase;
347 template<
bool bHasBackstopDistance,
bool bHasBackstopRadius>
354 if (Particles.
InvM(ParticleIndex) == 0)
363 const FSolverReal Radius = (
bHasBackstopRadius ? BackstopRadiusBase + BackstopRadiusRange * SphereRadii[ParticleIndex] : BackstopRadiusBase) * Scale;
383 template<
bool bHasBackstopDistance,
bool bHasBackstopRadius>
384 void ApplyLegacyHelper(FSolverParticlesRange& Particles,
const FSolverReal Dt)
const
390 if (Particles.InvM(ParticleIndex) == 0)
399 const FSolverReal Radius = (
bHasBackstopRadius ? BackstopRadiusBase + BackstopRadiusRange * SphereRadii[ParticleIndex] : BackstopRadiusBase) * Scale;
419 CHAOS_API void ApplyLegacyHelperISPC(FSolverParticlesRange& Particles,
const FSolverReal Dt)
const;
427 const int32 ParticleOffset;
428 const int32 ParticleCount;
434 bool bEnabled =
true;
435 bool bUseLegacyBackstop =
false;
436 bool bMeshUseGlobalIndexation =
true;
#define UE_CHAOS_DECLARE_INDEXED_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:893
@ ForceInit
Definition CoreMiscDefines.h:155
#define DECLARE_CYCLE_STAT(CounterName, StatId, GroupId)
Definition Stats.h:669
#define SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:650
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define CHAOS_SPHERICAL_ISPC_ENABLED_DEFAULT
Definition PBDSphericalConstraint.h:17
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
Definition CollectionPropertyFacade.h:49
Definition PBDSphericalConstraint.h:162
FSolverReal GetScale() const
Definition PBDSphericalConstraint.h:323
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(BackstopRadius, float)
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(UseLegacyBackstop, bool)
bool IsEnabled() const
Definition PBDSphericalConstraint.h:232
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(BackstopMeshName, bool)
void Apply(FSolverParticlesRange &Particles, const FSolverReal Dt) const
Definition PBDSphericalConstraint.h:240
void SetScale(FSolverReal InScale)
Definition PBDSphericalConstraint.h:322
~FPBDSphericalBackstopConstraint()
Definition PBDSphericalConstraint.h:224
FPBDSphericalBackstopConstraint(const int32 InParticleOffset, const int32 InParticleCount, const TArray< FSolverVec3 > &InAnimationPositions, const TArray< FSolverVec3 > &InAnimationNormals, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, FSolverReal MeshScale, bool bInUseGlobalIndexation=true)
Definition PBDSphericalConstraint.h:170
FSolverReal GetBackstopDistance(int32 ConstraintIndex) const
Definition PBDSphericalConstraint.h:335
bool UseLegacyBackstop() const
Definition PBDSphericalConstraint.h:325
FPBDSphericalBackstopConstraint(const int32 InParticleOffset, const int32 InParticleCount, const TArray< FSolverVec3 > &InAnimationPositions, const TArray< FSolverVec3 > &InAnimationNormals, const TConstArrayView< FRealSingle > &InSphereRadii, const TConstArrayView< FRealSingle > &InSphereOffsetDistances, const bool bInUseLegacyBackstop, bool bInUseGlobalIndexation=true)
Definition PBDSphericalConstraint.h:199
void SetEnabled(bool bInEnabled)
Definition PBDSphericalConstraint.h:231
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition PBDSphericalConstraint.h:164
FSolverReal GetBackstopRadius(int32 ConstraintIndex) const
Definition PBDSphericalConstraint.h:330
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, FSolverReal MeshScale)
Definition PBDSphericalConstraint.cpp:75
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(BackstopDistance, float)
void Apply(FSolverParticles &Particles, const FSolverReal Dt) const
Definition PBDSphericalConstraint.h:234
Definition PBDSphericalConstraint.h:35
void SetScale(FSolverReal InScale)
Definition PBDSphericalConstraint.h:108
const TArray< FSolverVec3 > & AnimationPositions
Definition PBDSphericalConstraint.h:148
TConstArrayView< FRealSingle > SphereRadii
Definition PBDSphericalConstraint.h:149
const int32 ParticleOffset
Definition PBDSphericalConstraint.h:150
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition PBDSphericalConstraint.h:37
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, FSolverReal MeshScale)
Definition PBDSphericalConstraint.cpp:23
FSolverReal GetScale() const
Definition PBDSphericalConstraint.h:109
void Apply(SolverParticlesOrRange &Particles, const FSolverReal Dt) const
Definition PBDSphericalConstraint.h:84
~FPBDSphericalConstraint()
Definition PBDSphericalConstraint.h:76
FPBDSphericalConstraint(const uint32 InParticleOffset, const uint32 InParticleCount, const TArray< FSolverVec3 > &InAnimationPositions, const TConstArrayView< FRealSingle > &InSphereRadii)
Definition PBDSphericalConstraint.h:61
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(MaxDistance, float)
FPBDSphericalConstraint(const uint32 InParticleOffset, const uint32 InParticleCount, const TArray< FSolverVec3 > &InAnimationPositions, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, FSolverReal MeshScale)
Definition PBDSphericalConstraint.h:42
const int32 ParticleCount
Definition PBDSphericalConstraint.h:151
Definition SoftsSolverParticlesRange.h:12
const FSolverVec3 & P(const int32 Index) const
Definition SoftsSolverParticlesRange.h:30
FSolverReal InvM(const int32 Index) const
Definition SoftsSolverParticlesRange.h:56
Definition PBDSoftsSolverParticles.h:20
TConstArrayView< T > GetConstArrayView(const TArray< T > &Array) const
Definition ParticlesRange.h:73
Definition UnrealString.h.inl:34
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
TVector< FSolverReal, 3 > FSolverVec3
Definition PBDSoftsEvolutionFwd.h:33
void CHAOS_API PhysicsParallelFor(int32 InNum, TFunctionRef< void(int32)> InCallable, bool bForceSingleThreaded=false)
Definition Parallel.cpp:55
constexpr bool bRealTypeCompatibleWithISPC
Definition Real.h:28
T DistanceSquared(const UE::Math::TVector2< T > &V1, const UE::Math::TVector2< T > &V2)
Definition VectorTypes.h:82
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition UnrealMathUtility.h:270
static constexpr UE_FORCEINLINE_HINT T Square(const T A)
Definition UnrealMathUtility.h:578