[Bf-blender-cvs] [74e029dcb64] soc-2018-npr: Multithread OK.

Nick Wu noreply at git.blender.org
Tue Jul 3 14:45:18 CEST 2018


Commit: 74e029dcb64be89e3444eaf2cbf14c6b4edf4c86
Author: Nick Wu
Date:   Tue Jul 3 20:42:32 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB74e029dcb64be89e3444eaf2cbf14c6b4edf4c86

Multithread OK.

===================================================================

M	source/blender/draw/engines/lanpr/lanpr_ops.c

===================================================================

diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 494bfb27a9a..84bbb609ef5 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -3,6 +3,7 @@
 #include "BLI_listbase.h"
 #include "BLI_linklist.h"
 #include "BLI_math_matrix.h"
+#include "BLI_task.h"
 #include "lanpr_all.h"
 #include "lanpr_util.h"
 #include "DRW_render.h"
@@ -718,7 +719,7 @@ void lanpr_CalculateSingleLineOcclusion(LANPR_RenderBuffer *rb, LANPR_RenderLine
 		nba = lanpr_GetNextBoundingArea(nba, rl, x, y, k, PositiveX, PositiveY, &x, &y);
 	}
 }
-void THREAD_CalculateLineOcclusion(LANPR_RenderTaskInfo *rti) {
+void THREAD_CalculateLineOcclusion(TaskPool *__restrict pool, LANPR_RenderTaskInfo *rti, int threadid) {
 	LANPR_RenderBuffer *rb = rti->RenderBuffer;
 	int ThreadId = rti->ThreadID;
 	nListItemPointer *lip;
@@ -758,6 +759,27 @@ void THREAD_CalculateLineOcclusion(LANPR_RenderTaskInfo *rti) {
 	}
 	//thrd_exit(0);
 }
+void THREAD_CalculateLineOcclusion_Begin(LANPR_RenderBuffer* rb) {
+	int ThreadCount = BKE_render_num_threads(&rb->Scene->r);
+	LANPR_RenderTaskInfo* rti = MEM_callocN(sizeof(LANPR_RenderTaskInfo)*ThreadCount, "render task info");
+	TaskScheduler *scheduler = BLI_task_scheduler_get();
+	int i;
+
+	rb->ContourManaged = rb->Contours.pFirst;
+	rb->CreaseManaged = rb->CreaseLines.pFirst;
+	rb->IntersectionManaged = rb->IntersectionLines.pFirst;
+	rb->MaterialManaged = rb->MaterialLines.pFirst;
+
+	TaskPool* tp = BLI_task_pool_create(scheduler, 0);
+
+	for (i = 0; i < ThreadCount; i++) {
+		rti[i].ThreadID = i;
+		rti[i].RenderBuffer = rb;
+		BLI_task_pool_push(tp, THREAD_CalculateLineOcclusion, &rti[i], 0, TASK_PRIORITY_HIGH);
+	}
+	BLI_task_pool_work_and_wait(tp);
+
+}
 
 void NO_THREAD_CalculateLineOcclusion(LANPR_RenderBuffer *rb) {
 	nListItemPointer *lip;
@@ -2925,7 +2947,8 @@ static int lanpr_compute_feature_lines_exec(struct bContext *C, struct wmOperato
 
 	lanpr_AddTriangles(rb);
 
-	NO_THREAD_CalculateLineOcclusion(rb);
+	THREAD_CalculateLineOcclusion_Begin(rb);
+	//NO_THREAD_CalculateLineOcclusion(rb);
 
 	return OPERATOR_FINISHED;
 }



More information about the Bf-blender-cvs mailing list