[Bf-blender-cvs] [4c4a7e84c64] master: Task scheduler: Use single parallel range function with more flexible function
Sergey Sharybin
noreply at git.blender.org
Tue Jan 9 16:11:48 CET 2018
Commit: 4c4a7e84c64472e38811933646f3fefeb071b0b4
Author: Sergey Sharybin
Date: Mon Jan 8 11:35:48 2018 +0100
Branches: master
https://developer.blender.org/rB4c4a7e84c64472e38811933646f3fefeb071b0b4
Task scheduler: Use single parallel range function with more flexible function
Now all the fine-tuning is happening using parallel range settings structure,
which avoid passing long lists of arguments, allows extend fine-tuning further,
avoid having lots of various functions which basically does the same thing.
===================================================================
M source/blender/blenkernel/intern/CCGSubSurf_legacy.c
M source/blender/blenkernel/intern/colortools.c
M source/blender/blenkernel/intern/dynamicpaint.c
M source/blender/blenkernel/intern/mask_rasterize.c
M source/blender/blenkernel/intern/mesh_evaluate.c
M source/blender/blenkernel/intern/ocean.c
M source/blender/blenkernel/intern/particle_system.c
M source/blender/blenkernel/intern/pbvh.c
M source/blender/blenkernel/intern/shrinkwrap.c
M source/blender/blenkernel/intern/smoke.c
M source/blender/blenkernel/intern/tracking_auto.c
M source/blender/blenkernel/intern/tracking_stabilize.c
M source/blender/blenlib/BLI_task.h
M source/blender/blenlib/intern/BLI_kdopbvh.c
M source/blender/blenlib/intern/math_statistics.c
M source/blender/blenlib/intern/task.c
M source/blender/bmesh/intern/bmesh_interp.c
M source/blender/depsgraph/intern/eval/deg_eval.cc
M source/blender/depsgraph/intern/eval/deg_eval_flush.cc
M source/blender/editors/sculpt_paint/paint_cursor.c
M source/blender/editors/sculpt_paint/paint_image_2d.c
M source/blender/editors/sculpt_paint/paint_mask.c
M source/blender/editors/sculpt_paint/paint_vertex.c
M source/blender/editors/sculpt_paint/sculpt.c
M source/blender/editors/sculpt_paint/sculpt_undo.c
M source/blender/editors/space_sequencer/sequencer_scopes.c
M source/blender/modifiers/intern/MOD_displace.c
M source/blender/modifiers/intern/MOD_meshdeform.c
M source/blender/modifiers/intern/MOD_ocean.c
M source/blender/modifiers/intern/MOD_surfacedeform.c
M source/blender/modifiers/intern/MOD_uvwarp.c
M source/blender/modifiers/intern/MOD_weightvgproximity.c
M source/blender/render/intern/source/pointdensity.c
===================================================================
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_legacy.c b/source/blender/blenkernel/intern/CCGSubSurf_legacy.c
index 8b3ea249396..363b7cff453 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_legacy.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf_legacy.c
@@ -331,10 +331,15 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss,
.numEffectedF = numEffectedF
};
- BLI_task_parallel_range(0, numEffectedF,
- &data,
- ccgSubSurf__calcVertNormals_faces_accumulate_cb,
- numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ BLI_task_parallel_range(0, numEffectedF,
+ &data,
+ ccgSubSurf__calcVertNormals_faces_accumulate_cb,
+ &settings);
+ }
/* XXX can I reduce the number of normalisations here? */
for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) {
@@ -360,15 +365,25 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss,
}
}
- BLI_task_parallel_range(0, numEffectedE,
- &data,
- ccgSubSurf__calcVertNormals_edges_accumulate_cb,
- numEffectedE * edgeSize * 4 >= CCG_OMP_LIMIT);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (numEffectedE * edgeSize * 4 >= CCG_OMP_LIMIT);
+ BLI_task_parallel_range(0, numEffectedE,
+ &data,
+ ccgSubSurf__calcVertNormals_edges_accumulate_cb,
+ &settings);
+ }
- BLI_task_parallel_range(0, numEffectedF,
- &data,
- ccgSubSurf__calcVertNormals_faces_finalize_cb,
- numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ BLI_task_parallel_range(0, numEffectedF,
+ &data,
+ ccgSubSurf__calcVertNormals_faces_finalize_cb,
+ &settings);
+ }
for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) {
CCGEdge *e = (CCGEdge *) effectedE[ptrIdx];
@@ -653,10 +668,15 @@ static void ccgSubSurf__calcSubdivLevel(
.curLvl = curLvl
};
- BLI_task_parallel_range(0, numEffectedF,
- &data,
- ccgSubSurf__calcSubdivLevel_interior_faces_edges_midpoints_cb,
- numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ BLI_task_parallel_range(0, numEffectedF,
+ &data,
+ ccgSubSurf__calcSubdivLevel_interior_faces_edges_midpoints_cb,
+ &settings);
+ }
/* exterior edge midpoints
* - old exterior edge points
@@ -931,10 +951,15 @@ static void ccgSubSurf__calcSubdivLevel(
}
}
- BLI_task_parallel_range(0, numEffectedF,
- &data,
- ccgSubSurf__calcSubdivLevel_interior_faces_edges_centerpoints_shift_cb,
- numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ BLI_task_parallel_range(0, numEffectedF,
+ &data,
+ ccgSubSurf__calcSubdivLevel_interior_faces_edges_centerpoints_shift_cb,
+ &settings);
+ }
/* copy down */
edgeSize = ccg_edgesize(nextLvl);
@@ -946,10 +971,15 @@ static void ccgSubSurf__calcSubdivLevel(
VertDataCopy(EDGE_getCo(e, nextLvl, edgeSize - 1), VERT_getCo(e->v1, nextLvl), ss);
}
- BLI_task_parallel_range(0, numEffectedF,
- &data,
- ccgSubSurf__calcSubdivLevel_verts_copydata_cb,
- numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT);
+ BLI_task_parallel_range(0, numEffectedF,
+ &data,
+ ccgSubSurf__calcSubdivLevel_verts_copydata_cb,
+ &settings);
+ }
}
void ccgSubSurf__sync_legacy(CCGSubSurf *ss)
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index 67153564a0f..46d06a3ac78 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -1387,8 +1387,16 @@ void scopes_update(Scopes *scopes, ImBuf *ibuf, const ColorManagedViewSettings *
ScopesUpdateDataChunk data_chunk = {{0}};
INIT_MINMAX(data_chunk.min, data_chunk.max);
- BLI_task_parallel_range_finalize(0, ibuf->y, &data, &data_chunk, sizeof(data_chunk),
- scopes_update_cb, scopes_update_finalize, ibuf->y > 256, false);
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (ibuf->y > 256);
+ settings.userdata_chunk = &data_chunk;
+ settings.userdata_chunk_size = sizeof(data_chunk);
+ settings.func_finalize = scopes_update_finalize;
+ BLI_task_parallel_range(0, ibuf->y,
+ &data,
+ scopes_update_cb,
+ &settings);
/* test for nicer distribution even - non standard, leave it out for a while */
#if 0
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 81a721e77b9..4b7193adc21 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -709,10 +709,19 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
/* calculate canvas dimensions */
/* Important to init correctly our ref grid_bound... */
boundInsert(&grid->grid_bounds, bData->realCoord[bData->s_pos[0]].v);
- BLI_task_parallel_range_finalize(
- 0, sData->total_points, bData, &grid->grid_bounds, sizeof(grid->grid_bounds),
- grid_bound_insert_cb_ex, grid_bound_insert_finalize, sData->total_points > 1000, false);
-
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (sData->total_points > 1000);
+ settings.userdata_chunk = &grid->grid_bounds;
+ settings.userdata_chunk_size = sizeof(grid->grid_bounds);
+ settings.func_finalize = grid_bound_insert_finalize;
+ BLI_task_parallel_range(
+ 0, sData->total_points,
+ bData,
+ grid_bound_insert_cb_ex,
+ &settings);
+ }
/* get dimensions */
sub_v3_v3v3(dim, grid->grid_bounds.max, grid->grid_bounds.min);
copy_v3_v3(td, dim);
@@ -761,9 +770,19 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
if (!error) {
/* calculate number of points withing each cell */
- BLI_task_parallel_range_finalize(
- 0, sData->total_points, bData, grid->s_num, sizeof(*grid->s_num) * grid_cells,
- grid_cell_points_cb_ex, grid_cell_points_finalize, sData->total_points > 1000, false);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (sData->total_points > 1000);
+ settings.userdata_chunk = grid->s_num;
+ settings.userdata_chunk_size = sizeof(*grid->s_num) * grid_cells;
+ settings.func_finalize = grid_cell_points_finalize;
+ BLI_task_parallel_range(
+ 0, sData->total_points,
+ bData,
+ grid_cell_points_cb_ex,
+ &settings);
+ }
/* calculate grid indexes (not needed for first cell, which is zero). */
for (i = 1; i < grid_cells; i++) {
@@ -779,7 +798,15 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
}
/* calculate cell bounds */
- BLI_task_parallel_range(0, grid->dim[0], bData, grid_cell_bounds_cb, grid_cells > 1000);
+ {
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (grid_cells > 1000);
+ BLI_task_parallel_range(0, grid->dim[0],
+ bData,
+ grid_cell_bounds_cb,
+ &settings);
+ }
}
if (temp_s_num)
@@ -1550,7 +1577,13 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
.mloop = mloop, .mlooptri = mlooptri, .mloopuv = mloopuv, .pool = pool,
.scene_color_manage = scene_color_manage
};
- BLI_task_parallel_range(0, tottri, &data, dynamic_paint_set_init_color_tex_to_vcol_cb, tottri > 1000);
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (tottri > 1000);
+ BLI_task_parallel_range(0, tottri,
+ &data,
+ dynamic_paint_set_init_color_tex_to_vcol_cb,
+ &settings);
BKE_image_pool_free(pool);
}
else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
@@ -1559,8 +1592,13 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
.mlooptri = mlooptri, .mloopuv = mloopuv,
.scene_color_manage = scene_color_manage
};
- BLI_task_parallel_range(0, sData->total_points, &data, dynamic_paint_set_init_color_tex_to_imseq_cb,
- sData->total_points > 1000);
+ ParallelRangeSettings settings;
+ BLI_parallel_range_settings_defaults(&settings);
+ settings.use_threading = (sData->
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list