[Bf-blender-cvs] [4cc14267833] soc-2019-npr: LANPR: Memory now all in RenderBuffer->pool. engine_free() not called.

YimingWu noreply at git.blender.org
Mon Jun 3 10:31:56 CEST 2019


Commit: 4cc14267833837c0bb28fd23b49b12f07d25b8c1
Author: YimingWu
Date:   Mon Jun 3 16:28:29 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB4cc14267833837c0bb28fd23b49b12f07d25b8c1

LANPR: Memory now all in RenderBuffer->pool. engine_free() not called.

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

M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_ops.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 8bdaf0122a2..30812d3cba2 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -68,6 +68,9 @@
 
 #define tnsLinearItp(l, r, T) ((l) * (1.0f - (T)) + (r) * (T))
 
+extern struct RenderEngineType DRW_engine_viewport_lanpr_type;
+extern struct DrawEngineType draw_engine_lanpr_type;
+
 typedef struct LANPR_RenderBuffer LANPR_RenderBuffer;
 
 typedef struct LANPR_SharedResource {
@@ -418,8 +421,6 @@ typedef struct LANPR_BoundingArea {
 //#define TNS_OVERRIDE_ALL_OTHERS_IN_GROUP      3
 //#define TNS_OVERRIDE_ALL_OTHERS               4
 
-extern RenderEngineType DRW_engine_viewport_lanpr_type;
-
 #define tnsLinearItp(l, r, T) ((l) * (1.0f - (T)) + (r) * (T))
 
 #define TNS_TILE(tile, r, c, CCount) tile[r * CCount + c]
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 61e27b1bff2..da96096d54a 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -1123,8 +1123,7 @@ void lanpr_THREAD_calculate_line_occlusion(TaskPool *__restrict pool,
 void lanpr_THREAD_calculate_line_occlusion_begin(LANPR_RenderBuffer *rb)
 {
   int thread_count = rb->thread_count;
-  LANPR_RenderTaskInfo *rti = MEM_callocN(sizeof(LANPR_RenderTaskInfo) * thread_count,
-                                          "render task info");
+  LANPR_RenderTaskInfo *rti = MEM_callocN(sizeof(LANPR_RenderTaskInfo) * thread_count,"Task Pool");
   TaskScheduler *scheduler = BLI_task_scheduler_get();
   int i;
 
@@ -1142,7 +1141,8 @@ void lanpr_THREAD_calculate_line_occlusion_begin(LANPR_RenderBuffer *rb)
     BLI_task_pool_push(tp, lanpr_THREAD_calculate_line_occlusion, &rti[i], 0, TASK_PRIORITY_HIGH);
   }
   BLI_task_pool_work_and_wait(tp);
-
+  BLI_task_pool_free(tp);
+  
   MEM_freeN(rti);
 }
 
@@ -1356,9 +1356,7 @@ LANPR_RenderElementLinkNode *lanpr_new_cull_triangle_space64(LANPR_RenderBuffer
 {
   LANPR_RenderElementLinkNode *reln;
 
-  LANPR_RenderTriangle *RenderTriangles = MEM_callocN(
-      64 * rb->triangle_size,
-      "render triangle space");  // CreateNewBuffer(LANPR_RenderTriangle, 64);
+  LANPR_RenderTriangle *RenderTriangles = mem_static_aquire(&rb->render_data_pool, 64 * rb->triangle_size);  // CreateNewBuffer(LANPR_RenderTriangle, 64);
 
   reln = list_append_pointer_static_sized(&rb->triangle_buffer_pointers,
                                           &rb->render_data_pool,
@@ -1373,9 +1371,7 @@ LANPR_RenderElementLinkNode *lanpr_new_cull_point_space64(LANPR_RenderBuffer *rb
 {
   LANPR_RenderElementLinkNode *reln;
 
-  LANPR_RenderVert *Rendervertices = MEM_callocN(
-      sizeof(LANPR_RenderVert) * 64,
-      "render vert space");  // CreateNewBuffer(LANPR_RenderVert, 64);
+  LANPR_RenderVert *Rendervertices = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderVert) * 64);  // CreateNewBuffer(LANPR_RenderVert, 64);
 
   reln = list_append_pointer_static_sized(&rb->vertex_buffer_pointers,
                                           &rb->render_data_pool,
@@ -2073,11 +2069,9 @@ void lanpr_make_render_geometry_buffers_object(Object *o,
       CanFindFreestyle = 1;
     }
 
-    orv = MEM_callocN(sizeof(LANPR_RenderVert) * bm->totvert, "object render verts");
-    ort = MEM_callocN(
-        bm->totface * rb->triangle_size,
-        "object render triangles");  // CreateNewBuffer(LANPR_RenderTriangle, mo->triangle_count);
-    orl = MEM_callocN(sizeof(LANPR_RenderLine) * bm->totedge, "object render edge");
+    orv = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderVert) * bm->totvert);
+    ort = mem_static_aquire(&rb->render_data_pool, bm->totface * rb->triangle_size);
+    orl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine) * bm->totedge);
 
     reln = list_append_pointer_static_sized(&rb->vertex_buffer_pointers,
                                             &rb->render_data_pool,
@@ -2206,10 +2200,8 @@ void lanpr_make_render_geometry_buffers(Depsgraph *depsgraph,
   tmat_inverse_44d(rb->vp_inverse, rb->view_projection);
 
   void *a;
-  while (a = BLI_pophead(&rb->triangle_buffer_pointers))
-    MEM_freeN(a);
-  while (a = BLI_pophead(&rb->vertex_buffer_pointers))
-    MEM_freeN(a);
+  list_handle_empty(&rb->triangle_buffer_pointers);
+  list_handle_empty(&rb->vertex_buffer_pointers);
 
   DEG_OBJECT_ITER_BEGIN (depsgraph,
                          o,
@@ -3292,17 +3284,9 @@ void lanpr_destroy_render_data(LANPR_RenderBuffer *rb)
   list_handle_empty(&rb->all_render_lines);
   list_handle_empty(&rb->chains);
 
-  while (reln = BLI_pophead(&rb->vertex_buffer_pointers)) {
-    MEM_freeN(reln->pointer);
-  }
-
-  while (reln = BLI_pophead(&rb->line_buffer_pointers)) {
-    MEM_freeN(reln->pointer);
-  }
-
-  while (reln = BLI_pophead(&rb->triangle_buffer_pointers)) {
-    MEM_freeN(reln->pointer);
-  }
+  list_handle_empty(&rb->vertex_buffer_pointers);
+  list_handle_empty(&rb->line_buffer_pointers);
+  list_handle_empty(&rb->triangle_buffer_pointers);
 
   BLI_spin_end(&rb->cs_data);
   BLI_spin_end(&rb->cs_info);
@@ -3322,7 +3306,7 @@ LANPR_RenderBuffer *lanpr_create_render_buffer(SceneLANPR *lanpr)
     // MEM_freeN(lanpr->render_buffer);
   }
 
-  LANPR_RenderBuffer *rb = MEM_callocN(sizeof(LANPR_RenderBuffer), "creating LANPR render buffer");
+  LANPR_RenderBuffer *rb = MEM_callocN(sizeof(LANPR_RenderBuffer), "LANPR render buffer");
 
   lanpr->render_buffer = rb;
   lanpr_share.render_buffer_shared = rb;



More information about the Bf-blender-cvs mailing list