MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / schedule_ecs_job

Method schedule_ecs_job

modules/engine/runtime/src/ecs/scheduler.cpp:291–533  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

289} // namespace sugoi
290
291skr::task::event_t sugoi::scheduler_t::schedule_ecs_job(sugoi_query_t* query, EIndex batchSize, sugoi_system_callback_t callback, void* u,
292sugoi_system_lifetime_callback_t init, sugoi_system_lifetime_callback_t teardown, sugoi_resource_operation_t* resources)
293{
294 query->storage->build_queries();
295 skr::task::event_t result;
296 SkrZoneScopedN("SchedualECSJob");
297
298 SKR_ASSERT(is_main_thread(query->storage));
299 SKR_ASSERT(query->parameters.length < 32);
300 llvm_vecsmall::SmallVector<sugoi_group_t*, 64> groups;
301 auto add_group = [&](sugoi_group_t* group) {
302 groups.push_back(group);
303 };
304 auto& params = query->parameters;
305 query->storage->query_groups(query->filter, query->meta, SUGOI_LAMBDA(add_group));
306 struct task_t {
307 uint32_t groupIndex;
308 uint32_t startIndex;
309 sugoi_chunk_view_t view;
310 };
311 struct SharedData
312 {
313 sugoi_query_t* query;
314 sugoi_group_t** groups;
315 uint32_t groupCount;
316 std::bitset<32>* readonly;
317 sugoi_type_index_t* localTypes;
318 std::bitset<32>* atomic;
319 std::bitset<32>* randomAccess;
320 bool hasRandomWrite;
321 bool hasWriteChunkComponent;
322 EIndex entityCount;
323 sugoi_system_callback_t callback;
324 void* userdata;
325 skr::stl_vector<task_t> tasks;
326 };
327 SharedData* job = nullptr;
328 skr::SPtr<SharedData> sharedData;
329
330 auto groupCount = (uint32_t)groups.size();
331 {
332 SkrZoneScopedN("AllocateSharedData");
333 struct_arena_t<SharedData> arena;
334 arena.record(&SharedData::groups, groupCount);
335 arena.record(&SharedData::localTypes, groupCount * params.length);
336 arena.record(&SharedData::readonly, groupCount);
337 arena.record(&SharedData::atomic, groupCount);
338 arena.record(&SharedData::randomAccess, groupCount);
339 job = arena.end();
340 job->groups = arena.get(&SharedData::groups, groupCount);
341 job->localTypes = arena.get(&SharedData::localTypes, groupCount * params.length);
342 job->readonly = arena.get(&SharedData::readonly, groupCount);
343 job->atomic = arena.get(&SharedData::atomic, groupCount);
344 job->randomAccess = arena.get(&SharedData::randomAccess, groupCount);
345 }
346 job->groupCount = groupCount;
347 job->hasRandomWrite = !query->subqueries.empty();
348 job->hasWriteChunkComponent = false;

Callers 1

sugoiJ_schedule_ecsFunction · 0.80

Calls 15

SkrDeleteFunction · 0.85
memcpyFunction · 0.85
type_index_tClass · 0.85
data_sizeFunction · 0.85
build_queriesMethod · 0.80
query_groupsMethod · 0.80
is_chunkMethod · 0.80
cloneFunction · 0.70
scheduleFunction · 0.50
moveFunction · 0.50
initFunction · 0.50
minFunction · 0.50

Tested by

no test coverage detected