[Bf-blender-cvs] [24ccacd3c9b] cycles_procedural_api: apply changes and fixes from optimization branch

Kévin Dietrich noreply at git.blender.org
Mon Nov 16 13:11:22 CET 2020


Commit: 24ccacd3c9bf2cf03d7c860cb48b0b8067997f3b
Author: Kévin Dietrich
Date:   Wed Nov 11 17:56:51 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB24ccacd3c9bf2cf03d7c860cb48b0b8067997f3b

apply changes and fixes from optimization branch

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

M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/render/geometry.cpp
M	intern/cycles/render/integrator.cpp
M	intern/cycles/render/light.cpp
M	intern/cycles/render/object.cpp

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

diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 7f7ec17cb38..8b8f1579ab7 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -306,11 +306,6 @@ void BlenderSync::sync_integrator()
   integrator->set_sample_clamp_direct(get_float(cscene, "sample_clamp_direct"));
   integrator->set_sample_clamp_indirect(get_float(cscene, "sample_clamp_indirect"));
   if (!preview) {
-    if (integrator->get_motion_blur() != r.use_motion_blur()) {
-      scene->object_manager->tag_update(scene, MOTION_BLUR_MODIFIED);
-      scene->camera->tag_modified();
-    }
-
     integrator->set_motion_blur(r.use_motion_blur());
   }
 
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 3ff952e81ab..16049f0be3b 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -1247,27 +1247,28 @@ void GeometryManager::device_update_bvh(Device *device,
     if (bvh) {
       bvh->pack = {};
 
-      if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC) &&
-          bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) {
-        bvh->refit(progress);
-      }
-
+      if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) {
+        if (bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) {
+          std::cerr << "Tag BVH for refit\n";
+          bvh->refit(progress);
+        }
 #if 1
-      PackedBVH &pack = bvh->pack;
-      dscene->prim_tri_verts.give_data(pack.prim_tri_verts);
+        PackedBVH &pack = bvh->pack;
+        dscene->prim_tri_verts.give_data(pack.prim_tri_verts);
 #else
-      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);
+        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)) {
@@ -1723,7 +1724,9 @@ void GeometryManager::device_update(Device *device,
       return;
   }
 
-  bool need_update_scene_bvh = false;
+  /* update the bvh even when there is no geometry so the bvh data in the kernel is still valid,
+   * especially when removing all the objects in interactive rendering */
+  bool need_update_scene_bvh = scene->geometry.size() == 0;
   {
     scoped_callback_timer timer([scene](double time) {
       if (scene->update_stats) {
diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp
index e43ea89e1b2..0461cfec62d 100644
--- a/intern/cycles/render/integrator.cpp
+++ b/intern/cycles/render/integrator.cpp
@@ -17,9 +17,11 @@
 #include "render/integrator.h"
 #include "device/device.h"
 #include "render/background.h"
+#include "render/camera.h"
 #include "render/film.h"
 #include "render/jitter.h"
 #include "render/light.h"
+#include "render/object.h"
 #include "render/scene.h"
 #include "render/shader.h"
 #include "render/sobol.h"
@@ -298,6 +300,11 @@ void Integrator::tag_update(Scene *scene, UpdateFlags flag)
       }
     }
   }
+
+  if (motion_blur_is_modified()) {
+    scene->object_manager->tag_update(scene, MOTION_BLUR_MODIFIED);
+    scene->camera->tag_modified();
+  }
 }
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 4bd226d2cdb..b4490e51f03 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -1118,7 +1118,7 @@ void LightManager::remove_ies(int slot)
   /* If the slot has no more users, update the device to remove it. */
   if (ies_slots[slot]->users == 0) {
     update_flags |= UPDATE_ALL;
-    need_update_background |= need_update();
+    need_update_background = true;
   }
 }
 
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index e013114c42e..6e9f07e1936 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -745,8 +745,6 @@ void ObjectManager::device_update(Device *device,
   foreach (Object *object, scene->objects) {
     object->clear_modified();
   }
-
-  update_flags = UPDATE_NONE;
 }
 
 void ObjectManager::device_update_flags(
@@ -903,7 +901,9 @@ void ObjectManager::device_free(Device *, DeviceScene *dscene)
   dscene->object_volume_step.free();
 }
 
-void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress &progress)
+void ObjectManager::apply_static_transforms(DeviceScene * /*dscene*/,
+                                            Scene *scene,
+                                            Progress &progress)
 {
   /* todo: normals and displacement should be done before applying transform! */
   /* todo: create objects/geometry in right order! */
@@ -927,8 +927,6 @@ void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, P
   if (progress.get_cancel())
     return;
 
-  uint *object_flag = dscene->object_flag.data();
-
   /* apply transforms for objects with single user geometry */
   foreach (Object *object, scene->objects) {
     /* Annoying feedback loop here: we can't use is_instanced() because



More information about the Bf-blender-cvs mailing list