[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