RavEngine
Loading...
Searching...
No Matches
physx::Dy::DynamicsTGSContext Class Reference
Inheritance diagram for physx::Dy::DynamicsTGSContext:
[legend]
Collaboration diagram for physx::Dy::DynamicsTGSContext:
[legend]

Public Member Functions

void destroy ()
 Destroys this DynamicsContext.
 
PX_FORCE_INLINE Cm::FlushPool & getTaskPool ()
 Returns the static world solver body.
 
PX_FORCE_INLINE ThresholdStream & getThresholdStream ()
 
PX_FORCE_INLINE PxvSimStats & getSimStats ()
 
virtual PX_CATCH_UNDEFINED_ENABLE_SIM_STATS void update (IG::SimpleIslandManager &simpleIslandManager, PxBaseTask *continuation, PxBaseTask *lostTouchTask, PxvNphaseImplementationContext *nphase, const PxU32 maxPatchesPerCM, const PxU32 maxArticulationLinks, const PxReal dt, const PxVec3 &gravity, PxBitMapPinned &changedHandleMap)
 The entry point for the constraint solver.
 
void updatePostKinematic (IG::SimpleIslandManager &simpleIslandManager, PxBaseTask *continuation, PxBaseTask *lostTouchTask, const PxU32 maxLinks)
 
virtual void processLostPatches (IG::SimpleIslandManager &, PxsContactManager **, PxU32, PxsContactManagerOutputCounts *)
 
virtual void processFoundPatches (IG::SimpleIslandManager &, PxsContactManager **, PxU32, PxsContactManagerOutputCounts *)
 
virtual void updateBodyCore (PxBaseTask *continuation)
 This method copy gpu solver body data to cpu body core.
 
virtual void setSimulationController (PxsSimulationController *simulationController)
 
virtual void mergeResults ()
 This method combines the results of several islands, e.g. constructing scene-level simulation statistics and merging together threshold streams for contact notification.
 
virtual void getDataStreamBase (void *&, void *&, void *&)
 
virtual PxSolverType::Enum getSolverType () const
 
PX_FORCE_INLINE ThreadContext * getThreadContext ()
 Allocates and returns a thread context object.
 
void putThreadContext (ThreadContext *context)
 Returns a thread context to the thread context pool.
 
PX_FORCE_INLINE PxU32 getKinematicCount () const
 
PX_FORCE_INLINE PxU64 getContextId () const
 
PX_FORCE_INLINE PxReal getLengthScale () const
 
- Public Member Functions inherited from physx::Dy::Context
PX_FORCE_INLINE PxReal getMaxBiasCoefficient () const
 
PX_FORCE_INLINE void setMaxBiasCoefficient (PxReal coeff)
 
PX_FORCE_INLINE PxReal getBounceThreshold () const
 Returns the bounce threshold.
 
PX_FORCE_INLINE PxReal getFrictionOffsetThreshold () const
 Returns the friction offset threshold.
 
PX_FORCE_INLINE PxReal getCorrelationDistance () const
 Returns the correlation distance.
 
PX_FORCE_INLINE PxReal getCCDSeparationThreshold () const
 Returns the CCD separation threshold.
 
PX_FORCE_INLINE PxReal getLengthScale () const
 Returns the length scale.
 
PX_FORCE_INLINE void setBounceThreshold (PxReal f)
 Sets the bounce threshold.
 
PX_FORCE_INLINE void setCorrelationDistance (PxReal f)
 Sets the correlation distance.
 
PX_FORCE_INLINE void setFrictionOffsetThreshold (PxReal offset)
 Sets the friction offset threshold.
 
PX_FORCE_INLINE void setCCDSeparationThreshold (PxReal offset)
 Sets the friction offset threshold.
 
PX_FORCE_INLINE PxU32 getSolverBatchSize () const
 Returns the solver batch size.
 
PX_FORCE_INLINE void setSolverBatchSize (PxU32 f)
 Sets the solver batch size.
 
PX_FORCE_INLINE PxU32 getSolverArticBatchSize () const
 Returns the solver batch size.
 
