54 :m_threadInterface(threadInterface),
55 m_maxNumOutstandingTasks(0)
64 #ifdef DEBUG_SpuCollisionTaskProcess
95 #ifdef DEBUG_SPU_TASK_SCHEDULING
96 printf(
"SpuCollisionTaskProcess::initialize()\n");
97 #endif //DEBUG_SPU_TASK_SCHEDULING
109 #ifdef DEBUG_SpuCollisionTaskProcess
119 #ifdef DEBUG_SPU_TASK_SCHEDULING
120 printf(
"SpuCollisionTaskProcess::issueTask (m_currentTask= %d\n)",
m_currentTask);
121 #endif //DEBUG_SPU_TASK_SCHEDULING
152 unsigned int outputSize;
184 #ifdef DEBUG_SPU_TASK_SCHEDULING
186 #endif //DEBUG_SPU_TASK_SCHEDULING
188 #ifdef DEBUG_SpuCollisionTaskProcess
271 #ifdef DEBUG_SPU_TASK_SCHEDULING
272 printf(
"\nSpuCollisionTaskProcess::flush()\n");
273 #endif //DEBUG_SPU_TASK_SCHEDULING
286 unsigned int taskId=-1;
287 unsigned int outputSize;
~SpuCollisionTaskProcess()
#define MIDPHASE_TASK_PTR(task)
#define MIDPHASE_ENTRY_PTR(task, page, entry)
void setNumTasks(int maxNumTasks)
set the maximum number of SPU tasks allocated
virtual void sendRequest(uint32_t uiCommand, ppu_address_t uiArgument0, uint32_t uiArgument1)=0
send messages to SPUs
ppu_address_t m_inPairPtr
Task Description for SPU collision detection.
void initialize2(bool useEpa=false)
call initialize in the beginning of the frame, before addCollisionPairToTask
#define MIDPHASE_NUM_WORKUNITS_PER_TASK
void flush2()
call flush to submit potential outstanding work to SPUs and wait for all involved SPUs to be finished...
btAlignedObjectArray< bool > m_taskBusy
#define MIDPHASE_WORKUNIT_TASK_SIZE
virtual void startSPU()=0
non-blocking test if a task is completed.
SpuCollisionTaskProcess(btThreadSupportInterface *threadInterface, unsigned int maxNumOutstandingTasks)
#define MIDPHASE_NUM_WORKUNIT_PAGES
unsigned int m_currentPage
unsigned char * m_workUnitTaskBuffers
unsigned int m_currentTask
class btThreadSupportInterface * m_threadInterface
int size() const
return the number of elements in the array
void addWorkToTask(void *pairArrayPtr, int startIndex, int endIndex)
batch up additional work to a current task for SPU processing. When batch is full, it issues the task.
unsigned int m_currentPageEntry
#define btAlignedFree(ptr)
virtual void stopSPU()=0
tell the task scheduler we are done with the SPU tasks
btAlignedObjectArray< SpuGatherAndProcessPairsTaskDesc > m_spuGatherTaskDesc
#define MIDPHASE_NUM_WORKUNITS_PER_PAGE
void resize(int newsize, const T &fillData=T())
#define btAlignedAlloc(size, alignment)
virtual void waitForResponse(unsigned int *puiArgument0, unsigned int *puiArgument1)=0
check for messages from SPUs
unsigned int m_maxNumOutstandingTasks
#define CMD_GATHER_AND_PROCESS_PAIRLIST
unsigned int m_numBusyTasks