[Bf-blender-cvs] [648c0538851] soc-2019-embree-gpu: Cycles: Improve convert time from Embree

MATILLAT Quentin noreply at git.blender.org
Tue Sep 17 16:06:59 CEST 2019


Commit: 648c0538851969a1e545891027b0a1c17b19e978
Author: MATILLAT Quentin
Date:   Tue Sep 17 15:52:45 2019 +0200
Branches: soc-2019-embree-gpu
https://developer.blender.org/rB648c0538851969a1e545891027b0a1c17b19e978

Cycles: Improve convert time from Embree

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

M	intern/cycles/bvh/bvh_embree_converter.cpp

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

diff --git a/intern/cycles/bvh/bvh_embree_converter.cpp b/intern/cycles/bvh/bvh_embree_converter.cpp
index ed6bc66d02b..eb63dfd2a62 100644
--- a/intern/cycles/bvh/bvh_embree_converter.cpp
+++ b/intern/cycles/bvh/bvh_embree_converter.cpp
@@ -360,6 +360,17 @@ BVHNode* BVHEmbreeConverter::getBVH4()
     This->setUnalignedBounds(Node, tr);
   };
 
+  param.expectedSize = [](unsigned int num_prim, unsigned int num_tri, void* userData) {
+    SET_THIS;
+    This->pack->prim_visibility.reserve(num_prim);
+    This->pack->prim_object.reserve(num_prim);
+    This->pack->prim_type.reserve(num_prim);
+    This->pack->prim_index.reserve(num_prim);
+    This->pack->prim_tri_index.reserve(num_prim);
+
+    This->pack->prim_tri_verts.reserve(num_tri);
+  };
+
   return reinterpret_cast<BVHNode *>(rtcExtractBVH(this->s, param, this));
 }
 
@@ -725,55 +736,12 @@ void pack_inner(const BVHStackEntry &e, const BVHStackEntry &c0, const BVHStackE
 }
 
 void BVHEmbreeConverter::fillPack(PackedBVH &pack) {
-  size_t num_prim = 0;
-  size_t num_tri = 0;
-
-  foreach (Object *ob, objects) {
-    if (params.top_level) {
-      if (!ob->is_traceable()) {
-        continue;
-      }
-      if (!ob->mesh->is_instanced()) {
-        if (params.primitive_mask & PRIMITIVE_ALL_TRIANGLE) {
-          num_prim += ob->mesh->num_triangles();
-          num_tri += ob->mesh->num_triangles();
-        }
-        if (params.primitive_mask & PRIMITIVE_ALL_CURVE) {
-          for (size_t j = 0; j < ob->mesh->num_curves(); ++j) {
-            num_prim += ob->mesh->get_curve(j).num_segments();
-          }
-        }
-      }
-      else {
-        ++num_prim;
-      }
-    }
-    else {
-      if (params.primitive_mask & PRIMITIVE_ALL_TRIANGLE && ob->mesh->num_triangles() > 0) {
-        num_prim += ob->mesh->num_triangles();
-        num_tri += ob->mesh->num_triangles();
-      }
-      if (params.primitive_mask & PRIMITIVE_ALL_CURVE) {
-        for (size_t j = 0; j < ob->mesh->num_curves(); ++j) {
-          num_prim += ob->mesh->get_curve(j).num_segments();
-        }
-      }
-    }
-  }
-
   pack.prim_visibility.clear();
-  pack.prim_visibility.reserve(num_prim);
   pack.prim_object.clear();
-  pack.prim_object.reserve(num_prim);
   pack.prim_type.clear();
-  pack.prim_type.reserve(num_prim);
   pack.prim_index.clear();
-  pack.prim_index.reserve(num_prim);
   pack.prim_tri_index.clear();
-  pack.prim_tri_index.reserve(num_prim);
-
   pack.prim_tri_verts.clear();
-  pack.prim_tri_index.reserve(3 * num_tri);
 
   this->pack = &pack;



More information about the Bf-blender-cvs mailing list