PX_FORCE_INLINE void setSolverArticBatchSize (PxU32 f)
 Sets the solver batch size.
 
PX_FORCE_INLINE PxU32 getMaxSolverConstraintSize () const
 Returns the maximum solver constraint size.
 
PX_FORCE_INLINE PxFrictionType::Enum getFrictionType () const
 Returns the friction model being used.
 
PX_FORCE_INLINE ThresholdStream & getThresholdStream ()
 Returns the threshold stream.
 
PX_FORCE_INLINE ThresholdStream & getForceChangedThresholdStream ()
 
PX_FORCE_INLINE ThresholdTable & getThresholdTable ()
 Returns the threshold table.
 
PX_FORCE_INLINE void setFrictionType (PxFrictionType::Enum f)
 Sets the friction model to be used.
 
PX_FORCE_INLINE PxcDataStreamPool & getContactStreamPool ()
 
PX_FORCE_INLINE PxcDataStreamPool & getPatchStreamPool ()
 
PX_FORCE_INLINE PxcDataStreamPool & getForceStreamPool ()
 
PX_FORCE_INLINE PxPinnedArray< Dy::ConstraintWriteback > & getConstraintWriteBackPool ()
 
PX_FORCE_INLINE PxReal getDt () const
 Returns the current frame's timestep.
 
