[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