[Bf-blender-cvs] [dcb7d5bfff1] cycles_procedural_api: prepare ground for updating bvh arrays instead of recreating them

Kévin Dietrich noreply at git.blender.org
Fri Nov 6 18:48:01 CET 2020


Commit: dcb7d5bfff101062d25a0a8b7734db74e8e1609e
Author: Kévin Dietrich
Date:   Fri Nov 6 18:37:22 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rBdcb7d5bfff101062d25a0a8b7734db74e8e1609e

prepare ground for updating bvh arrays instead of recreating them

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

M	intern/cycles/device/device_memory.h
M	intern/cycles/render/geometry.cpp
M	intern/cycles/util/util_array.h

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

diff --git a/intern/cycles/device/device_memory.h b/intern/cycles/device/device_memory.h
index f1180ce58ee..084ec7b83b3 100644
--- a/intern/cycles/device/device_memory.h
+++ b/intern/cycles/device/device_memory.h
@@ -405,6 +405,19 @@ template<typename T> class device_vector : public device_memory {
     assert(device_pointer == 0);
   }
 
+  void give_data(array<T> &to)
+  {
+    device_free();
+
+    to.set_data((T *)host_pointer, data_size);
+    data_size = 0;
+    data_width = 0;
+    data_height = 0;
+    data_depth = 0;
+    host_pointer = 0;
+    assert(device_pointer == 0);
+  }
+
   /* Free device and host memory. */
   void free()
   {
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 8ed410c9388..b4dd4e01f04 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -1258,6 +1258,20 @@ void GeometryManager::device_update_bvh(Device *device,
       if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC) && bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) {
         bvh->refit(progress);
       }
+
+#if 0
+      PackedBVH &pack = bvh->pack;
+      dscene->bvh_nodes.give_data(pack.nodes);
+      dscene->bvh_leaf_nodes.give_data(pack.leaf_nodes);
+      dscene->object_node.give_data(pack.object_node);
+      dscene->prim_tri_index.give_data(pack.prim_tri_index);
+      dscene->prim_tri_verts.give_data(pack.prim_tri_verts);
+      dscene->prim_type.give_data(pack.prim_type);
+      dscene->prim_visibility.give_data(pack.prim_visibility);
+      dscene->prim_index.give_data(pack.prim_index);
+      dscene->prim_object.give_data(pack.prim_object);
+      dscene->prim_time.give_data(pack.prim_time);
+#endif
     }
 
     if (!bvh || (device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) {
diff --git a/intern/cycles/util/util_array.h b/intern/cycles/util/util_array.h
index ea481787018..73f7d6cf7f8 100644
--- a/intern/cycles/util/util_array.h
+++ b/intern/cycles/util/util_array.h
@@ -131,6 +131,14 @@ template<typename T, size_t alignment = MIN_ALIGNMENT_CPU_DATA_TYPES> class arra
     }
   }
 
+  void set_data(T *ptr_, size_t datasize)
+  {
+    clear();
+    data_ = ptr_;
+    datasize_ = datasize;
+    capacity_ = datasize;
+  }
+
   T *steal_pointer()
   {
     T *ptr = data_;



More information about the Bf-blender-cvs mailing list