TaskScheduler: Minor Preparations for TBB
Tasks: move priority from task to task pool {rBf7c18df4f599fe39ffc914e645e504fcdbee8636} Tasks: split task.c into task_pool.cc and task_iterator.c {rB4ada1d267749931ca934a74b14a82479bcaa92e0} Differential Revision: https://developer.blender.org/D7385
This commit is contained in:
parent
862ec82942
commit
78f56d5582
Notes:
blender-bot
2023-02-14 10:29:32 +01:00
Referenced by issue #70709, Switch Blender task scheduler to use TBB
|
@ -364,7 +364,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
|
|||
if (em->tottri != 0) {
|
||||
TaskScheduler *scheduler = BLI_task_scheduler_get();
|
||||
TaskPool *task_pool;
|
||||
task_pool = BLI_task_pool_create(scheduler, NULL);
|
||||
task_pool = BLI_task_pool_create(scheduler, NULL, TASK_PRIORITY_LOW);
|
||||
|
||||
tangent_mask_curr = 0;
|
||||
/* Calculate tangent layers */
|
||||
|
@ -417,8 +417,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
|
|||
mesh2tangent->looptris = (const BMLoop *(*)[3])em->looptris;
|
||||
mesh2tangent->tangent = loopdata_out->layers[index].data;
|
||||
|
||||
BLI_task_pool_push(
|
||||
task_pool, emDM_calc_loop_tangents_thread, mesh2tangent, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, emDM_calc_loop_tangents_thread, mesh2tangent, false, NULL);
|
||||
}
|
||||
|
||||
BLI_assert(tangent_mask_curr == tangent_mask);
|
||||
|
|
|
@ -1555,7 +1555,7 @@ static void loop_split_generator(TaskPool *pool, LoopSplitTaskDataCommon *common
|
|||
if (pool) {
|
||||
data_idx++;
|
||||
if (data_idx == LOOP_SPLIT_TASK_BLOCK_SIZE) {
|
||||
BLI_task_pool_push(pool, loop_split_worker, data_buff, true, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(pool, loop_split_worker, data_buff, true, NULL);
|
||||
data_idx = 0;
|
||||
}
|
||||
}
|
||||
|
@ -1572,7 +1572,7 @@ static void loop_split_generator(TaskPool *pool, LoopSplitTaskDataCommon *common
|
|||
/* Last block of data... Since it is calloc'ed and we use first NULL item as stopper,
|
||||
* everything is fine. */
|
||||
if (pool && data_idx) {
|
||||
BLI_task_pool_push(pool, loop_split_worker, data_buff, true, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(pool, loop_split_worker, data_buff, true, NULL);
|
||||
}
|
||||
|
||||
if (edge_vectors) {
|
||||
|
@ -1708,7 +1708,7 @@ void BKE_mesh_normals_loop_split(const MVert *mverts,
|
|||
TaskPool *task_pool;
|
||||
|
||||
task_scheduler = BLI_task_scheduler_get();
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &common_data);
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &common_data, TASK_PRIORITY_HIGH);
|
||||
|
||||
loop_split_generator(task_pool, &common_data);
|
||||
|
||||
|
|
|
@ -660,7 +660,7 @@ void BKE_mesh_calc_loop_tangent_ex(const MVert *mvert,
|
|||
if (looptri_len != 0) {
|
||||
TaskScheduler *scheduler = BLI_task_scheduler_get();
|
||||
TaskPool *task_pool;
|
||||
task_pool = BLI_task_pool_create(scheduler, NULL);
|
||||
task_pool = BLI_task_pool_create(scheduler, NULL, TASK_PRIORITY_LOW);
|
||||
|
||||
tangent_mask_curr = 0;
|
||||
/* Calculate tangent layers */
|
||||
|
@ -707,8 +707,7 @@ void BKE_mesh_calc_loop_tangent_ex(const MVert *mvert,
|
|||
}
|
||||
|
||||
mesh2tangent->tangent = loopdata_out->layers[index].data;
|
||||
BLI_task_pool_push(
|
||||
task_pool, DM_calc_loop_tangents_thread, mesh2tangent, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, DM_calc_loop_tangents_thread, mesh2tangent, false, NULL);
|
||||
}
|
||||
|
||||
BLI_assert(tangent_mask_curr == tangent_mask);
|
||||
|
|
|
@ -680,7 +680,7 @@ void BKE_ocean_simulate(struct Ocean *o, float t, float scale, float chop_amount
|
|||
osd.scale = scale;
|
||||
osd.chop_amount = chop_amount;
|
||||
|
||||
pool = BLI_task_pool_create(scheduler, &osd);
|
||||
pool = BLI_task_pool_create(scheduler, &osd, TASK_PRIORITY_HIGH);
|
||||
|
||||
BLI_rw_mutex_lock(&o->oceanmutex, THREAD_LOCK_WRITE);
|
||||
|
||||
|
@ -698,23 +698,23 @@ void BKE_ocean_simulate(struct Ocean *o, float t, float scale, float chop_amount
|
|||
BLI_task_parallel_range(0, o->_M, &osd, ocean_compute_htilda, &settings);
|
||||
|
||||
if (o->_do_disp_y) {
|
||||
BLI_task_pool_push(pool, ocean_compute_displacement_y, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_displacement_y, NULL, false, NULL);
|
||||
}
|
||||
|
||||
if (o->_do_chop) {
|
||||
BLI_task_pool_push(pool, ocean_compute_displacement_x, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_displacement_z, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_displacement_x, NULL, false, NULL);
|
||||
BLI_task_pool_push(pool, ocean_compute_displacement_z, NULL, false, NULL);
|
||||
}
|
||||
|
||||
if (o->_do_jacobian) {
|
||||
BLI_task_pool_push(pool, ocean_compute_jacobian_jxx, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_jacobian_jzz, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_jacobian_jxz, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_jacobian_jxx, NULL, false, NULL);
|
||||
BLI_task_pool_push(pool, ocean_compute_jacobian_jzz, NULL, false, NULL);
|
||||
BLI_task_pool_push(pool, ocean_compute_jacobian_jxz, NULL, false, NULL);
|
||||
}
|
||||
|
||||
if (o->_do_normals) {
|
||||
BLI_task_pool_push(pool, ocean_compute_normal_x, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_normal_z, NULL, false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, ocean_compute_normal_x, NULL, false, NULL);
|
||||
BLI_task_pool_push(pool, ocean_compute_normal_z, NULL, false, NULL);
|
||||
o->_N_y = 1.0f / scale;
|
||||
}
|
||||
|
||||
|
|
|
@ -2827,7 +2827,7 @@ void psys_cache_child_paths(ParticleSimulationData *sim,
|
|||
}
|
||||
|
||||
task_scheduler = BLI_task_scheduler_get();
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &ctx);
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &ctx, TASK_PRIORITY_LOW);
|
||||
totchild = ctx.totchild;
|
||||
totparent = ctx.totparent;
|
||||
|
||||
|
@ -2850,7 +2850,7 @@ void psys_cache_child_paths(ParticleSimulationData *sim,
|
|||
ParticleTask *task = &tasks_parent[i];
|
||||
|
||||
psys_task_init_path(task, sim);
|
||||
BLI_task_pool_push(task_pool, exec_child_path_cache, task, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, exec_child_path_cache, task, false, NULL);
|
||||
}
|
||||
BLI_task_pool_work_and_wait(task_pool);
|
||||
|
||||
|
@ -2861,7 +2861,7 @@ void psys_cache_child_paths(ParticleSimulationData *sim,
|
|||
ParticleTask *task = &tasks_child[i];
|
||||
|
||||
psys_task_init_path(task, sim);
|
||||
BLI_task_pool_push(task_pool, exec_child_path_cache, task, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, exec_child_path_cache, task, false, NULL);
|
||||
}
|
||||
BLI_task_pool_work_and_wait(task_pool);
|
||||
|
||||
|
|
|
@ -1337,7 +1337,7 @@ static void distribute_particles_on_dm(ParticleSimulationData *sim, int from)
|
|||
}
|
||||
|
||||
task_scheduler = BLI_task_scheduler_get();
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &ctx);
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &ctx, TASK_PRIORITY_LOW);
|
||||
|
||||
totpart = (from == PART_FROM_CHILD ? sim->psys->totchild : sim->psys->totpart);
|
||||
psys_tasks_create(&ctx, 0, totpart, &tasks, &numtasks);
|
||||
|
@ -1346,10 +1346,10 @@ static void distribute_particles_on_dm(ParticleSimulationData *sim, int from)
|
|||
|
||||
psys_task_init_distribute(task, sim);
|
||||
if (from == PART_FROM_CHILD) {
|
||||
BLI_task_pool_push(task_pool, exec_distribute_child, task, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, exec_distribute_child, task, false, NULL);
|
||||
}
|
||||
else {
|
||||
BLI_task_pool_push(task_pool, exec_distribute_parent, task, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, exec_distribute_parent, task, false, NULL);
|
||||
}
|
||||
}
|
||||
BLI_task_pool_work_and_wait(task_pool);
|
||||
|
|
|
@ -73,27 +73,25 @@ typedef struct TaskPool TaskPool;
|
|||
typedef void (*TaskRunFunction)(TaskPool *__restrict pool, void *taskdata, int threadid);
|
||||
typedef void (*TaskFreeFunction)(TaskPool *__restrict pool, void *taskdata, int threadid);
|
||||
|
||||
TaskPool *BLI_task_pool_create(TaskScheduler *scheduler, void *userdata);
|
||||
TaskPool *BLI_task_pool_create_background(TaskScheduler *scheduler, void *userdata);
|
||||
TaskPool *BLI_task_pool_create_suspended(TaskScheduler *scheduler, void *userdata);
|
||||
TaskPool *BLI_task_pool_create(TaskScheduler *scheduler, void *userdata, TaskPriority priority);
|
||||
TaskPool *BLI_task_pool_create_background(TaskScheduler *scheduler,
|
||||
void *userdata,
|
||||
TaskPriority priority);
|
||||
TaskPool *BLI_task_pool_create_suspended(TaskScheduler *scheduler,
|
||||
void *userdata,
|
||||
TaskPriority priority);
|
||||
void BLI_task_pool_free(TaskPool *pool);
|
||||
|
||||
void BLI_task_pool_push_ex(TaskPool *pool,
|
||||
TaskRunFunction run,
|
||||
void *taskdata,
|
||||
bool free_taskdata,
|
||||
TaskFreeFunction freedata,
|
||||
TaskPriority priority);
|
||||
void BLI_task_pool_push(TaskPool *pool,
|
||||
TaskRunFunction run,
|
||||
void *taskdata,
|
||||
bool free_taskdata,
|
||||
TaskPriority priority);
|
||||
TaskFreeFunction freedata);
|
||||
void BLI_task_pool_push_from_thread(TaskPool *pool,
|
||||
TaskRunFunction run,
|
||||
void *taskdata,
|
||||
bool free_taskdata,
|
||||
TaskPriority priority,
|
||||
TaskFreeFunction freedata,
|
||||
int thread_id);
|
||||
|
||||
/* work and wait until all tasks are done */
|
||||
|
@ -112,6 +110,9 @@ void *BLI_task_pool_userdata(TaskPool *pool);
|
|||
/* optional mutex to use from run function */
|
||||
ThreadMutex *BLI_task_pool_user_mutex(TaskPool *pool);
|
||||
|
||||
/* Thread ID of thread that created the task pool. */
|
||||
int BLI_task_pool_creator_thread_id(TaskPool *pool);
|
||||
|
||||
/* Delayed push, use that to reduce thread overhead by accumulating
|
||||
* all new tasks into local queue first and pushing it to scheduler
|
||||
* from within a single mutex lock.
|
||||
|
|
|
@ -118,7 +118,8 @@ set(SRC
|
|||
intern/string_utf8.c
|
||||
intern/string_utils.c
|
||||
intern/system.c
|
||||
intern/task.c
|
||||
intern/task_pool.cc
|
||||
intern/task_iterator.c
|
||||
intern/threads.c
|
||||
intern/time.c
|
||||
intern/timecode.c
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -72,8 +72,7 @@ void schedule_children(DepsgraphEvalState *state,
|
|||
|
||||
void schedule_node_to_pool(OperationNode *node, const int thread_id, TaskPool *pool)
|
||||
{
|
||||
BLI_task_pool_push_from_thread(
|
||||
pool, deg_task_run_func, node, false, TASK_PRIORITY_HIGH, thread_id);
|
||||
BLI_task_pool_push_from_thread(pool, deg_task_run_func, node, false, NULL, thread_id);
|
||||
}
|
||||
|
||||
/* Denotes which part of dependency graph is being evaluated. */
|
||||
|
@ -389,7 +388,7 @@ void deg_evaluate_on_refresh(Depsgraph *graph)
|
|||
task_scheduler = BLI_task_scheduler_get();
|
||||
need_free_scheduler = false;
|
||||
}
|
||||
TaskPool *task_pool = BLI_task_pool_create_suspended(task_scheduler, &state);
|
||||
TaskPool *task_pool = BLI_task_pool_create_suspended(task_scheduler, &state, TASK_PRIORITY_HIGH);
|
||||
/* Prepare all nodes for evaluation. */
|
||||
initialize_execution(&state, graph);
|
||||
|
||||
|
|
|
@ -4524,7 +4524,7 @@ static void extract_range_task_create(
|
|||
taskdata->iter_type = type;
|
||||
taskdata->start = start;
|
||||
taskdata->end = start + length;
|
||||
BLI_task_pool_push(task_pool, extract_run, taskdata, true, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(task_pool, extract_run, taskdata, true, NULL);
|
||||
}
|
||||
|
||||
static void extract_task_create(TaskPool *task_pool,
|
||||
|
@ -4583,7 +4583,7 @@ static void extract_task_create(TaskPool *task_pool,
|
|||
else if (use_thread) {
|
||||
/* One task for the whole VBO. */
|
||||
(*task_counter)++;
|
||||
BLI_task_pool_push(task_pool, extract_run, taskdata, true, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(task_pool, extract_run, taskdata, true, NULL);
|
||||
}
|
||||
else {
|
||||
/* Single threaded extraction. */
|
||||
|
@ -4682,7 +4682,7 @@ void mesh_buffer_cache_create_requested(MeshBatchCache *cache,
|
|||
TaskPool *task_pool;
|
||||
|
||||
task_scheduler = BLI_task_scheduler_get();
|
||||
task_pool = BLI_task_pool_create_suspended(task_scheduler, NULL);
|
||||
task_pool = BLI_task_pool_create_suspended(task_scheduler, NULL, TASK_PRIORITY_HIGH);
|
||||
|
||||
size_t counters_size = (sizeof(mbc) / sizeof(void *)) * sizeof(int32_t);
|
||||
int32_t *task_counters = MEM_callocN(counters_size, __func__);
|
||||
|
|
|
@ -542,15 +542,15 @@ static void *undomesh_from_editmesh(UndoMesh *um, BMEditMesh *em, Key *key)
|
|||
# ifdef USE_ARRAY_STORE_THREAD
|
||||
if (um_arraystore.task_pool == NULL) {
|
||||
TaskScheduler *scheduler = BLI_task_scheduler_get();
|
||||
um_arraystore.task_pool = BLI_task_pool_create_background(scheduler, NULL);
|
||||
um_arraystore.task_pool = BLI_task_pool_create_background(
|
||||
scheduler, NULL, TASK_PRIORITY_LOW);
|
||||
}
|
||||
|
||||
struct UMArrayData *um_data = MEM_mallocN(sizeof(*um_data), __func__);
|
||||
um_data->um = um;
|
||||
um_data->um_ref = um_ref;
|
||||
|
||||
BLI_task_pool_push(
|
||||
um_arraystore.task_pool, um_arraystore_compact_cb, um_data, true, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(um_arraystore.task_pool, um_arraystore_compact_cb, um_data, true, NULL);
|
||||
# else
|
||||
um_arraystore_compact_with_info(um, um_ref);
|
||||
# endif
|
||||
|
|
|
@ -859,11 +859,12 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
|
|||
if (BKE_imtype_is_movie(scene->r.im_format.imtype)) {
|
||||
task_scheduler = BLI_task_scheduler_create(1);
|
||||
oglrender->task_scheduler = task_scheduler;
|
||||
oglrender->task_pool = BLI_task_pool_create_background(task_scheduler, oglrender);
|
||||
oglrender->task_pool = BLI_task_pool_create_background(
|
||||
task_scheduler, oglrender, TASK_PRIORITY_LOW);
|
||||
}
|
||||
else {
|
||||
oglrender->task_scheduler = NULL;
|
||||
oglrender->task_pool = BLI_task_pool_create(task_scheduler, oglrender);
|
||||
oglrender->task_pool = BLI_task_pool_create(task_scheduler, oglrender, TASK_PRIORITY_LOW);
|
||||
}
|
||||
oglrender->pool_ok = true;
|
||||
BLI_spin_init(&oglrender->reports_lock);
|
||||
|
@ -1123,7 +1124,7 @@ static bool schedule_write_result(OGLRender *oglrender, RenderResult *rr)
|
|||
BLI_condition_wait(&oglrender->task_condition, &oglrender->task_mutex);
|
||||
}
|
||||
BLI_mutex_unlock(&oglrender->task_mutex);
|
||||
BLI_task_pool_push(oglrender->task_pool, write_result_func, task_data, true, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(oglrender->task_pool, write_result_func, task_data, true, NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -5617,7 +5617,7 @@ static bool project_paint_op(void *state, const float lastpos[2], const float po
|
|||
|
||||
if (ps->thread_tot > 1) {
|
||||
scheduler = BLI_task_scheduler_get();
|
||||
task_pool = BLI_task_pool_create_suspended(scheduler, NULL);
|
||||
task_pool = BLI_task_pool_create_suspended(scheduler, NULL, TASK_PRIORITY_HIGH);
|
||||
}
|
||||
|
||||
image_pool = BKE_image_pool_new();
|
||||
|
@ -5652,8 +5652,7 @@ static bool project_paint_op(void *state, const float lastpos[2], const float po
|
|||
handles[a].pool = image_pool;
|
||||
|
||||
if (task_pool != NULL) {
|
||||
BLI_task_pool_push(
|
||||
task_pool, do_projectpaint_thread, &handles[a], false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(task_pool, do_projectpaint_thread, &handles[a], false, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -961,9 +961,9 @@ static void start_prefetch_threads(MovieClip *clip,
|
|||
queue.do_update = do_update;
|
||||
queue.progress = progress;
|
||||
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &queue);
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &queue, TASK_PRIORITY_LOW);
|
||||
for (i = 0; i < tot_thread; i++) {
|
||||
BLI_task_pool_push(task_pool, prefetch_task_func, clip, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, prefetch_task_func, clip, false, NULL);
|
||||
}
|
||||
BLI_task_pool_work_and_wait(task_pool);
|
||||
BLI_task_pool_free(task_pool);
|
||||
|
|
|
@ -1434,7 +1434,7 @@ static void do_sequence_proxy(void *pjv,
|
|||
queue.do_update = do_update;
|
||||
queue.progress = progress;
|
||||
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &queue);
|
||||
task_pool = BLI_task_pool_create(task_scheduler, &queue, TASK_PRIORITY_LOW);
|
||||
handles = MEM_callocN(sizeof(ProxyThread) * tot_thread, "proxy threaded handles");
|
||||
for (i = 0; i < tot_thread; i++) {
|
||||
ProxyThread *handle = &handles[i];
|
||||
|
@ -1451,7 +1451,7 @@ static void do_sequence_proxy(void *pjv,
|
|||
handle->distortion = BKE_tracking_distortion_new(&clip->tracking, width, height);
|
||||
}
|
||||
|
||||
BLI_task_pool_push(task_pool, proxy_task_func, handle, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, proxy_task_func, handle, false, NULL);
|
||||
}
|
||||
|
||||
BLI_task_pool_work_and_wait(task_pool);
|
||||
|
|
|
@ -1329,7 +1329,7 @@ static void filelist_cache_preview_ensure_running(FileListEntryCache *cache)
|
|||
if (!cache->previews_pool) {
|
||||
TaskScheduler *scheduler = BLI_task_scheduler_get();
|
||||
|
||||
cache->previews_pool = BLI_task_pool_create_background(scheduler, cache);
|
||||
cache->previews_pool = BLI_task_pool_create_background(scheduler, cache, TASK_PRIORITY_LOW);
|
||||
cache->previews_done = BLI_thread_queue_init();
|
||||
|
||||
IMB_thumb_locks_acquire();
|
||||
|
@ -1393,12 +1393,11 @@ static void filelist_cache_previews_push(FileList *filelist, FileDirEntry *entry
|
|||
FileListEntryPreviewTaskData *preview_taskdata = MEM_mallocN(sizeof(*preview_taskdata),
|
||||
__func__);
|
||||
preview_taskdata->preview = preview;
|
||||
BLI_task_pool_push_ex(cache->previews_pool,
|
||||
filelist_cache_preview_runf,
|
||||
preview_taskdata,
|
||||
true,
|
||||
filelist_cache_preview_freef,
|
||||
TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(cache->previews_pool,
|
||||
filelist_cache_preview_runf,
|
||||
preview_taskdata,
|
||||
true,
|
||||
filelist_cache_preview_freef);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -360,7 +360,7 @@ void IMB_processor_apply_threaded(
|
|||
int total_tasks = (buffer_lines + lines_per_task - 1) / lines_per_task;
|
||||
int i, start_line;
|
||||
|
||||
task_pool = BLI_task_pool_create(task_scheduler, do_thread);
|
||||
task_pool = BLI_task_pool_create(task_scheduler, do_thread, TASK_PRIORITY_LOW);
|
||||
|
||||
handles = MEM_callocN(handle_size * total_tasks, "processor apply threaded handles");
|
||||
|
||||
|
@ -379,7 +379,7 @@ void IMB_processor_apply_threaded(
|
|||
|
||||
init_handle(handle, start_line, lines_per_current_task, init_customdata);
|
||||
|
||||
BLI_task_pool_push(task_pool, processor_apply_func, handle, false, TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(task_pool, processor_apply_func, handle, false, NULL);
|
||||
|
||||
start_line += lines_per_task;
|
||||
}
|
||||
|
@ -421,13 +421,10 @@ void IMB_processor_apply_threaded_scanlines(int total_scanlines,
|
|||
data.total_scanlines = total_scanlines;
|
||||
const int total_tasks = (total_scanlines + scanlines_per_task - 1) / scanlines_per_task;
|
||||
TaskScheduler *task_scheduler = BLI_task_scheduler_get();
|
||||
TaskPool *task_pool = BLI_task_pool_create(task_scheduler, &data);
|
||||
TaskPool *task_pool = BLI_task_pool_create(task_scheduler, &data, TASK_PRIORITY_LOW);
|
||||
for (int i = 0, start_line = 0; i < total_tasks; i++) {
|
||||
BLI_task_pool_push(task_pool,
|
||||
processor_apply_scanline_func,
|
||||
POINTER_FROM_INT(start_line),
|
||||
false,
|
||||
TASK_PRIORITY_LOW);
|
||||
BLI_task_pool_push(
|
||||
task_pool, processor_apply_scanline_func, POINTER_FROM_INT(start_line), false, NULL);
|
||||
start_line += scanlines_per_task;
|
||||
}
|
||||
|
||||
|
|
|
@ -83,10 +83,10 @@ TEST(LockfreeLinkList, InsertMultipleConcurrent)
|
|||
BLI_linklist_lockfree_init(&list);
|
||||
/* Initialize task scheduler and pool. */
|
||||
TaskScheduler *scheduler = BLI_task_scheduler_create(num_threads);
|
||||
TaskPool *pool = BLI_task_pool_create_suspended(scheduler, &list);
|
||||
TaskPool *pool = BLI_task_pool_create_suspended(scheduler, &list, TASK_PRIORITY_HIGH);
|
||||
/* Push tasks to the pool. */
|
||||
for (int i = 0; i < num_nodes; ++i) {
|
||||
BLI_task_pool_push(pool, concurrent_insert, POINTER_FROM_INT(i), false, TASK_PRIORITY_HIGH);
|
||||
BLI_task_pool_push(pool, concurrent_insert, POINTER_FROM_INT(i), false, NULL);
|
||||
}
|
||||
/* Run all the tasks. */
|
||||
BLI_threaded_malloc_begin();
|
||||
|
|
Loading…
Reference in New Issue