MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / dispatchTask

Method dispatchTask

physx/source/task/src/TaskManager.cpp:485–536  ·  view source on GitHub ↗

* Submit a ready task to its appropriate dispatcher. */

Source from the content-addressed store, hash-verified

483 * Submit a ready task to its appropriate dispatcher.
484 */
485bool PxTaskMgr::dispatchTask( PxTaskID taskID, bool gpuGroupStart )
486{
487 LOCK(); // todo: reader lock necessary?
488 PxTaskTableRow& tt = mTaskTable[ taskID ];
489
490 // prevent re-submission
491 if( tt.mType == PxTaskType::TT_COMPLETED )
492 {
493 mErrorCallback.reportError(PxErrorCode::eDEBUG_WARNING, "PxTask dispatched twice", __FILE__, __LINE__);
494 return false;
495 }
496
497 switch ( tt.mType )
498 {
499 case PxTaskType::TT_CPU:
500 mCpuDispatcher->submitTask( *tt.mTask );
501 break;
502
503 case PxTaskType::TT_GPU:
504#if PX_WINDOWS_FAMILY
505 if( mGpuDispatcher )
506 {
507 if( !gpuGroupStart )
508 {
509 mGpuDispatcher->startGroup();
510 }
511 mGpuDispatcher->submitTask( *tt.mTask );
512 gpuGroupStart = true;
513 }
514 else
515#endif
516 {
517 mErrorCallback.reportError(PxErrorCode::eDEBUG_WARNING, "No GPU dispatcher", __FILE__, __LINE__);
518 }
519 break;
520
521 case PxTaskType::TT_NOT_PRESENT:
522 /* No task registered with this taskID, resolve its dependencies */
523 PX_ASSERT(!tt.mTask);
524 //shdfnd::getFoundation().error(PX_INFO, "unregistered task resolved");
525 gpuGroupStart |= resolveRow( taskID, gpuGroupStart );
526 break;
527 case PxTaskType::TT_COMPLETED:
528 default:
529 mErrorCallback.reportError(PxErrorCode::eDEBUG_WARNING, "Unknown task type", __FILE__, __LINE__);
530 gpuGroupStart |= resolveRow( taskID, gpuGroupStart );
531 break;
532 }
533
534 tt.mType = PxTaskType::TT_COMPLETED;
535 return gpuGroupStart;
536}
537
538}// end physx namespace

Callers

nothing calls this directly

Calls 2

submitTaskMethod · 0.80
reportErrorMethod · 0.45

Tested by

no test coverage detected