[Bf-blender-cvs] [6ab328ec3a0] lineart-shadow: LineArt: Set default tile count to 10x10

YimingWu noreply at git.blender.org
Thu Mar 31 08:42:47 CEST 2022


Commit: 6ab328ec3a047e46a7925d5b19878955ef6efb3f
Author: YimingWu
Date:   Tue Mar 29 14:00:27 2022 +0800
Branches: lineart-shadow
https://developer.blender.org/rB6ab328ec3a047e46a7925d5b19878955ef6efb3f

LineArt: Set default tile count to 10x10

This increases performance by reducing conflicts.

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

M	source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M	source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h

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

diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index 7539395ef28..4490bf8b5ab 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@ -258,7 +258,7 @@ typedef struct LineartRenderBuffer {
   float overscan;
 
   struct LineartBoundingArea *initial_bounding_areas;
-  unsigned int bounding_area_count;
+  unsigned int bounding_area_initial_count;
 
   /* Array of thread_count length for spatial locks. */
   SpinLock *lock_bounding_areas;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 306d1e3c87f..b2a109f9b48 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -3190,9 +3190,7 @@ static void lineart_destroy_render_data(LineartRenderBuffer *rb)
   BLI_spin_end(&rb->lock_cuts);
   BLI_spin_end(&rb->render_data_pool.lock_mem);
 
-  MEM_freeN((void *)rb->lock_bounding_areas);
-
-  for (int i = 0; i < rb->thread_count; i++) {
+  for (int i = 0; i < rb->bounding_area_initial_count; i++) {
     BLI_spin_end(&rb->lock_bounding_areas[i]);
   }
 
@@ -3387,10 +3385,6 @@ static LineartRenderBuffer *lineart_create_render_buffer(Scene *scene,
 
   rb->thread_count = BKE_render_num_threads(&scene->r);
 
-  rb->lock_bounding_areas = MEM_callocN(sizeof(SpinLock) * rb->thread_count, "ba spin locks");
-  for (int i = 0; i < rb->thread_count; i++) {
-    BLI_spin_init(&rb->lock_bounding_areas[i]);
-  }
   return rb;
 }
 
@@ -3420,9 +3414,14 @@ static void lineart_main_bounding_area_make_initial(LineartRenderBuffer *rb)
   rb->width_per_tile = span_w;
   rb->height_per_tile = span_h;
 
-  rb->bounding_area_count = sp_w * sp_h;
+  rb->bounding_area_initial_count = sp_w * sp_h;
   rb->initial_bounding_areas = lineart_mem_acquire(
-      &rb->render_data_pool, sizeof(LineartBoundingArea) * rb->bounding_area_count);
+      &rb->render_data_pool, sizeof(LineartBoundingArea) * rb->bounding_area_initial_count);
+  rb->lock_bounding_areas = lineart_mem_acquire(
+      &rb->render_data_pool, sizeof(SpinLock) * rb->bounding_area_initial_count);
+  for (int i = 0; i < rb->bounding_area_initial_count; i++) {
+    BLI_spin_init(&rb->lock_bounding_areas[i]);
+  }
 
   int i_ba = 0;
 
@@ -3449,7 +3448,7 @@ static void lineart_main_bounding_area_make_initial(LineartRenderBuffer *rb)
                                              sizeof(LineartEdge *) * ba->max_line_count);
 
       /* Spatial lock assignment. */
-      ba->lock = &rb->lock_bounding_areas[i_ba / lock_group_inc];
+      ba->lock = &rb->lock_bounding_areas[i_ba % rb->bounding_area_initial_count];
       i_ba++;
 
       /* Link adjacent ones. */
@@ -3721,8 +3720,6 @@ static void lineart_bounding_area_split(LineartRenderBuffer *rb,
           rb, &cba[3], tri, b, 0, recursive_level + 1, false, false, NULL);
     }
   }
-
-  rb->bounding_area_count += 3;
 }
 
 static bool lineart_bounding_area_edge_intersect(LineartRenderBuffer *UNUSED(fb),
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
index f1800f9378f..6ce042450af 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
@@ -144,4 +144,4 @@ void lineart_count_and_print_render_buffer_memory(struct LineartRenderBuffer *rb
 
 /* Initial bounding area row/column count, setting 4 is the simplest way algorithm could function
  * efficiently. */
-#define LRT_BA_ROWS 4
+#define LRT_BA_ROWS 10



More information about the Bf-blender-cvs mailing list