job refactor progress
This commit is contained in:
parent
46bf8f5ca4
commit
0d8531e740
5
.gitignore
vendored
5
.gitignore
vendored
@ -7,8 +7,9 @@
|
||||
*.tracy
|
||||
*.pdb
|
||||
*.exe
|
||||
.vs/*
|
||||
.vscode/*
|
||||
*.vs/*
|
||||
*.vscode/*
|
||||
*.log
|
||||
|
||||
imgui.ini
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
SharedScratchCtx shared_scratch_ctx = ZI;
|
||||
SharedArenaCtx shared_arena_ctx = ZI;
|
||||
|
||||
/* NOTE: Application will exit if arena fails to reserve or commit initial memory. */
|
||||
Arena *AllocArena(u64 reserve)
|
||||
|
||||
@ -24,24 +24,25 @@ Struct(TempArena) {
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ Scratch types
|
||||
//~ Per-fiber arena ctx types
|
||||
|
||||
#define ScratchArenasPerCtx 2
|
||||
|
||||
Struct(ScratchCtx)
|
||||
Struct(ArenaCtx)
|
||||
{
|
||||
Arena *arenas[ScratchArenasPerCtx];
|
||||
Arena *scratch_arenas[ScratchArenasPerCtx];
|
||||
Arena *perm_arena;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ Shared state
|
||||
|
||||
Struct(SharedScratchCtx)
|
||||
Struct(SharedArenaCtx)
|
||||
{
|
||||
ScratchCtx scratch_contexts[MaxFibers];
|
||||
ArenaCtx arena_contexts[MaxFibers];
|
||||
};
|
||||
|
||||
extern SharedScratchCtx shared_scratch_ctx;
|
||||
extern SharedArenaCtx shared_arena_ctx;
|
||||
|
||||
////////////////////////////////
|
||||
//~ Arena push/pop
|
||||
@ -139,7 +140,7 @@ Inline void ResetArena(Arena *arena)
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ Temp arena
|
||||
//~ Temp arena operations
|
||||
|
||||
Inline TempArena BeginTempArena(Arena *arena)
|
||||
{
|
||||
@ -155,20 +156,24 @@ Inline void EndTempArena(TempArena temp)
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ Scratch
|
||||
//~ Arena ctx from operations
|
||||
|
||||
Inline ScratchCtx *ScratchCtxFromFiberId(i16 fiber_id)
|
||||
Inline ArenaCtx *ArenaCtxFromFiberId(i16 fiber_id)
|
||||
{
|
||||
SharedScratchCtx *shared = &shared_scratch_ctx;
|
||||
ScratchCtx *ctx = &shared->scratch_contexts[fiber_id];
|
||||
if (!ctx->arenas[0]) {
|
||||
for (i32 i = 0; i < (i32)countof(ctx->arenas); ++i) {
|
||||
ctx->arenas[i] = AllocArena(Gibi(64));
|
||||
SharedArenaCtx *shared = &shared_arena_ctx;
|
||||
ArenaCtx *ctx = &shared->arena_contexts[fiber_id];
|
||||
if (!ctx->scratch_arenas[0]) {
|
||||
for (i32 i = 0; i < (i32)countof(ctx->scratch_arenas); ++i) {
|
||||
ctx->scratch_arenas[i] = AllocArena(Gibi(64));
|
||||
}
|
||||
ctx->perm_arena = AllocArena(Gibi(64));
|
||||
}
|
||||
return ctx;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ Scratch helpers
|
||||
|
||||
/* Any parameterized arenas in the caller's scope should be passed into this
|
||||
* function as a potential "conflict". This is to prevent friction in case the
|
||||
* passed arena is itself a scratch arena from another scope (since
|
||||
@ -187,10 +192,10 @@ Inline TempArena _BeginScratch(Arena *potential_conflict)
|
||||
/* Use `BeginScratchNoConflict` if no conflicts are present */
|
||||
Assert(potential_conflict != 0);
|
||||
|
||||
ScratchCtx *ctx = ScratchCtxFromFiberId(FiberId());
|
||||
Arena *scratch_arena = ctx->arenas[0];
|
||||
ArenaCtx *ctx = ArenaCtxFromFiberId(FiberId());
|
||||
Arena *scratch_arena = ctx->scratch_arenas[0];
|
||||
if (potential_conflict && scratch_arena == potential_conflict) {
|
||||
scratch_arena = ctx->arenas[1];
|
||||
scratch_arena = ctx->scratch_arenas[1];
|
||||
}
|
||||
TempArena temp = BeginTempArena(scratch_arena);
|
||||
return temp;
|
||||
@ -210,8 +215,8 @@ Inline TempArena _BeginScratch(Arena *potential_conflict)
|
||||
|
||||
Inline TempArena BeginScratchNoConflict_(void)
|
||||
{
|
||||
ScratchCtx *ctx = ScratchCtxFromFiberId(FiberId());
|
||||
Arena *scratch_arena = ctx->arenas[0];
|
||||
ArenaCtx *ctx = ArenaCtxFromFiberId(FiberId());
|
||||
Arena *scratch_arena = ctx->scratch_arenas[0];
|
||||
TempArena temp = BeginTempArena(scratch_arena);
|
||||
return temp;
|
||||
}
|
||||
@ -220,3 +225,12 @@ Inline void EndScratch(TempArena scratch_temp)
|
||||
{
|
||||
EndTempArena(scratch_temp);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ Perm arena helpers
|
||||
|
||||
Inline Arena *GetPermArena(void)
|
||||
{
|
||||
ArenaCtx *ctx = ArenaCtxFromFiberId(FiberId());
|
||||
return ctx->perm_arena;
|
||||
}
|
||||
|
||||
@ -551,7 +551,7 @@ ForceInline void UnlockTicketMutex(TicketMutex *tm)
|
||||
////////////////////////////////
|
||||
//~ Fibers
|
||||
|
||||
#define MaxFibers 4096
|
||||
#define MaxFibers 1024
|
||||
|
||||
#if !LanguageIsGpu
|
||||
# if PlatformIsWindows
|
||||
@ -564,6 +564,8 @@ ForceInline i16 FiberId(void)
|
||||
#endif
|
||||
return *v;
|
||||
}
|
||||
# else
|
||||
# error FiberId not implemented
|
||||
# endif
|
||||
StaticAssert(MaxFibers < I16Max); /* Fiber id type should fit max fibers */
|
||||
#endif
|
||||
|
||||
@ -3,33 +3,33 @@
|
||||
|
||||
/* Work pools contain their own worker threads with their own thread priority
|
||||
* affinity based on the intended context of the pool. */
|
||||
typedef i32 PoolKind; enum
|
||||
typedef i32 JobPool; enum
|
||||
{
|
||||
PoolKind_Inherit = -1,
|
||||
JobPool_Inherit = -1,
|
||||
|
||||
/* The floating pool contains a large number of lower priority worker
|
||||
* threads that have affinity over the entire CPU. Other pools should push
|
||||
* jobs that only block and do no work here so that they can yield on the
|
||||
* blocking job rather than blocking themselves. */
|
||||
PoolKind_Floating = 0,
|
||||
JobPool_Floating = 0,
|
||||
|
||||
PoolKind_Background = 1,
|
||||
PoolKind_Audio = 2,
|
||||
PoolKind_User = 3,
|
||||
PoolKind_Sim = 4,
|
||||
JobPool_Background = 1,
|
||||
JobPool_Audio = 2,
|
||||
JobPool_User = 3,
|
||||
JobPool_Sim = 4,
|
||||
|
||||
PoolKind_Count
|
||||
JobPool_Count
|
||||
};
|
||||
|
||||
/* Job execution order within a pool is based on priority. */
|
||||
typedef i32 PriorityKind; enum
|
||||
typedef i32 JobPriority; enum
|
||||
{
|
||||
PriorityKind_Inherit = -1,
|
||||
PriorityKind_High = 0,
|
||||
PriorityKind_Normal = 1,
|
||||
PriorityKind_Low = 2,
|
||||
JobPriority_Inherit = -1,
|
||||
JobPriority_High = 0,
|
||||
JobPriority_Normal = 1,
|
||||
JobPriority_Low = 2,
|
||||
|
||||
PriorityKind_Count
|
||||
JobPriority_Count
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
@ -57,27 +57,27 @@ Struct(GenericJobDesc)
|
||||
void *sig;
|
||||
GenericJobFunc *func;
|
||||
i32 count;
|
||||
PoolKind pool;
|
||||
PriorityKind priority;
|
||||
JobPool pool;
|
||||
JobPriority priority;
|
||||
Counter *counter;
|
||||
};
|
||||
|
||||
Struct(JobDescParams)
|
||||
{
|
||||
i32 count;
|
||||
PoolKind pool;
|
||||
PriorityKind priority;
|
||||
JobPool pool;
|
||||
JobPriority priority;
|
||||
Counter *counter;
|
||||
};
|
||||
|
||||
#define JobDecl(job, sigdef) \
|
||||
typedef struct job##_Sig sigdef job##_Sig; \
|
||||
Struct(job##_Desc) { Arena *arena; job##_Sig *sig; GenericJobFunc *func; i32 count; PoolKind pool; PriorityKind priority; Counter *counter; }; \
|
||||
Struct(job##_Desc) { Arena *arena; job##_Sig *sig; GenericJobFunc *func; i32 count; JobPool pool; JobPriority priority; Counter *counter; }; \
|
||||
void job(job##_Sig *, i32); \
|
||||
inline void job##_Generic(void *sig, i32 id) { job((job##_Sig *)sig, id); } \
|
||||
StaticAssert(1)
|
||||
|
||||
#define PushJobDesc(job, ...) (job##_Desc *)PushJobDesc_(sizeof(job##_Sig), alignof(job##_Sig), job##_Generic, (JobDescParams) { .count = 1, .pool = PoolKind_Inherit, .priority = PriorityKind_Inherit, .counter = 0, __VA_ARGS__ })
|
||||
#define PushJobDesc(job, ...) (job##_Desc *)PushJobDesc_(sizeof(job##_Sig), alignof(job##_Sig), job##_Generic, (JobDescParams) { .count = 1, .pool = JobPool_Inherit, .priority = JobPriority_Inherit, .counter = 0, __VA_ARGS__ })
|
||||
GenericJobDesc *PushJobDesc_(u64 sig_size, u64 sig_align, GenericJobFunc *func, JobDescParams params);
|
||||
|
||||
#define JobDef(job, sig_arg, id_arg) void job(job##_Sig *sig_arg, i32 id_arg)
|
||||
|
||||
@ -47,12 +47,12 @@ void StartupBaseJobs(void)
|
||||
g->wait_lists_arena = AllocArena(Gibi(64));
|
||||
|
||||
/* Init job pools */
|
||||
for (PoolKind pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
for (JobPool pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
{
|
||||
W32_JobPool *pool = &g->job_pools[pool_kind];
|
||||
|
||||
/* Init queues */
|
||||
for (PriorityKind priority = 0; priority < (i32)countof(pool->job_queues); ++priority)
|
||||
for (JobPriority priority = 0; priority < (i32)countof(pool->job_queues); ++priority)
|
||||
{
|
||||
W32_JobQueue *queue = &pool->job_queues[priority];
|
||||
queue->arena = AllocArena(Gibi(64));
|
||||
@ -71,7 +71,7 @@ void StartupBaseJobs(void)
|
||||
/* TODO: Heuristic worker counts & affinities */
|
||||
{
|
||||
__profn("Start job workers");
|
||||
for (PoolKind pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
for (JobPool pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
{
|
||||
W32_JobPool *pool = &g->job_pools[pool_kind];
|
||||
String name_fmt = ZI;
|
||||
@ -80,7 +80,7 @@ void StartupBaseJobs(void)
|
||||
{
|
||||
default: Assert(0); break;
|
||||
|
||||
case PoolKind_Sim:
|
||||
case JobPool_Sim:
|
||||
{
|
||||
name_fmt = Lit("Sim worker #%F");
|
||||
pool->num_worker_threads = 4;
|
||||
@ -88,7 +88,7 @@ void StartupBaseJobs(void)
|
||||
pool->thread_priority = THREAD_PRIORITY_TIME_CRITICAL;
|
||||
} break;
|
||||
|
||||
case PoolKind_User:
|
||||
case JobPool_User:
|
||||
{
|
||||
name_fmt = Lit("User worker #%F");
|
||||
pool->num_worker_threads = 4;
|
||||
@ -96,7 +96,7 @@ void StartupBaseJobs(void)
|
||||
pool->thread_priority = THREAD_PRIORITY_TIME_CRITICAL;
|
||||
} break;
|
||||
|
||||
case PoolKind_Audio:
|
||||
case JobPool_Audio:
|
||||
{
|
||||
name_fmt = Lit("Audio worker #%F");
|
||||
pool->num_worker_threads = 2;
|
||||
@ -105,14 +105,14 @@ void StartupBaseJobs(void)
|
||||
pool->thread_is_audio = 1;
|
||||
} break;
|
||||
|
||||
case PoolKind_Background:
|
||||
case JobPool_Background:
|
||||
{
|
||||
name_fmt = Lit("Background worker #%F");
|
||||
pool->num_worker_threads = 2;
|
||||
pool->thread_affinity_mask = 0x0000000000000C00ull;
|
||||
} break;
|
||||
|
||||
case PoolKind_Floating:
|
||||
case JobPool_Floating:
|
||||
{
|
||||
name_fmt = Lit("Floating worker #%F");
|
||||
pool->num_worker_threads = 8;
|
||||
@ -145,7 +145,7 @@ void ShutdownJobs(void)
|
||||
if (!Atomic32Fetch(&g->panicking))
|
||||
{
|
||||
Atomic32FetchSet(&g->shutdown, 1);
|
||||
for (PoolKind pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
for (JobPool pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
{
|
||||
W32_JobPool *pool = &g->job_pools[pool_kind];
|
||||
LockTicketMutex(&pool->workers_wake_tm);
|
||||
@ -161,7 +161,7 @@ void ShutdownJobs(void)
|
||||
/* Wait on worker threads */
|
||||
if (!Atomic32Fetch(&g->panicking))
|
||||
{
|
||||
for (PoolKind pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
for (JobPool pool_kind = 0; pool_kind < (i32)countof(g->job_pools); ++pool_kind)
|
||||
{
|
||||
W32_JobPool *pool = &g->job_pools[pool_kind];
|
||||
for (i32 i = 0; i < pool->num_worker_threads; ++i)
|
||||
@ -520,11 +520,11 @@ void W32_WakeLockedFibers(i32 num_fibers, W32_Fiber **fibers)
|
||||
|
||||
/* Resume jobs */
|
||||
/* TODO: Batch submit waiters based on queue kind rather than one at a time */
|
||||
i32 job_counts_per_pool[PoolKind_Count] = ZI;
|
||||
i32 job_counts_per_pool[JobPool_Count] = ZI;
|
||||
for (i32 i = 0; i < num_fibers; ++i)
|
||||
{
|
||||
W32_Fiber *fiber = fibers[i];
|
||||
PoolKind pool_kind = fiber->job_pool;
|
||||
JobPool pool_kind = fiber->job_pool;
|
||||
++job_counts_per_pool[pool_kind];
|
||||
W32_JobPool *pool = &g->job_pools[pool_kind];
|
||||
W32_JobQueue *queue = &pool->job_queues[fiber->job_priority];
|
||||
@ -563,7 +563,7 @@ void W32_WakeLockedFibers(i32 num_fibers, W32_Fiber **fibers)
|
||||
/* Wake workers */
|
||||
if (num_fibers > 0)
|
||||
{
|
||||
for (PoolKind pool_kind = 0; pool_kind < (i32)countof(job_counts_per_pool); ++pool_kind)
|
||||
for (JobPool pool_kind = 0; pool_kind < (i32)countof(job_counts_per_pool); ++pool_kind)
|
||||
{
|
||||
i32 job_count = job_counts_per_pool[pool_kind];
|
||||
if (job_count > 0)
|
||||
@ -900,7 +900,7 @@ W32_ThreadDef(W32_JobWorkerEntryFunc, worker_ctx_arg)
|
||||
{
|
||||
W32_SharedCtx *g = &W32_shared_ctx;
|
||||
W32_WorkerCtx *ctx = worker_ctx_arg;
|
||||
PoolKind pool_kind = ctx->pool_kind;
|
||||
JobPool pool_kind = ctx->pool_kind;
|
||||
W32_JobPool *pool = &g->job_pools[pool_kind];
|
||||
LAX ctx;
|
||||
|
||||
@ -958,7 +958,7 @@ W32_ThreadDef(W32_JobWorkerEntryFunc, worker_ctx_arg)
|
||||
while (!shutdown)
|
||||
{
|
||||
//- Pull job from queue
|
||||
PriorityKind job_priority = 0;
|
||||
JobPriority job_priority = 0;
|
||||
i16 job_fiber_id = 0;
|
||||
i32 job_id = 0;
|
||||
GenericJobFunc *job_func = 0;
|
||||
@ -966,7 +966,7 @@ W32_ThreadDef(W32_JobWorkerEntryFunc, worker_ctx_arg)
|
||||
Counter *job_counter = 0;
|
||||
{
|
||||
//__profnc("Pull job", Rgb32F(0.75, 0.75, 0));
|
||||
for (PriorityKind priority = 0; priority < (i32)countof(pool->job_queues) && !job_func; ++priority)
|
||||
for (JobPriority priority = 0; priority < (i32)countof(pool->job_queues) && !job_func; ++priority)
|
||||
{
|
||||
W32_JobQueue *queue = &pool->job_queues[priority];
|
||||
if (queue)
|
||||
@ -1422,8 +1422,8 @@ void RunJobEx(GenericJobDesc *desc)
|
||||
struct W32_SharedCtx *g = &W32_shared_ctx;
|
||||
i32 count = desc->count;
|
||||
Counter *counter = desc->counter;
|
||||
PoolKind pool_kind = desc->pool;
|
||||
PriorityKind priority = desc->priority;
|
||||
JobPool pool_kind = desc->pool;
|
||||
JobPriority priority = desc->priority;
|
||||
GenericJobFunc *func = desc->func;
|
||||
void *sig = desc->sig;
|
||||
if (count > 0)
|
||||
@ -1433,8 +1433,8 @@ void RunJobEx(GenericJobDesc *desc)
|
||||
AddCounter(counter, count);
|
||||
}
|
||||
W32_Fiber *fiber = W32_FiberFromId(FiberId());
|
||||
priority = ClampI32(priority, fiber->job_priority, PriorityKind_Count - 1); /* A job cannot create a job with a higher priority than itself */
|
||||
if (pool_kind == PoolKind_Inherit)
|
||||
priority = ClampI32(priority, fiber->job_priority, JobPriority_Count - 1); /* A job cannot create a job with a higher priority than itself */
|
||||
if (pool_kind == JobPool_Inherit)
|
||||
{
|
||||
pool_kind = fiber->job_pool;
|
||||
}
|
||||
|
||||
@ -146,7 +146,7 @@ StaticAssert(offsetof(W32_Fiber, wake_lock) % 4 == 0); /* Atomic must be aligne
|
||||
//- Worker ctx
|
||||
AlignedStruct(W32_WorkerCtx, 64)
|
||||
{
|
||||
PoolKind pool_kind;
|
||||
JobPool pool_kind;
|
||||
i32 id;
|
||||
};
|
||||
|
||||
@ -181,7 +181,7 @@ AlignedStruct(W32_JobQueue, 64)
|
||||
AlignedStruct(W32_JobPool, 64)
|
||||
{
|
||||
/* Jobs */
|
||||
W32_JobQueue job_queues[PriorityKind_Count];
|
||||
W32_JobQueue job_queues[JobPriority_Count];
|
||||
|
||||
TicketMutex free_fibers_tm;
|
||||
i16 first_free_fiber_id;
|
||||
@ -246,7 +246,7 @@ Struct(W32_SharedCtx)
|
||||
W32_WaitBin wait_time_bins[W32_NumWaitTimeBins];
|
||||
|
||||
//- Job pools
|
||||
W32_JobPool job_pools[PoolKind_Count];
|
||||
W32_JobPool job_pools[JobPool_Count];
|
||||
};
|
||||
|
||||
extern W32_SharedCtx W32_shared_ctx;
|
||||
|
||||
@ -113,7 +113,7 @@ AC_Asset *F_LoadAsset(String path, f32 point_size, b32 wait)
|
||||
if (is_first_touch)
|
||||
{
|
||||
AC_MarkLoading(asset);
|
||||
F_LoadJob_Desc *desc = PushJobDesc(F_LoadJob, .pool = PoolKind_Background, .priority = PriorityKind_Low);
|
||||
F_LoadJob_Desc *desc = PushJobDesc(F_LoadJob, .pool = JobPool_Background, .priority = JobPriority_Low);
|
||||
desc->sig->asset = asset;
|
||||
desc->sig->path = PushString(desc->arena, path);
|
||||
desc->sig->point_size = point_size;
|
||||
|
||||
@ -71,7 +71,7 @@ void GPU_StartupCore(void)
|
||||
P_OnExit(GPU_D12_Shutdown);
|
||||
|
||||
/* Start evictor job */
|
||||
RunJob(1, GPU_D12_EvictorJob, PoolKind_Background, PriorityKind_Low, &g->evictor_job_counter, 0);
|
||||
RunJob(1, GPU_D12_EvictorJob, JobPool_Background, JobPriority_Low, &g->evictor_job_counter, 0);
|
||||
}
|
||||
|
||||
P_ExitFuncDef(GPU_D12_Shutdown)
|
||||
@ -324,7 +324,7 @@ void GPU_D12_InitObjects(void)
|
||||
};
|
||||
{
|
||||
Counter counter = ZI;
|
||||
RunJob(DX12_NUM_QUEUES, GPU_D12_AllocCommandQueueJob, PoolKind_Inherit, PriorityKind_Low, &counter, .descs_in = params, .cqs_out = g->command_queues);
|
||||
RunJob(DX12_NUM_QUEUES, GPU_D12_AllocCommandQueueJob, JobPool_Inherit, JobPriority_Low, &counter, .descs_in = params, .cqs_out = g->command_queues);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
#if ProfilingIsEnabled
|
||||
@ -416,7 +416,7 @@ void GPU_InitPipelines(void)
|
||||
{
|
||||
__profn("Allocate pipelines");
|
||||
Counter counter = ZI;
|
||||
RunJob(num_pipelines, GPU_D12_AllocPipelineJob, PoolKind_Inherit, PriorityKind_Inherit, &counter, .descs_in = descs, .pipelines_out = pipelines);
|
||||
RunJob(num_pipelines, GPU_D12_AllocPipelineJob, JobPool_Inherit, JobPriority_Inherit, &counter, .descs_in = descs, .pipelines_out = pipelines);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
for (u32 i = 0; i < num_pipelines; ++i)
|
||||
@ -496,7 +496,7 @@ void GPU_D12_InitNoise(void)
|
||||
/* Upload texture */
|
||||
{
|
||||
Counter counter = ZI;
|
||||
RunJob(1, GPU_D12_UploadJob, PoolKind_Inherit, PriorityKind_Low, &counter, .resource = r, .data = data.text);
|
||||
RunJob(1, GPU_D12_UploadJob, JobPool_Inherit, JobPriority_Low, &counter, .resource = r, .data = data.text);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
}
|
||||
@ -1169,7 +1169,7 @@ W_CallbackFuncDef(GPU_D12_WatchPipelineCallback, name)
|
||||
GPU_D12_Pipeline **pipelines = PushStructs(scratch.arena, GPU_D12_Pipeline *, num_pipelines);
|
||||
{
|
||||
Counter counter = ZI;
|
||||
RunJob(num_pipelines, GPU_D12_AllocPipelineJob, PoolKind_Inherit, PriorityKind_Low, &counter, .descs_in = pipeline_descs, .pipelines_out = pipelines);
|
||||
RunJob(num_pipelines, GPU_D12_AllocPipelineJob, JobPool_Inherit, JobPriority_Low, &counter, .descs_in = pipeline_descs, .pipelines_out = pipelines);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
{
|
||||
@ -2086,7 +2086,7 @@ GPU_Resource *GPU_AllocTexture(GPU_TextureFormat format, u32 flags, Vec2I32 size
|
||||
{
|
||||
/* TODO: Make wait optional */
|
||||
Counter counter = ZI;
|
||||
RunJob(1, GPU_D12_UploadJob, PoolKind_Inherit, PriorityKind_Inherit, &counter, .resource = r, .data = initial_data);
|
||||
RunJob(1, GPU_D12_UploadJob, JobPool_Inherit, JobPriority_Inherit, &counter, .resource = r, .data = initial_data);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
|
||||
@ -2199,7 +2199,7 @@ JobDef(GPU_D12_UploadJob, sig, UNUSED id)
|
||||
if (ID3D12Fence_GetCompletedValue(cq->submit_fence) < fence_target)
|
||||
{
|
||||
Counter counter = ZI;
|
||||
RunJob(1, GPU_D12_WaitOnFenceJob, PoolKind_Floating, PriorityKind_Inherit, &counter, .fence = cq->submit_fence, .target = fence_target);
|
||||
RunJob(1, GPU_D12_WaitOnFenceJob, JobPool_Floating, JobPriority_Inherit, &counter, .fence = cq->submit_fence, .target = fence_target);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
|
||||
@ -3354,7 +3354,7 @@ JobDef(GPU_D12_EvictorJob, UNUSED sig, UNUSED id)
|
||||
__profn("Wait on fence");
|
||||
{
|
||||
Counter counter = ZI;
|
||||
RunJob(1, GPU_D12_WaitOnFenceJob, PoolKind_Floating, PriorityKind_Inherit, &counter, .fence = cq->submit_fence, .target = targets[i]);
|
||||
RunJob(1, GPU_D12_WaitOnFenceJob, JobPool_Floating, JobPriority_Inherit, &counter, .fence = cq->submit_fence, .target = targets[i]);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,5 +12,5 @@ void P_Main(void)
|
||||
RunOnce();
|
||||
P_StartupDeps();
|
||||
/* FIXME: Logfile path */
|
||||
P_StartupLog(Lit("log.txt"));
|
||||
P_StartupLog(Lit("log.log"));
|
||||
}
|
||||
|
||||
@ -2230,7 +2230,7 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
|
||||
/* Run app start job */
|
||||
if (!Atomic32Fetch(&g->panicking))
|
||||
{
|
||||
RunJob(1, P_W32_AppStartupJob, 0, PoolKind_Floating, PriorityKind_High, 0);
|
||||
RunJob(1, P_W32_AppStartupJob, 0, JobPool_Floating, JobPriority_High, 0);
|
||||
}
|
||||
|
||||
/* Wait for startup end or panic */
|
||||
@ -2258,7 +2258,7 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
|
||||
/* Run exit callbacks job */
|
||||
if (!Atomic32Fetch(&g->panicking))
|
||||
{
|
||||
RunJob(1, P_W32_AppShutdownJob, 0, PoolKind_Floating, PriorityKind_High, 0);
|
||||
RunJob(1, P_W32_AppShutdownJob, 0, JobPool_Floating, JobPriority_High, 0);
|
||||
}
|
||||
|
||||
/* Wait for exit end or panic */
|
||||
|
||||
@ -15,7 +15,7 @@ void PB_StartupCore(void)
|
||||
PB_WSP_SharedState *g = &PB_WSP_shared_state;
|
||||
PB_WSP_InitializeWasapi();
|
||||
/* Start playback job */
|
||||
RunJob(1, PB_WSP_PlaybackJob, 0, PoolKind_Audio, PriorityKind_High, &g->PB_WSP_PlaybackJob_counter);
|
||||
RunJob(1, PB_WSP_PlaybackJob, 0, JobPool_Audio, JobPriority_High, &g->PB_WSP_PlaybackJob_counter);
|
||||
P_OnExit(&PB_WSP_Shutdown);
|
||||
}
|
||||
|
||||
|
||||
@ -44,8 +44,8 @@ void StartupUser(void)
|
||||
P_ShowWindow(g->window);
|
||||
|
||||
/* Start jobs */
|
||||
RunJob(1, UpdateUserJob, 0, PoolKind_User, PriorityKind_High, &g->shutdown_job_counters);
|
||||
RunJob(1, SimJob, 0, PoolKind_Sim, PriorityKind_High, &g->shutdown_job_counters);
|
||||
RunJob(1, UpdateUserJob, 0, JobPool_User, JobPriority_High, &g->shutdown_job_counters);
|
||||
RunJob(1, SimJob, 0, JobPool_Sim, JobPriority_High, &g->shutdown_job_counters);
|
||||
P_OnExit(&ShutdownUser);
|
||||
}
|
||||
|
||||
|
||||
@ -101,7 +101,7 @@ AC_Asset *SND_LoadAsset(String path, SND_SoundFlag flags, b32 wait)
|
||||
if (is_first_touch)
|
||||
{
|
||||
AC_MarkLoading(asset);
|
||||
SND_LoadJob_Desc *desc = PushJobDesc(SND_LoadJob, .pool = PoolKind_Background, .priority = PriorityKind_Low, .counter = &asset->counter);
|
||||
SND_LoadJob_Desc *desc = PushJobDesc(SND_LoadJob, .pool = JobPool_Background, .priority = JobPriority_Low, .counter = &asset->counter);
|
||||
desc->sig->path = PushString(desc->arena, path);
|
||||
desc->sig->asset = asset;
|
||||
desc->sig->flags = flags;
|
||||
|
||||
@ -42,7 +42,7 @@ void S_StartupCore(void)
|
||||
|
||||
g->scopes_arena = AllocArena(Gibi(64));
|
||||
|
||||
RunJob(1, S_EvictorJob, PoolKind_Background, PriorityKind_Low, &g->shutdown_counter, 0);
|
||||
RunJob(1, S_EvictorJob, JobPool_Background, JobPriority_Low, &g->shutdown_counter, 0);
|
||||
|
||||
P_OnExit(&S_Shutdown);
|
||||
#if RESOURCE_RELOADING
|
||||
@ -440,7 +440,7 @@ JobDef(S_LoadSpriteJob, sig, UNUSED id)
|
||||
|
||||
void S_PushLoadJob(S_CacheEntryRef ref, S_Tag tag)
|
||||
{
|
||||
S_LoadSpriteJob_Desc *desc = PushJobDesc(S_LoadSpriteJob, .pool = PoolKind_Background, .priority = PriorityKind_Inherit);
|
||||
S_LoadSpriteJob_Desc *desc = PushJobDesc(S_LoadSpriteJob, .pool = JobPool_Background, .priority = JobPriority_Inherit);
|
||||
desc->sig->scope = S_BeginScope(); /* Scope ended by job */
|
||||
desc->sig->ref = S_EnsureRefFromRef(desc->sig->scope, ref)->ref;
|
||||
desc->sig->tag = tag;
|
||||
|
||||
@ -10,8 +10,8 @@ void W_StartupCore(void)
|
||||
|
||||
g->watch_events_arena = AllocArena(Gibi(64));
|
||||
|
||||
RunJob(1, W_MonitorJob, PoolKind_Floating, PriorityKind_Low, &g->watch_jobs_counter, 0);
|
||||
RunJob(1, W_DispatcherJob, PoolKind_Background, PriorityKind_Low, &g->watch_jobs_counter, 0);
|
||||
RunJob(1, W_MonitorJob, JobPool_Floating, JobPriority_Low, &g->watch_jobs_counter, 0);
|
||||
RunJob(1, W_DispatcherJob, JobPool_Floating, JobPriority_Low, &g->watch_jobs_counter, 0);
|
||||
P_OnExit(&W_Shutdown);
|
||||
}
|
||||
|
||||
@ -197,7 +197,7 @@ JobDef(W_DispatcherJob, UNUSED sig, UNUSED job_id)
|
||||
if (!skip)
|
||||
{
|
||||
Counter counter = ZI;
|
||||
RunJob(num_callbacks, W_RunCallbacksJob, PoolKind_Background, PriorityKind_Low, &counter, .name = e->name, .callbacks = callbacks);
|
||||
RunJob(num_callbacks, W_RunCallbacksJob, JobPool_Background, JobPriority_Low, &counter, .name = e->name, .callbacks = callbacks);
|
||||
WaitOnCounter(&counter);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user