| 252 | } |
| 253 | |
| 254 | HJob JobSystemCreateJob(HJobContext context, Job* job) |
| 255 | { |
| 256 | JobThreadContext* ctx = &context->m_ThreadContext; |
| 257 | |
| 258 | uint32_t index; |
| 259 | uint64_t generation; |
| 260 | JobItem* item; |
| 261 | { |
| 262 | DM_MUTEX_OPTIONAL_SCOPED_LOCK(ctx->m_Mutex); |
| 263 | |
| 264 | if (ctx->m_Items.Full()) |
| 265 | ctx->m_Items.OffsetCapacity(64); |
| 266 | |
| 267 | index = ctx->m_Items.Alloc(); |
| 268 | generation = ctx->m_Generation++; |
| 269 | item = &ctx->m_Items.Get(index); |
| 270 | } |
| 271 | |
| 272 | memset(item, 0, sizeof(JobItem)); |
| 273 | |
| 274 | item->m_TimeCreated = dmTime::GetMonotonicTime(); |
| 275 | item->m_Job = *job; |
| 276 | item->m_Generation = generation; |
| 277 | item->m_Status = JOBSYSTEM_STATUS_CREATED; |
| 278 | item->m_Parent = INVALID_JOB; |
| 279 | item->m_Sibling = INVALID_JOB; |
| 280 | item->m_FirstChild = INVALID_JOB; |
| 281 | item->m_LastChild = INVALID_JOB; |
| 282 | |
| 283 | HJob hjob = MakeHandle(generation, index); |
| 284 | return hjob; |
| 285 | } |
| 286 | |
| 287 | JobSystemResult JobSystemPushJob(HJobContext context, HJob hjob) |
| 288 | { |