PX_FORCE_INLINE PxReal getInvDt () const
 Returns 1/(current frame's timestep)
 
PX_FORCE_INLINE PxVec3 getGravity () const
 
void createThresholdStream (PxVirtualAllocatorCallback &callback)
 
void createForceChangeThresholdStream (PxVirtualAllocatorCallback &callback)
 
void setStateDirty (bool dirty)
 
bool isStateDirty ()
 
void setSuppressReadback (bool suppressReadback)
 
bool getSuppressReadback ()
 
void setDt (const PxReal dt)
 

Static Public Member Functions

static DynamicsTGSContext * create (PxcNpMemBlockPool *memBlockPool, PxcScratchAllocator &scratchAllocator, Cm::FlushPool &taskPool, PxvSimStats &simStats, PxTaskManager *taskManager, PxVirtualAllocatorCallback *allocator, PxsMaterialManager *materialManager, IG::SimpleIslandManager *islandManager, PxU64 contextID, const bool enableStabilization, const bool useEnhancedDeterminism, const PxReal lengthScale)
 Creates a DynamicsContext associated with a PxsContext.
 

Protected Member Functions

 DynamicsTGSContext (PxcNpMemBlockPool *memBlockPool, PxcScratchAllocator &scratchAllocator, Cm::FlushPool &taskPool, PxvSimStats &simStats, PxTaskManager *taskManager, PxVirtualAllocatorCallback *allocator, PxsMaterialManager *materialManager, IG::SimpleIslandManager *islandManager, PxU64 contextID, const bool enableStabilization, const bool useEnhancedDeterminism, const PxReal lengthScale)
 Constructor for DynamicsContext.
 
virtual ~DynamicsTGSContext ()
 Destructor for DynamicsContext.
 
void computeUnconstrainedVelocity (PxsRigidBody *atom) const
 Computes the unconstrained velocity for a given PxsRigidBody.
 
void setDescFromIndices (PxSolverConstraintDesc &desc, const IG::IslandSim &islandSim, const PxsIndexedInteraction &constraint, const PxU32 solverBodyOffset, PxTGSSolverBodyVel *solverBodies)
 fills in a PxSolverConstraintDesc from an indexed interaction
 
void setDescFromIndices (PxSolverConstraintDesc &desc, IG::EdgeIndex edgeIndex, const IG::SimpleIslandManager &islandManager, PxU32 *bodyRemapTable, const PxU32 solverBodyOffset, PxTGSSolverBodyVel *solverBodies)
 
void solveIsland (const SolverIslandObjectsStep &objects, const PxsIslandIndices &counts, const PxU32 solverBodyOffset, IG::SimpleIslandManager &islandManager, PxU32 *bodyRemapTable, PxsMaterialManager *materialManager, PxsContactManagerOutputIterator &iterator, PxBaseTask *continuation)
 
void prepareBodiesAndConstraints (const SolverIslandObjectsStep &objects, IG::SimpleIslandManager &islandManager, IslandContextStep &islandContext)
 
void setupDescs (IslandContextStep &islandContext, const SolverIslandObjectsStep &objects, PxU32 *mBodyRemapTable, PxU32 mSolverBodyOffset, PxsContactManagerOutputIterator &outputs)
 
void preIntegrateBodies (PxsBodyCore **bodyArray, PxsRigidBody **originalBodyArray, PxTGSSolverBodyVel *solverBodyVelPool, PxTGSSolverBodyTxInertia *solverBodyTxInertia, PxTGSSolverBodyData *solverBodyDataPool2, PxU32 *nodeIndexArray, const PxU32 bodyCount, const PxVec3 &gravity, const PxReal dt, PxU32 &posIters, PxU32 &velIters, PxU32 iteration)
 
void setupArticulations (IslandContextStep &islandContext, const PxVec3 &gravity, const PxReal dt, PxU32 &posIters, PxU32 &velIters, PxBaseTask *continuation)
 
PxU32 setupArticulationInternalConstraints (IslandContextStep &islandContext, PxReal dt, PxReal invStepDt)
 
void createSolverConstraints (PxSolverConstraintDesc *contactDescPtr, PxConstraintBatchHeader *headers, const PxU32 nbHeaders, PxsContactManagerOutputIterator &outputs, Dy::ThreadContext &islandThreadContext, Dy::ThreadContext &threadContext, PxReal stepDt, PxReal totalDt, PxReal invStepDt, const PxReal biasCoefficient, PxI32 velIters)
 
void solveConstraintsIteration (const PxSolverConstraintDesc *const contactDescPtr, const PxConstraintBatchHeader *const batchHeaders, const PxU32 nbHeaders, PxReal invStepDt, const PxTGSSolverBodyTxInertia *const solverTxInertia, const PxReal elapsedTime, const PxReal minPenetration, SolverContext &cache)
 
template<bool TSync>
void solveConcludeConstraintsIteration (const PxSolverConstraintDesc *const contactDescPtr, const PxConstraintBatchHeader *const batchHeaders, const PxU32 nbHeaders, PxTGSSolverBodyTxInertia *solverTxInertia, const PxReal elapsedTime, SolverContext &cache, const PxU32 iterCount)
 
template<bool Sync>
void parallelSolveConstraints (const PxSolverConstraintDesc *const contactDescPtr, const PxConstraintBatchHeader *const batchHeaders, const PxU32 nbHeaders, PxTGSSolverBodyTxInertia *solverTxInertia, const PxReal elapsedTime, const PxReal minPenetration, SolverContext &cache, const PxU32 iterCount)
 
void writebackConstraintsIteration (const PxConstraintBatchHeader *const hdrs, const PxSolverConstraintDesc *const contactDescPtr, const PxU32 nbHeaders)
 
void parallelWritebackConstraintsIteration (const PxSolverConstraintDesc *const contactDescPtr, const PxConstraintBatchHeader *const batchHeaders, const PxU32 nbHeaders)
 
void integrateBodies (const SolverIslandObjectsStep &objects, const PxU32 count, PxTGSSolverBodyVel *vels, PxTGSSolverBodyTxInertia *txInertias, const PxTGSSolverBodyData *const bodyDatas, PxReal dt, PxReal invTotalDt, bool averageBodies, const PxReal ratio)
 
void parallelIntegrateBodies (PxTGSSolverBodyVel *vels, PxTGSSolverBodyTxInertia *txInertias, const PxTGSSolverBodyData *const bodyDatas, const PxU32 count, PxReal dt, const PxU32 iteration, PxReal invTotalDt, bool average, const PxReal ratio)
 
void copyBackBodies (const SolverIslandObjectsStep &objects, PxTGSSolverBodyVel *vels, PxTGSSolverBodyTxInertia *txInertias, PxTGSSolverBodyData *solverBodyData, PxReal invDt, IG::IslandSim &islandSim, PxU32 startIdx, PxU32 endIdx)
 
void updateArticulations (Dy::ThreadContext &threadContext, const PxU32 startIdx, const PxU32 endIdx, PxReal dt)
 
void stepArticulations (Dy::ThreadContext &threadContext, const PxsIslandIndices &counts, PxReal dt, PxReal stepInvDt)
 
void iterativeSolveIsland (const SolverIslandObjectsStep &objects, const PxsIslandIndices &counts, ThreadContext &mThreadContext, const PxReal stepDt, const PxReal invStepDt, const PxU32 posIters, const PxU32 velIters, SolverContext &cache, const PxReal ratio, const PxReal biasCoefficient)
 
void iterativeSolveIslandParallel (const SolverIslandObjectsStep &objects, const PxsIslandIndices &counts, ThreadContext &mThreadContext, const PxReal stepDt, const PxU32 posIters, const PxU32 velIters, PxI32 *solverCounts, PxI32 *integrationCounts, PxI32 *articulationIntegrationCounts, PxI32 *solverProgressCount, PxI32 *integrationProgressCount, PxI32 *articulationProgressCount, PxU32 solverUnrollSize, PxU32 integrationUnrollSize, const PxReal ratio, const PxReal biasCoefficient)
 
void endIsland (ThreadContext &mThreadContext)
 
void finishSolveIsland (ThreadContext &mThreadContext, const SolverIslandObjectsStep &objects, const PxsIslandIndices &counts, IG::SimpleIslandManager &islandManager, PxBaseTask *continuation)
 
void resetThreadContexts ()
 Resets the thread contexts.
 
PX_FORCE_INLINE PxcScratchAllocator & getScratchAllocator ()
 Returns the scratch memory allocator.
 
- Protected Member Functions inherited from physx::Dy::Context
 Context (IG::SimpleIslandManager *islandManager, PxVirtualAllocatorCallback *allocatorCallback, PxvSimStats &simStats, bool enableStabilization, bool useEnhancedDeterminism, const PxReal maxBiasCoefficient, const PxReal lengthScale)
 

Protected Attributes

PxTGSSolverBodyVel mWorldSolverBodyVel
 
PxTGSSolverBodyTxInertia mWorldSolverBodyTxInertia
 
PxTGSSolverBodyData mWorldSolverBodyData2
 
PxcThreadCoherentCache< ThreadContext, PxcNpMemBlockPool > mThreadContextPool
 A thread context pool.
 
SolverStepConstraintDescPool mSolverConstraintDescPool
 Solver constraint desc array.
 
SolverStepConstraintDescPool mOrderedSolverConstraintDescPool
 
SolverStepConstraintDescPool mTempSolverConstraintDescPool
 
PxArray< PxConstraintBatchHeader > mContactConstraintBatchHeaders
 
PxArray< Cm::SpatialVector > mMotionVelocityArray
 Array of motion velocities for all bodies in the scene.
 
PxArray< PxsBodyCore * > mBodyCoreArray
 Array of body core pointers for all bodies in the scene.
 
PxArray< PxsRigidBody * > mRigidBodyArray
 Array of rigid body pointers for all bodies in the scene.
 
PxArray< FeatherstoneArticulation * > mArticulationArray
 Array of articulationpointers for all articulations in the scene.
 
SolverBodyVelDataPool mSolverBodyVelPool
 
SolverBodyTxInertiaPool mSolverBodyTxInertiaPool
 
SolverBodyDataStepPool mSolverBodyDataPool2
 
ThresholdStream * mExceededForceThresholdStream [2]
 
PxArray< PxU32 > mExceededForceThresholdStreamMask
 
PxArray< PxU32 > mSolverBodyRemapTable
 
PxArray< PxU32 > mNodeIndexArray
 
PxArray< PxsIndexedContactManager > mContactList
 
PxU32 mKinematicCount
 The total number of kinematic bodies in the scene.
 
PxI32 mThresholdStreamOut
 Atomic counter for the number of threshold stream elements.
 
PxsMaterialManager * mMaterialManager
 
PxsContactManagerOutputIterator mOutputIterator
 
- Protected Attributes inherited from physx::Dy::Context
ThresholdStream * mThresholdStream
 
ThresholdStream * mForceChangedThresholdStream
 
ThresholdTable mThresholdTable
 
IG::SimpleIslandManager * mIslandManager
 
PxsSimulationController * mSimulationController
 
PxReal mDt
 Time-step.
 
PxReal mInvDt
 1/time-step.
 
PxReal mMaxBiasCoefficient
 
const bool mEnableStabilization
 
const bool mUseEnhancedDeterminism
 
PxVec3 mGravity
 
PxU32 mMaxSolverConstraintSize
 max solver constraint size
 
PxReal mBounceThreshold
 Threshold controlling the relative velocity at which the solver transitions between restitution and bias for solving normal contact constraint.
 
PxReal mFrictionOffsetThreshold
 Threshold controlling whether friction anchors are constructed or not. If the separation is above mFrictionOffsetThreshold, the contact will not be considered to become a friction anchor.
 
PxReal mCCDSeparationThreshold
 Threshold controlling whether distant contacts are processed using bias, restitution or a combination of the two. This only has effect on pairs involving bodies that have enabled speculative CCD simulation mode.
 
PxReal mCorrelationDistance
 Threshold for controlling friction correlation.
 
PxReal mLengthScale
 The length scale from PxTolerancesScale::length.
 
PxU32 mSolverBatchSize
 The minimum size of an island to generate a solver task chain.
 
PxU32 mSolverArticBatchSize
 The minimum number of articulations required to generate a solver task chain.
 
PxFrictionType::Enum mFrictionType
 The current friction model being used.
 
PxcDataStreamPool mContactStreamPool
 Structure to encapsulate contact stream allocations. Used by GPU solver to reference pre-allocated pinned host memory.
 
PxcDataStreamPool mPatchStreamPool
 Struct to encapsulate the contact patch stream allocations. Used by GPU solver to reference pre-allocated pinned host memory.
 
PxcDataStreamPool mForceStreamPool
 Structure to encapsulate force stream allocations. Used by GPU solver to reference pre-allocated pinned host memory for force reports.
 
PxPinnedArray< Dy::ConstraintWriteback > mConstraintWriteBackPool
 Structure to encapsulate constraint write back allocations. Used by GPU/CPU solver to reference pre-allocated pinned host memory for breakable joint reports.
 
PxvSimStats & mSimStats
 
bool mBodyStateDirty
 
bool mSuppressReadback
 

Friends

class SetupDescsTask
 
class PreIntegrateTask
 
class SetupArticulationTask
 
class SetupArticulationInternalConstraintsTask
 
class SetupSolverConstraintsTask
 
class SolveIslandTask
 
class EndIslandTask
 
class SetupSolverConstraintsSubTask
 
class ParallelSolveTask
 
class PreIntegrateParallelTask
 
class CopyBackTask
 
class UpdateArticTask
 
class FinishSolveIslandTask
 

Member Function Documentation

◆ computeUnconstrainedVelocity()

void physx::Dy::DynamicsTGSContext::computeUnconstrainedVelocity ( PxsRigidBody *  atom) const
protected

Computes the unconstrained velocity for a given PxsRigidBody.

Parameters
[in]atomThe PxsRigidBody

◆ create()

DynamicsTGSContext * physx::Dy::DynamicsTGSContext::create ( PxcNpMemBlockPool *  memBlockPool,
PxcScratchAllocator &  scratchAllocator,
Cm::FlushPool &  taskPool,
PxvSimStats &  simStats,
PxTaskManager *  taskManager,
PxVirtualAllocatorCallback *  allocator,
PxsMaterialManager *  materialManager,
IG::SimpleIslandManager *  islandManager,
PxU64  contextID,
const bool  enableStabilization,
const bool  useEnhancedDeterminism,
const PxReal  lengthScale 
)
static

Creates a DynamicsContext associated with a PxsContext.

PxBaseTask* continuation

Returns
A pointer to the newly-created DynamicsContext.

◆ destroy()

void physx::Dy::DynamicsTGSContext::destroy ( )
virtual

Destroys this DynamicsContext.

Implements physx::Dy::Context.

◆ getDataStreamBase()

virtual void physx::Dy::DynamicsTGSContext::getDataStreamBase ( void *&  ,
void *&  ,
void *&   
)
inlinevirtual

Implements physx::Dy::Context.

◆ getScratchAllocator()

PX_FORCE_INLINE PxcScratchAllocator & physx::Dy::DynamicsTGSContext::getScratchAllocator ( )
inlineprotected

Returns the scratch memory allocator.

Returns
The scratch memory allocator.

◆ getSolverType()

virtual PxSolverType::Enum physx::Dy::DynamicsTGSContext::getSolverType ( ) const
inlinevirtual

Implements physx::Dy::Context.

◆ getTaskPool()

PX_FORCE_INLINE Cm::FlushPool & physx::Dy::DynamicsTGSContext::getTaskPool ( )
inline

Returns the static world solver body.

Returns
The static world solver body.

◆ getThreadContext()

PX_FORCE_INLINE ThreadContext * physx::Dy::DynamicsTGSContext::getThreadContext ( )
inline

Allocates and returns a thread context object.

Returns
A thread context.

◆ mergeResults()

void physx::Dy::DynamicsTGSContext::mergeResults ( )
virtual

This method combines the results of several islands, e.g. constructing scene-level simulation statistics and merging together threshold streams for contact notification.

Implements physx::Dy::Context.

◆ processFoundPatches()

virtual void physx::Dy::DynamicsTGSContext::processFoundPatches ( IG::SimpleIslandManager &  ,
PxsContactManager **  ,
PxU32  ,
PxsContactManagerOutputCounts *   
)
inlinevirtual

Implements physx::Dy::Context.

◆ processLostPatches()

virtual void physx::Dy::DynamicsTGSContext::processLostPatches ( IG::SimpleIslandManager &  ,
PxsContactManager **  ,
PxU32  ,
PxsContactManagerOutputCounts *   
)
inlinevirtual

Implements physx::Dy::Context.

◆ putThreadContext()

void physx::Dy::DynamicsTGSContext::putThreadContext ( ThreadContext *  context)
inline

Returns a thread context to the thread context pool.

Parameters
[in]contextThe thread context to return to the thread context pool.

◆ setDescFromIndices()

void physx::Dy::DynamicsTGSContext::setDescFromIndices ( PxSolverConstraintDesc &  desc,
const IG::IslandSim &  islandSim,
const PxsIndexedInteraction &  constraint,
const PxU32  solverBodyOffset,
PxTGSSolverBodyVel *  solverBodies 
)
protected

fills in a PxSolverConstraintDesc from an indexed interaction

Parameters
[in,out]descThe PxSolverConstraintDesc
[in]constraintThe PxsIndexedInteraction

◆ setSimulationController()

virtual void physx::Dy::DynamicsTGSContext::setSimulationController ( PxsSimulationController *  simulationController)
inlinevirtual

Implements physx::Dy::Context.

◆ update()

void physx::Dy::DynamicsTGSContext::update ( IG::SimpleIslandManager &  simpleIslandManager,
PxBaseTask *  continuation,
PxBaseTask *  lostTouchTask,
PxvNphaseImplementationContext *  nphase,
const PxU32  maxPatchesPerCM,
const PxU32  maxArticulationLinks,
const PxReal  dt,
const PxVec3 &  gravity,
PxBitMapPinned &  changedHandleMap 
)
virtual

The entry point for the constraint solver.

Parameters
[in]dtThe simulation time-step
[in]continuationThe continuation task for the solver

This method is called after the island generation has completed. Its main responsibilities are: (1) Reserving the solver body pools (2) Initializing the static and kinematic solver bodies, which are shared resources between islands. (3) Construct the solver task chains for each island

Each island is solved as an independent solver task chain in parallel.

Implements physx::Dy::Context.

◆ updateBodyCore()

void physx::Dy::DynamicsTGSContext::updateBodyCore ( PxBaseTask *  continuation)
virtual

This method copy gpu solver body data to cpu body core.

Implements physx::Dy::Context.


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