[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