[Bf-blender-cvs] [59d878aa5c1] soc-2018-npr: Fixed multithread RenderTriangle size error

Nick Wu noreply at git.blender.org
Wed Jul 4 09:52:39 CEST 2018


Commit: 59d878aa5c184067a1a61d8ef1d338cc1eea81a6
Author: Nick Wu
Date:   Wed Jul 4 13:32:40 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB59d878aa5c184067a1a61d8ef1d338cc1eea81a6

Fixed multithread RenderTriangle size error

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

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 84bbb609ef5..a9b58fa5136 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -729,38 +729,23 @@ void THREAD_CalculateLineOcclusion(TaskPool *__restrict pool, LANPR_RenderTaskIn
 
 		for (lip = (void *)rti->Contour; lip && lip->pPrev != rti->ContourPointers.pLast; lip = lip->pNext) {
 			lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID);
-
-			count++;
 		}
-		//tnsset_PlusRenderContourProcessedCount(rb, count);
-		count = 0;
 
 		for (lip = (void *)rti->Crease; lip && lip->pPrev != rti->CreasePointers.pLast; lip = lip->pNext) {
 			lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID);
-			count++;
 		}
-		//tnsset_PlusRenderCreaseProcessedCount(rb, count);
-		count = 0;
 
 		for (lip = (void *)rti->Intersection; lip && lip->pPrev != rti->IntersectionPointers.pLast; lip = lip->pNext) {
 			lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID);
-			count++;
 		}
-		//tnsset_PlusRenderIntersectionProcessedCount(rb, count);
-		count = 0;
 
 		for (lip = (void *)rti->Material; lip && lip->pPrev != rti->MaterialPointers.pLast; lip = lip->pNext) {
 			lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID);
-			count++;
 		}
-		//tnsset_PlusRenderMaterialProcessedCount(rb, count);
-		count = 0;
-
 	}
-	//thrd_exit(0);
 }
 void THREAD_CalculateLineOcclusion_Begin(LANPR_RenderBuffer* rb) {
-	int ThreadCount = BKE_render_num_threads(&rb->Scene->r);
+	int ThreadCount = rb->ThreadCount;
 	LANPR_RenderTaskInfo* rti = MEM_callocN(sizeof(LANPR_RenderTaskInfo)*ThreadCount, "render task info");
 	TaskScheduler *scheduler = BLI_task_scheduler_get();
 	int i;
@@ -2569,15 +2554,15 @@ void lanpr_DestroyRenderData(LANPR_RenderBuffer *rb) {
 	//tnsZeroGeomtryBuffers(rb->Scene);
 
 	while (reln = lstPopItem(&rb->VertexBufferPointers)) {
-		FreeMem(reln->Pointer);
+		MEM_freeN(reln->Pointer);
 	}
 
 	while (reln = lstPopItem(&rb->LineBufferPointers)) {
-		FreeMem(reln->Pointer);
+		MEM_freeN(reln->Pointer);
 	}
 
 	while (reln = lstPopItem(&rb->TriangleBufferPointers)) {
-		FreeMem(reln->Pointer);
+		MEM_freeN(reln->Pointer);
 	}
 
 	BLI_spin_end(&rb->csData);
@@ -2614,7 +2599,7 @@ int lanpr_DrawEdgePreview(LANPR_RenderBuffer *rb, LANPR_LineLayer *OverrideLayer
 }
 
 int lanpr_GetRenderTriangleSize(LANPR_RenderBuffer *rb) {
-	rb->ThreadCount = rb->ThreadCount == 0 ? 1 : rb->ThreadCount;
+	if(rb->ThreadCount==0) rb->ThreadCount = BKE_render_num_threads(&rb->Scene->r);
 	return sizeof(LANPR_RenderTriangle) + (sizeof(LANPR_RenderLine *) * rb->ThreadCount);
 }
 
@@ -2929,12 +2914,12 @@ static int lanpr_compute_feature_lines_exec(struct bContext *C, struct wmOperato
 	/* need threading, later.... */
 
 	rb = lanpr_CreateRenderBuffer(lanpr);
-
-	rb->TriangleSize = lanpr_GetRenderTriangleSize(rb);
 	rb->Scene = scene;
 	rb->W = scene->r.xsch;
 	rb->H = scene->r.ysch;
 
+	rb->TriangleSize = lanpr_GetRenderTriangleSize(rb);
+
 	lanpr_MakeRenderGeometryBuffers(depsgraph, scene, scene->camera, rb);
 
 	lanpr_CullTriangles(rb);



More information about the Bf-blender-cvs mailing list