12#ifndef CHAOS_SIMDCOLLISIONSOLVER_USEDUMMYSOLVERBODY
13#define CHAOS_SIMDCOLLISIONSOLVER_USEDUMMYSOLVERBODY 0
19 class FPBDCollisionConstraint;
29 template<
int TNumLanes>
30 class TPBDCollisionSolverSimd;
32 template<
int TNumLanes>
43#if !CHAOS_SIMDCOLLISIONSOLVER_USEDUMMYSOLVERBODY
45 for (
int32 LaneIndex = 0; LaneIndex < 4; ++LaneIndex)
102 for (
int32 LaneIndex = 0; LaneIndex < 4; ++LaneIndex)
128 for (
int32 LaneIndex = 0; LaneIndex < 4; ++LaneIndex)
153 for (
int32 LaneIndex = 0; LaneIndex < 4; ++LaneIndex)
170 template<
int TNumLanes>
180 template<
int TNumLanes>
230 template<
int TNumLanes>
284 const int32 ManifoldPointIndex,
325 const int32 ManifoldPointIndex,
326 const int32 LaneIndex,
375 const int32 ManifoldPointIndex,
376 const int32 LaneIndex,
463 const int32 ManifoldPointIndex,
464 const int32 LaneIndex,
522 ManifoldPoint.SimdContactMassNormal.SetValue(LaneIndex, ContactMassNormal);
526 const int32 LaneIndex,
791 NetPushOutTangentU =
SimdSelect(ApplyFrictionCone, NetPushOutTangentU,
Zero);
792 NetPushOutTangentV =
SimdSelect(ApplyFrictionCone, NetPushOutTangentV,
Zero);
793 StaticFrictionRatio =
SimdSelect(ApplyFrictionCone, StaticFrictionRatio,
Zero);
1012 const int32 ManifoldPointIndex,
1013 const int32 LaneIndex,
1025 const int32 ManifoldPointIndex,
1026 const int32 LaneIndex,
1038 const int32 ManifoldPointIndex,
1039 const int32 LaneIndex,
1094 template<
int TNumLanes>
1102 template<
int TNumLanes>
1110 template<
int TNumLanes>
1117 template<
int TNumLanes>
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ One
Definition PropertyPathHelpersTest.h:16
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
Definition SolverBody.h:99
const FSolverMatrix33 & InvI() const
Get the world-space inverse inertia.
Definition SolverBody.h:166
FSolverReal InvM() const
Get the inverse mass.
Definition SolverBody.h:156
Definition PBDCollisionSolverSimd.h:1092
static void SolveVelocityWithFriction(const TArrayView< TPBDCollisionSolverSimd< TNumLanes > > &Solvers, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPoints, const TArrayView< TSolverBodyPtrPairSimd< TNumLanes > > &SolverBodies, const FSolverReal Dt)
static void SolvePositionWithFriction(const TArrayView< TPBDCollisionSolverSimd< TNumLanes > > &Solvers, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPoints, const TArrayView< TSolverBodyPtrPairSimd< TNumLanes > > &SolverBodies, const FSolverReal Dt, const FSolverReal MaxPushOut)
static void SolvePositionNoFriction(const TArrayView< TPBDCollisionSolverSimd< TNumLanes > > &Solvers, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPoints, const TArrayView< TSolverBodyPtrPairSimd< TNumLanes > > &SolverBodies, const FSolverReal Dt, const FSolverReal MaxPushOut)
static void SolveVelocityNoFriction(const TArrayView< TPBDCollisionSolverSimd< TNumLanes > > &Solvers, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPoints, const TArrayView< TSolverBodyPtrPairSimd< TNumLanes > > &SolverBodies, const FSolverReal Dt)
static CHAOS_API void CheckISPC()
Definition PBDCollisionSolverSimd.cpp:194
A SIMD row of contact points from a set of FPBDCollisionSolverSimd.
Definition PBDCollisionSolverSimd.h:182
FSimdRealf SimdNetImpulseNormal
Definition PBDCollisionSolverSimd.h:222
FSimdRealf SimdContactDeltaNormal
Definition PBDCollisionSolverSimd.h:199
FSimdVec3f SimdContactNormal
Definition PBDCollisionSolverSimd.h:198
FSimdRealf SimdContactMassNormal
Definition PBDCollisionSolverSimd.h:201
FSimdRealf SimdContactDeltaTangentU
Definition PBDCollisionSolverSimd.h:208
FSimdVec3f SimdContactNormalAngular1
Definition PBDCollisionSolverSimd.h:203
FSimdRealf SimdNetPushOutNormal
Definition PBDCollisionSolverSimd.h:200
FSimdSelector IsValid
Definition PBDCollisionSolverSimd.h:191
FSimdVec3f SimdContactTangentVAngular1
Definition PBDCollisionSolverSimd.h:218
FSimdRealf SimdNetImpulseTangentU
Definition PBDCollisionSolverSimd.h:223
FSimdRealf SimdContactMassTangentV
Definition PBDCollisionSolverSimd.h:214
FSimdVec3f SimdContactTangentU
Definition PBDCollisionSolverSimd.h:206
FSimdRealf SimdNetPushOutTangentV
Definition PBDCollisionSolverSimd.h:211
FSimdVec3f SimdContactTangentVAngular0
Definition PBDCollisionSolverSimd.h:216
FSimdVec3f SimdContactNormalAngular0
Definition PBDCollisionSolverSimd.h:202
FSimdRealf SimdNetPushOutTangentU
Definition PBDCollisionSolverSimd.h:210
FSimdRealf SimdNetImpulseTangentV
Definition PBDCollisionSolverSimd.h:224
FSimdVec3f SimdContactTangentV
Definition PBDCollisionSolverSimd.h:207
FSimdRealf SimdContactDeltaTangentV
Definition PBDCollisionSolverSimd.h:209
FSimdVec3f SimdContactTangentUAngular1
Definition PBDCollisionSolverSimd.h:217
FSimdRealf SimdContactMassTangentU
Definition PBDCollisionSolverSimd.h:213
FSimdVec3f SimdRelativeContactPoint0
Definition PBDCollisionSolverSimd.h:194
FSimdVec3f SimdContactTangentUAngular0
Definition PBDCollisionSolverSimd.h:215
FSimdRealf SimdContactTargetVelocityNormal
Definition PBDCollisionSolverSimd.h:221
FSimdRealf SimdStaticFrictionRatio
Definition PBDCollisionSolverSimd.h:212
FSimdVec3f SimdRelativeContactPoint1
Definition PBDCollisionSolverSimd.h:195
Definition PBDCollisionSolverSimd.h:232
int32 MaxManifoldPoints
Definition PBDCollisionSolverSimd.h:1069
FSolverVec3 GetNetPushOut(const int32 ManifoldPointIndex, const int32 LaneIndex, const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer) const
Definition PBDCollisionSolverSimd.h:1011
void ResetManifold()
Definition PBDCollisionSolverSimd.h:298
FSolverVec3 GetNetImpulse(const int32 ManifoldPointIndex, const int32 LaneIndex, const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer) const
Definition PBDCollisionSolverSimd.h:1024
void Init()
Definition PBDCollisionSolverSimd.h:1054
static TPBDCollisionSolverSimd< TNumLanes > MakeInitialized()
Definition PBDCollisionSolverSimd.h:245
TPBDCollisionSolverSimd()
Definition PBDCollisionSolverSimd.h:259
void SetManifoldPoint(const int32 ManifoldPointIndex, const int32 LaneIndex, const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSolverVec3 &InRelativeContactPosition0, const FSolverVec3 &InRelativeContactPosition1, const FSolverVec3 &InWorldContactNormal, const FSolverVec3 &InWorldContactTangentU, const FSolverVec3 &InWorldContactTangentV, const FSolverReal InWorldContactDeltaNormal, const FSolverReal InWorldContactDeltaTangentU, const FSolverReal InWorldContactDeltaTangentV, const FSolverReal InWorldContactVelocityTargetNormal, const FSolverBody &Body0, const FSolverBody &Body1, const FSolverReal InvMScale0, const FSolverReal InvIScale0, const FSolverReal InvMScale1, const FSolverReal InvIScale1)
Definition PBDCollisionSolverSimd.h:324
int32 ManifoldPointBeginIndex
Definition PBDCollisionSolverSimd.h:1070
FSimdRealf SimdInvM0
Definition PBDCollisionSolverSimd.h:1077
FSolverReal GetStaticFrictionRatio(const int32 ManifoldPointIndex, const int32 LaneIndex, const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer) const
Definition PBDCollisionSolverSimd.h:1037
FSimdInt32 NumManifoldPoints() const
Definition PBDCollisionSolverSimd.h:261
void SetManifoldPointsBuffer(const int32 InBeginIndex, const int32 InMax)
Definition PBDCollisionSolverSimd.h:271
int32 GetMaxManifoldPoints() const
Definition PBDCollisionSolverSimd.h:278
void SetStiffness(const FSimdRealf InStiffness)
Definition PBDCollisionSolverSimd.h:310
const FSimdManifoldPoint & GetManifoldPoint(const int32 ManifoldPointIndex, const TArrayView< const FSimdManifoldPoint > &ManifoldPointsBuffer) const
Definition PBDCollisionSolverSimd.h:283
void SolvePositionNoFriction(const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSimdSolverBodyPtr &Body0, const FSimdSolverBodyPtr &Body1, const FSimdRealf &MaxPushOut)
Definition PBDCollisionSolverSimd.h:551
void SetNumManifoldPoints(const FSimdInt32 &InNum)
Definition PBDCollisionSolverSimd.h:266
static const int32 MaxConstrainedBodies
Definition PBDCollisionSolverSimd.h:241
static const int32 MaxPointsPerConstraint
Definition PBDCollisionSolverSimd.h:242
void SolvePositionWithFriction(const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSimdSolverBodyPtr &Body0, const FSimdSolverBodyPtr &Body1, const FSimd4Realf &MaxPushOut, const FSimd4Realf &FrictionStiffnessScale)
Definition PBDCollisionSolverSimd.h:628
int32 GetBufferIndex(const int32 ManifoldPointIndex) const
Definition PBDCollisionSolverSimd.h:1049
FSimdRealf SimdStaticFriction
Definition PBDCollisionSolverSimd.h:1073
FSimdRealf SimdStiffness
Definition PBDCollisionSolverSimd.h:1076
void InitManifoldPoints(const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer)
Definition PBDCollisionSolverSimd.h:315
void UpdateManifoldPointMass(const int32 ManifoldPointIndex, const int32 LaneIndex, const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSolverBody &Body0, const FSolverBody &Body1, const FSolverReal InvMScale0, const FSolverReal InvIScale0, const FSolverReal InvMScale1, const FSolverReal InvIScale1)
Update the cached mass properties based on the current body transforms.
Definition PBDCollisionSolverSimd.h:374
void UpdateMassNormal(const int32 LaneIndex, const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSolverBody &Body0, const FSolverBody &Body1, const FSolverReal InvMScale0, const FSolverReal InvIScale0, const FSolverReal InvMScale1, const FSolverReal InvIScale1)
Definition PBDCollisionSolverSimd.h:525
void SetFriction(const FSimdRealf InStaticFriction, const FSimdRealf InDynamicFriction, const FSimdRealf InVelocityFriction)
Definition PBDCollisionSolverSimd.h:303
void SolveVelocityNoFriction(const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSimdSolverBodyPtr &Body0, const FSimdSolverBodyPtr &Body1, const FSimdRealf &Dt)
Definition PBDCollisionSolverSimd.h:830
FSimdInt32 SimdNumManifoldPoints
Definition PBDCollisionSolverSimd.h:1071
void SolveVelocityWithFriction(const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSimdSolverBodyPtr &Body0, const FSimdSolverBodyPtr &Body1, const FSimdRealf &Dt, const FSimd4Realf &FrictionStiffnessScale)
Definition PBDCollisionSolverSimd.h:992
FSimdRealf SimdDynamicFriction
Definition PBDCollisionSolverSimd.h:1074
FSimdRealf SimdVelocityFriction
Definition PBDCollisionSolverSimd.h:1075
void Reset()
Definition PBDCollisionSolverSimd.h:291
FSimdRealf SimdInvM1
Definition PBDCollisionSolverSimd.h:1078
void UpdateManifoldPointMassNormal(const int32 ManifoldPointIndex, const int32 LaneIndex, const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSolverBody &Body0, const FSolverBody &Body1, const FSolverReal InvMScale0, const FSolverReal InvIScale0, const FSolverReal InvMScale1, const FSolverReal InvIScale1)
Definition PBDCollisionSolverSimd.h:462
static TPBDCollisionSolverSimd< TNumLanes > MakeUninitialized()
Definition PBDCollisionSolverSimd.h:253
void SolveVelocityWithFrictionImpl(const TArrayView< FSimdManifoldPoint > &ManifoldPointsBuffer, const FSimdSolverBodyPtr &Body0, const FSimdSolverBodyPtr &Body1, const FSimdRealf &Dt, const FSimd4Realf &FrictionStiffnessScale)
Definition PBDCollisionSolverSimd.h:897
Definition ArrayView.h:139
float Chaos_PBDCollisionSolver_Position_MinInvMassScale
Definition PBDCollisionSolver.cpp:33
float Chaos_PBDCollisionSolver_Velocity_MinInvMassScale
Definition PBDCollisionSolver.cpp:46
FORCEINLINE FSimd4Realf SimdMax(const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:524
FORCEINLINE FSimd4Realf SimdSquare(const FSimd4Realf &InV)
Definition Simd4.h:479
void ScatterBodyPositionCorrections(const TSimdVec3f< 4 > &DP0, const TSimdVec3f< 4 > &DQ0, const TSimdVec3f< 4 > &DP1, const TSimdVec3f< 4 > &DQ1, const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1)
Definition PBDCollisionSolverSimd.h:94
FORCEINLINE FSimd4Realf SimdMultiply(const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:362
void GatherBodyVelocities(const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1, TSimdVec3f< 4 > &V0, TSimdVec3f< 4 > &W0, TSimdVec3f< 4 > &V1, TSimdVec3f< 4 > &W1)
Definition PBDCollisionSolverSimd.h:120
FORCEINLINE FSimd4Selector SimdLess(const FSimd4Int32 &InL, const FSimd4Int32 &InR)
Definition Simd4.h:250
FORCEINLINE FSimd4Realf SimdDivide(const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:431
FORCEINLINE FSimd4Realf SimdMin(const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:512
FORCEINLINE FSimd4Realf SimdDotProduct(const FSimd4Vec3f &L, const FSimd4Vec3f &R)
Definition Simd4.h:460
void GatherBodyPositionCorrections(const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1, TSimdVec3f< 4 > &DP0, TSimdVec3f< 4 > &DQ0, TSimdVec3f< 4 > &DP1, TSimdVec3f< 4 > &DQ1)
Definition PBDCollisionSolverSimd.h:35
FORCEINLINE FSimd4Selector SimdNotEqual(const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:188
FORCEINLINE FSimd4Selector SimdAnd(const FSimd4Selector &InL, const FSimd4Selector &InR)
Definition Simd4.h:164
FORCEINLINE FSimd4Realf SimdSubtract(const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:333
FORCEINLINE FSimd4Realf SimdAdd(const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:304
FORCEINLINE FSimd4Selector SimdOr(const FSimd4Selector &InL, const FSimd4Selector &InR)
Definition Simd4.h:152
void ScatterBodyVelocities(const TSimdVec3f< 4 > &V0, const TSimdVec3f< 4 > &W0, const TSimdVec3f< 4 > &V1, const TSimdVec3f< 4 > &W1, const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1)
Definition PBDCollisionSolverSimd.h:145
FORCEINLINE FSimd4Selector SimdGreaterEqual(const FSimd4Int32 &InL, const FSimd4Int32 &InR)
Definition Simd4.h:200
FORCEINLINE FSimd4Realf SimdSelect(const FSimd4Selector &InSelector, const FSimd4Realf &InL, const FSimd4Realf &InR)
Definition Simd4.h:274
FORCEINLINE bool SimdAnyTrue(const FSimd4Selector &InL)
Definition Simd4.h:129
FORCEINLINE FSimd4Selector SimdGreater(const FSimd4Int32 &InL, const FSimd4Int32 &InR)
Definition Simd4.h:225
FORCEINLINE FSimd4Realf SimdInvSqrt(const FSimd4Realf &InV)
Definition Simd4.h:501
FORCEINLINE FSimd4Realf SimdNegate(const FSimd4Realf &InL)
Definition Simd4.h:293
FORCEINLINE FSimd4Vec3f SimdCrossProduct(const FSimd4Vec3f &L, const FSimd4Vec3f &R)
Definition Simd4.h:443
FORCEINLINE FSimd4Vec3f SimdGatherAligned(const FVec3f &InA, const FVec3f &InB, const FVec3f &InC, const FVec3f &InD)
Definition Simd4.h:544
Definition SkeletalMeshComponent.h:307
TVector< FRealSingle, 3 > FVec3f
Definition Core.h:27
FRealSingle FSolverReal
Definition SolverBody.h:38
Definition OverriddenPropertySet.cpp:45
Definition SimdTypes.h:127
FORCEINLINE void SetValues(const int32 I)
Definition SimdTypes.h:144
FORCEINLINE int32 GetValue(const int32 LaneIndex) const
Definition SimdTypes.h:139
static TSimdInt32< TNumLanes > Zero()
Definition SimdTypes.h:168
FORCEINLINE float GetValue(const int32 LaneIndex) const
Definition SimdTypes.h:180
static TSimdRealf Make(const float F)
FORCEINLINE void SetValue(const int32 LaneIndex, const float F)
Definition SimdTypes.h:175
FORCEINLINE void SetValues(const float F)
Definition SimdTypes.h:185
Definition SimdTypes.h:75
FORCEINLINE void SetValue(const int LaneIndex, bool B)
Definition SimdTypes.h:78
Definition SimdTypes.h:99
FORCEINLINE ValueType GetValue(const int32 LaneIndex) const
Definition SimdTypes.h:108
Definition SimdTypes.h:204
Definition PBDCollisionSolverSimd.h:172
TSolverBodyPtrSimd< TNumLanes > Body1
Definition PBDCollisionSolverSimd.h:174
TSolverBodyPtrSimd< TNumLanes > Body0
Definition PBDCollisionSolverSimd.h:173