[Bf-blender-cvs] [9115b3bd289] cycles_procedural_api: pass a flag to Integrator::tag_update to specify what the tagging is for, cleanup calls to it

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


Commit: 9115b3bd28983b4a9abbab24c031bede609637e1
Author: Kévin Dietrich
Date:   Fri Nov 6 09:34:53 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB9115b3bd28983b4a9abbab24c031bede609637e1

pass a flag to Integrator::tag_update to specify what the tagging is for, cleanup calls to it

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

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/render/background.cpp
M	intern/cycles/render/bake.cpp
M	intern/cycles/render/film.cpp
M	intern/cycles/render/integrator.cpp
M	intern/cycles/render/integrator.h
M	intern/cycles/render/scene.cpp
M	intern/cycles/render/session.cpp

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 230edb5eb53..d4c0041e080 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -550,7 +550,6 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_)
       int seed = scene->integrator->get_seed();
       seed += hash_uint2(seed, hash_uint2(view_index * 0xdeadbeef, 0));
       scene->integrator->set_seed(seed);
-      scene->integrator->tag_update(scene);
     }
 
     /* Update number of samples per layer. */
@@ -1114,10 +1113,6 @@ void BlenderSession::update_resumable_tile_manager(int num_samples)
 
   scene->integrator->set_start_sample(rounded_range_start_sample);
 
-  if (scene->integrator->is_modified()) {
-    scene->integrator->tag_update(scene);
-  }
-
   session->tile_manager.range_start_sample = rounded_range_start_sample;
   session->tile_manager.range_num_samples = rounded_range_num_samples;
 }
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 18dc5b15949..c3764ac5365 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -377,8 +377,7 @@ void BlenderSync::sync_integrator()
     integrator->set_ao_bounces(0);
   }
 
-  if (integrator->is_modified())
-    integrator->tag_update(scene);
+  integrator->tag_update(scene, 0);
 }
 
 /* Film */
@@ -731,7 +730,7 @@ vector<Pass> BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay,
 
   scene->film->set_pass_alpha_threshold(b_view_layer.pass_alpha_threshold());
   scene->film->tag_passes_update(scene, passes);
-  scene->integrator->tag_update(scene);
+  scene->integrator->tag_update(scene, 0);
 
   return passes;
 }
diff --git a/intern/cycles/render/background.cpp b/intern/cycles/render/background.cpp
index 1002ab9ae33..1303f894912 100644
--- a/intern/cycles/render/background.cpp
+++ b/intern/cycles/render/background.cpp
@@ -130,8 +130,8 @@ void Background::device_free(Device * /*device*/, DeviceScene * /*dscene*/)
 
 void Background::tag_update(Scene *scene)
 {
-  if (is_modified()) {
-    scene->integrator->tag_update(scene);
+  if (ao_factor_is_modified() || use_ao_is_modified()) {
+    scene->integrator->tag_update(scene, Integrator::BACKGROUND_AO_MODIFIED);
   }
 }
 
diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp
index 439ebdedb8e..d81f06e49e2 100644
--- a/intern/cycles/render/bake.cpp
+++ b/intern/cycles/render/bake.cpp
@@ -114,7 +114,7 @@ void BakeManager::set(Scene *scene,
 
   /* create device and update scene */
   scene->film->tag_modified();
-  scene->integrator->tag_update(scene);
+  scene->integrator->tag_update(scene, 0);
 
   need_update = true;
 }
diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index f6e0b3a8502..9b7657802d6 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -697,7 +697,7 @@ void Film::tag_passes_update(Scene *scene, const vector<Pass> &passes_, bool upd
     scene->geometry_manager->tag_update(scene, GeometryManager::MOTION_PASS_NEEDED);
   }
   else if (Pass::contains(scene->passes, PASS_AO) != Pass::contains(passes_, PASS_AO)) {
-    scene->integrator->tag_update(scene);
+    scene->integrator->tag_update(scene, Integrator::AO_PASS_MODIFIED);
   }
 
   if (update_passes) {
diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp
index b5a10ec6c03..50775b1d08b 100644
--- a/intern/cycles/render/integrator.cpp
+++ b/intern/cycles/render/integrator.cpp
@@ -278,8 +278,13 @@ void Integrator::device_free(Device *, DeviceScene *dscene)
   dscene->sample_pattern_lut.free();
 }
 
-void Integrator::tag_update(Scene *scene)
+void Integrator::tag_update(Scene *scene, uint32_t flag)
 {
+  if (flag & (AO_PASS_MODIFIED | BACKGROUND_AO_MODIFIED)) {
+    /* tag only the ao_bounces socket as modified so we avoid updating sample_pattern_lut unnecessarily */
+    tag_ao_bounces_modified();
+  }
+
   if (filter_glossy_is_modified()) {
     foreach (Shader *shader, scene->shaders) {
       if (shader->has_integrator_dependency) {
@@ -288,7 +293,6 @@ void Integrator::tag_update(Scene *scene)
       }
     }
   }
-  //tag_modified();
 }
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/integrator.h b/intern/cycles/render/integrator.h
index 9fe46ad591c..cadc259783f 100644
--- a/intern/cycles/render/integrator.h
+++ b/intern/cycles/render/integrator.h
@@ -89,13 +89,18 @@ class Integrator : public Node {
 
   NODE_SOCKET_API(SamplingPattern, sampling_pattern)
 
+  enum {
+    AO_PASS_MODIFIED = (1 << 0),
+    BACKGROUND_AO_MODIFIED = (1 << 1),
+  };
+
   Integrator();
   ~Integrator();
 
   void device_update(Device *device, DeviceScene *dscene, Scene *scene);
   void device_free(Device *device, DeviceScene *dscene);
 
-  void tag_update(Scene *scene);
+  void tag_update(Scene *scene, uint32_t flag);
 };
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp
index bd9962e3a5c..7cbd4411cf4 100644
--- a/intern/cycles/render/scene.cpp
+++ b/intern/cycles/render/scene.cpp
@@ -477,8 +477,11 @@ void Scene::reset()
   camera->tag_modified();
   dicing_camera->tag_modified();
   film->tag_modified();
+  background->tag_modified();
+  integrator->tag_modified();
+
   background->tag_update(this);
-  integrator->tag_update(this);
+  integrator->tag_update(this, 0);
   object_manager->tag_update(this);
   geometry_manager->tag_update(this, GeometryManager::UPDATE_ALL);
   light_manager->tag_update(this);
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index a60542259f6..d6db51f9cda 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -1016,13 +1016,7 @@ bool Session::update_scene()
   BakeManager *bake_manager = scene->bake_manager;
 
   if (integrator->get_sampling_pattern() != SAMPLING_PATTERN_SOBOL || bake_manager->get_baking()) {
-    int aa_samples = tile_manager.num_samples;
-
-    integrator->set_aa_samples(aa_samples);
-
-    if (integrator->is_modified()) {
-      integrator->tag_update(scene);
-    }
+    integrator->set_aa_samples(tile_manager.num_samples);
   }
 
   bool kernel_switch_needed = false;



More information about the Bf-blender-cvs mailing list