[Bf-blender-cvs] [9c3c5d5bffb] temp-lanpr-cleanup2: LANPR: Background update task pool deletion.

YimingWu noreply at git.blender.org
Wed Nov 6 14:07:11 CET 2019


Commit: 9c3c5d5bffb1c1215d5d1b7aedf19cd3877ecfce
Author: YimingWu
Date:   Wed Nov 6 21:06:36 2019 +0800
Branches: temp-lanpr-cleanup2
https://developer.blender.org/rB9c3c5d5bffb1c1215d5d1b7aedf19cd3877ecfce

LANPR: Background update task pool deletion.

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

M	source/blender/draw/engines/lanpr/lanpr_engine.c
M	source/blender/editors/include/ED_lanpr.h
M	source/blender/editors/lanpr/lanpr_cpu.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 912906a5c67..30b4f50d93e 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -23,6 +23,7 @@
 
 #include "BLI_listbase.h"
 #include "BLI_linklist.h"
+#include "BLI_task.h"
 #include "BLI_math_matrix.h"
 #include "BLI_rect.h"
 
@@ -174,6 +175,10 @@ static void lanpr_engine_free(void)
     LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared;
     ED_lanpr_destroy_render_data(rb);
 
+    if (lanpr_share.background_render_task) {
+      BLI_task_pool_free(lanpr_share.background_render_task);
+    }
+
     GPU_BATCH_DISCARD_SAFE(rb->chain_draw_batch);
 
     MEM_freeN(rb);
@@ -226,7 +231,7 @@ static void lanpr_cache_init(void *vedata)
                                                     psl->color_pass);
 
   if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer &&
-           !lanpr_share.dpix_shader_error) {
+      !lanpr_share.dpix_shader_error) {
     LANPR_LineLayer *ll = lanpr->line_layers.first;
     psl->dpix_transform_pass = DRW_pass_create("DPIX Transform Stage", DRW_STATE_WRITE_COLOR);
     stl->g_data->dpix_transform_shgrp = DRW_shgroup_create(lanpr_share.dpix_transform_shader,
diff --git a/source/blender/editors/include/ED_lanpr.h b/source/blender/editors/include/ED_lanpr.h
index 05f53abe1db..94fc3e9c9c6 100644
--- a/source/blender/editors/include/ED_lanpr.h
+++ b/source/blender/editors/include/ED_lanpr.h
@@ -333,6 +333,8 @@ typedef struct LANPR_SharedResource {
   struct GPUShader *software_shader;
   struct GPUShader *software_chaining_shader;
 
+  struct TaskPool *background_render_task;
+
   void *ved_viewport;
   void *ved_render;
 
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index ec79c4d5dac..0a1fde7b7ac 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -3863,11 +3863,21 @@ static void lanpr_compute_feature_lines_worker(TaskPool *__restrict UNUSED(pool)
 
 void ED_lanpr_compute_feature_lines_background(Depsgraph *dg, int intersection_only)
 {
+  TaskPool *tp_read;
+  BLI_spin_lock(&lanpr_share.lock_render_status);
+  tp_read = lanpr_share.background_render_task;
+  BLI_spin_unlock(&lanpr_share.lock_render_status);
+
   /* If the calculation is already started then bypass it. */
   if (!ED_lanpr_calculation_flag_check(LANPR_RENDER_IDLE)) {
     return;
   }
 
+  if (tp_read) {
+    BLI_task_pool_free(lanpr_share.background_render_task);
+    lanpr_share.background_render_task = NULL;
+  }
+
   ED_lanpr_calculation_set_flag(LANPR_RENDER_RUNNING);
 
   LANPR_FeatureLineWorker *flw = MEM_callocN(sizeof(LANPR_FeatureLineWorker), "Task Pool");
@@ -3877,6 +3887,9 @@ void ED_lanpr_compute_feature_lines_background(Depsgraph *dg, int intersection_o
   flw->intersection_only = intersection_only;
 
   TaskPool *tp = BLI_task_pool_create_background(scheduler, flw);
+  BLI_spin_lock(&lanpr_share.lock_render_status);
+  lanpr_share.background_render_task = tp;
+  BLI_spin_unlock(&lanpr_share.lock_render_status);
 
   BLI_task_pool_push(tp, lanpr_compute_feature_lines_worker, flw, true, TASK_PRIORITY_HIGH);
 }



More information about the Bf-blender-cvs mailing list