![]() |
DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
|
|
Go to the source code of this file.
Data Structures | |
struct | taskqueue_state_t |
struct | taskqueue_state_thread_t |
Macros | |
#define | MAXTHREADS 1024 |
#define | RECENTFRAMES 64 |
#define | THREADBATCH 64 |
#define | THREADSLEEPCOUNT 1000 |
#define | THREADTASKS 256 |
Functions | |
static void | TaskQueue_DistributeTasks (void) |
void | TaskQueue_Enqueue (int numtasks, taskqueue_task_t *tasks) |
static void | TaskQueue_ExecuteTask (taskqueue_task_t *t) |
void | TaskQueue_Frame (qbool shutdown) |
void | TaskQueue_Init (void) |
qbool | TaskQueue_IsDone (taskqueue_task_t *t) |
void | TaskQueue_Setup (taskqueue_task_t *t, taskqueue_task_t *preceding, void(*func)(taskqueue_task_t *), size_t i0, size_t i1, void *p0, void *p1) |
void | TaskQueue_Shutdown (void) |
void | TaskQueue_Task_CheckTasksDone (taskqueue_task_t *t) |
static int | TaskQueue_ThreadFunc (void *d) |
void | TaskQueue_WaitForTaskDone (taskqueue_task_t *t) |
void | TaskQueue_Yield (taskqueue_task_t *t) |
Variables | |
cvar_t | taskqueue_maxthreads = {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "taskqueue_maxthreads", "32", "maximum number of threads to start up as needed based on task count"} |
cvar_t | taskqueue_minthreads = {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "taskqueue_minthreads", "0", "minimum number of threads to keep active for executing tasks"} |
static taskqueue_state_t | taskqueue_state |
cvar_t | taskqueue_tasksperthread = {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "taskqueue_tasksperthread", "4000", "expected amount of work that a single thread can do in a frame - the number of threads being used depends on the average workload in recent frames"} |
#define MAXTHREADS 1024 |
Definition at line 8 of file taskqueue.c.
Referenced by TaskQueue_Frame().
#define RECENTFRAMES 64 |
Definition at line 9 of file taskqueue.c.
Referenced by TaskQueue_Frame().
#define THREADBATCH 64 |
Definition at line 11 of file taskqueue.c.
#define THREADSLEEPCOUNT 1000 |
Definition at line 12 of file taskqueue.c.
Referenced by TaskQueue_ThreadFunc().
#define THREADTASKS 256 |
Definition at line 10 of file taskqueue.c.
Referenced by TaskQueue_DistributeTasks(), and TaskQueue_ThreadFunc().
Definition at line 144 of file taskqueue.c.
References taskqueue_state_t::command_lock, taskqueue_state_thread_t::dequeueposition, taskqueue_state_thread_t::enqueueposition, taskqueue_state_t::enqueuethread, NULL, taskqueue_state_t::numthreads, taskqueue_task_t::preceding, taskqueue_state_thread_t::queue, taskqueue_state_t::queue_data, taskqueue_state_t::queue_dequeueposition, taskqueue_state_t::queue_enqueueposition, taskqueue_state_t::queue_size, TaskQueue_ExecuteTask(), taskqueue_state, Thread_AtomicLock, Thread_AtomicUnlock, taskqueue_state_t::threads, and THREADTASKS.
Referenced by TaskQueue_Frame(), and TaskQueue_WaitForTaskDone().
void TaskQueue_Enqueue | ( | int | numtasks, |
taskqueue_task_t * | tasks ) |
Definition at line 105 of file taskqueue.c.
References taskqueue_state_t::command_lock, i, Mem_Realloc, taskqueue_state_t::queue_data, taskqueue_state_t::queue_dequeueposition, taskqueue_state_t::queue_enqueueposition, taskqueue_state_t::queue_size, taskqueue_state, taskqueue_state_t::tasks_thisframe, Thread_AtomicLock, Thread_AtomicUnlock, and zonemempool.
Referenced by R_Shadow_BounceGrid_EnqueuePhotons_Task(), R_Shadow_BounceGrid_EnqueueSlices_Task(), R_Shadow_UpdateBounceGridTexture(), and TaskQueue_Yield().
|
static |
Definition at line 66 of file taskqueue.c.
References taskqueue_task_t::func, taskqueue_task_t::preceding, and TaskQueue_Yield().
Referenced by TaskQueue_DistributeTasks(), and TaskQueue_ThreadFunc().
Definition at line 213 of file taskqueue.c.
References bound, taskqueue_state_t::command_lock, taskqueue_state_thread_t::handle, i, cvar_t::integer, MAXTHREADS, NULL, taskqueue_state_t::numthreads, taskqueue_state_thread_t::quit, RECENTFRAMES, TaskQueue_DistributeTasks(), taskqueue_maxthreads, taskqueue_minthreads, taskqueue_state, taskqueue_tasksperthread, TaskQueue_ThreadFunc(), taskqueue_state_t::tasks_averageperframe, taskqueue_state_t::tasks_recentframes, taskqueue_state_t::tasks_recentframesindex, taskqueue_state_t::tasks_thisframe, Thread_AtomicLock, Thread_AtomicUnlock, Thread_CreateThread, taskqueue_state_thread_t::thread_index, Thread_WaitThread, and taskqueue_state_t::threads.
Referenced by Host_Frame(), and TaskQueue_Shutdown().
Definition at line 53 of file taskqueue.c.
References Cvar_RegisterVariable(), taskqueue_maxthreads, taskqueue_minthreads, and taskqueue_tasksperthread.
Referenced by Host_Init().
qbool TaskQueue_IsDone | ( | taskqueue_task_t * | t | ) |
Definition at line 139 of file taskqueue.c.
References taskqueue_task_t::done.
void TaskQueue_Setup | ( | taskqueue_task_t * | t, |
taskqueue_task_t * | preceding, | ||
void(* | func )(taskqueue_task_t *), | ||
size_t | i0, | ||
size_t | i1, | ||
void * | p0, | ||
void * | p1 ) |
Definition at line 282 of file taskqueue.c.
References taskqueue_task_t::func, taskqueue_task_t::i, taskqueue_task_t::p, and taskqueue_task_t::preceding.
Referenced by R_Shadow_BounceGrid_EnqueuePhotons_Task(), R_Shadow_BounceGrid_EnqueueSlices_Task(), and R_Shadow_UpdateBounceGridTexture().
Definition at line 60 of file taskqueue.c.
References taskqueue_state_t::numthreads, TaskQueue_Frame(), and taskqueue_state.
Referenced by Host_Shutdown().
void TaskQueue_Task_CheckTasksDone | ( | taskqueue_task_t * | t | ) |
Definition at line 293 of file taskqueue.c.
References taskqueue_task_t::done, taskqueue_task_t::i, taskqueue_task_t::p, taskqueue_task_t::preceding, and TaskQueue_Yield().
Referenced by R_Shadow_BounceGrid_EnqueuePhotons_Task(), and R_Shadow_BounceGrid_EnqueueSlices_Task().
Definition at line 77 of file taskqueue.c.
References taskqueue_state_t::command_lock, taskqueue_state_thread_t::dequeueposition, taskqueue_state_thread_t::enqueueposition, NULL, taskqueue_state_thread_t::queue, taskqueue_state_thread_t::quit, Sys_Sleep(), TaskQueue_ExecuteTask(), taskqueue_state, Thread_AtomicLock, Thread_AtomicUnlock, THREADSLEEPCOUNT, and THREADTASKS.
Referenced by TaskQueue_Frame().
void TaskQueue_WaitForTaskDone | ( | taskqueue_task_t * | t | ) |
Definition at line 199 of file taskqueue.c.
References taskqueue_state_t::command_lock, taskqueue_task_t::done, TaskQueue_DistributeTasks(), taskqueue_state, Thread_AtomicLock, and Thread_AtomicUnlock.
Referenced by R_Shadow_UpdateBounceGridTexture().
void TaskQueue_Yield | ( | taskqueue_task_t * | t | ) |
Definition at line 133 of file taskqueue.c.
References TaskQueue_Enqueue(), and taskqueue_task_t::yieldcount.
Referenced by R_Shadow_BounceGrid_EnqueueSlices_Task(), TaskQueue_ExecuteTask(), and TaskQueue_Task_CheckTasksDone().
cvar_t taskqueue_maxthreads = {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "taskqueue_maxthreads", "32", "maximum number of threads to start up as needed based on task count"} |
Definition at line 5 of file taskqueue.c.
Referenced by TaskQueue_Frame(), and TaskQueue_Init().
cvar_t taskqueue_minthreads = {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "taskqueue_minthreads", "0", "minimum number of threads to keep active for executing tasks"} |
Definition at line 4 of file taskqueue.c.
Referenced by TaskQueue_Frame(), and TaskQueue_Init().
|
static |
Definition at line 51 of file taskqueue.c.
Referenced by TaskQueue_DistributeTasks(), TaskQueue_Enqueue(), TaskQueue_Frame(), TaskQueue_Shutdown(), TaskQueue_ThreadFunc(), and TaskQueue_WaitForTaskDone().
cvar_t taskqueue_tasksperthread = {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "taskqueue_tasksperthread", "4000", "expected amount of work that a single thread can do in a frame - the number of threads being used depends on the average workload in recent frames"} |
Definition at line 6 of file taskqueue.c.
Referenced by TaskQueue_Frame(), and TaskQueue_Init().