[Bf-blender-cvs] [40e143989bd] cycles_procedural_api: encapsulate the need_update member of every manager

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


Commit: 40e143989bd4351f872928cd681aecd4ece29fe2
Author: Kévin Dietrich
Date:   Tue Nov 10 13:08:17 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB40e143989bd4351f872928cd681aecd4ece29fe2

encapsulate the need_update member of every manager

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

M	intern/cycles/blender/blender_particles.cpp
M	intern/cycles/render/bake.cpp
M	intern/cycles/render/bake.h
M	intern/cycles/render/geometry.cpp
M	intern/cycles/render/geometry.h
M	intern/cycles/render/image.cpp
M	intern/cycles/render/image.h
M	intern/cycles/render/light.cpp
M	intern/cycles/render/light.h
M	intern/cycles/render/object.cpp
M	intern/cycles/render/object.h
M	intern/cycles/render/osl.cpp
M	intern/cycles/render/particles.cpp
M	intern/cycles/render/particles.h
M	intern/cycles/render/scene.cpp
M	intern/cycles/render/shader.cpp
M	intern/cycles/render/shader.h
M	intern/cycles/render/svm.cpp
M	intern/cycles/render/tables.cpp
M	intern/cycles/render/tables.h

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

diff --git a/intern/cycles/blender/blender_particles.cpp b/intern/cycles/blender/blender_particles.cpp
index 4a5dea8d131..d5dd7215c47 100644
--- a/intern/cycles/blender/blender_particles.cpp
+++ b/intern/cycles/blender/blender_particles.cpp
@@ -57,7 +57,7 @@ bool BlenderSync::sync_dupli_particle(BL::Object &b_ob,
 
   /* no update needed? */
   if (!need_update && !object->get_geometry()->is_modified() &&
-      !scene->object_manager->need_update)
+      !scene->object_manager->need_update())
     return true;
 
   /* first time used in this sync loop? clear and tag update */
diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp
index d81f06e49e2..a490fc361f5 100644
--- a/intern/cycles/render/bake.cpp
+++ b/intern/cycles/render/bake.cpp
@@ -78,7 +78,7 @@ BakeManager::BakeManager()
   type = SHADER_EVAL_BAKE;
   pass_filter = 0;
 
-  need_update = true;
+  need_update_ = true;
 }
 
 BakeManager::~BakeManager()
@@ -116,7 +116,7 @@ void BakeManager::set(Scene *scene,
   scene->film->tag_modified();
   scene->integrator->tag_update(scene, 0);
 
-  need_update = true;
+  need_update_ = true;
 }
 
 void BakeManager::device_update(Device * /*device*/,
@@ -124,7 +124,7 @@ void BakeManager::device_update(Device * /*device*/,
                                 Scene *scene,
                                 Progress & /* progress */)
 {
-  if (!need_update)
+  if (!need_update())
     return;
 
   scoped_callback_timer timer([scene](double time) {
@@ -152,11 +152,21 @@ void BakeManager::device_update(Device * /*device*/,
     object_index++;
   }
 
-  need_update = false;
+  need_update_ = false;
 }
 
 void BakeManager::device_free(Device * /*device*/, DeviceScene * /*dscene*/)
 {
 }
 
+void BakeManager::tag_update()
+{
+  need_update_ = true;
+}
+
+bool BakeManager::need_update() const
+{
+  return need_update_;
+}
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/bake.h b/intern/cycles/render/bake.h
index 93e664c2ab1..655b9b1cf7e 100644
--- a/intern/cycles/render/bake.h
+++ b/intern/cycles/render/bake.h
@@ -36,9 +36,12 @@ class BakeManager {
   void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress);
   void device_free(Device *device, DeviceScene *dscene);
 
-  bool need_update;
+  void tag_update();
+
+  bool need_update() const;
 
  private:
+  bool need_update_;
   ShaderEvalType type;
   int pass_filter;
   std::string object_name;
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index bd9655b47b9..f49c421df60 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -274,15 +274,14 @@ void Geometry::tag_update(Scene *scene, bool rebuild)
     }
   }
 
-  scene->geometry_manager->need_update = true;
-  scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MODIFIED);
+  scene->geometry_manager->tag_update(scene, GeometryManager::GEOMETRY_MODIFIED);
 }
 
 /* Geometry Manager */
 
 GeometryManager::GeometryManager()
 {
-  need_update = true;
+  update_flags = UPDATE_ALL;
   need_flags_update = true;
   bvh = nullptr;
 }
@@ -1348,7 +1347,7 @@ void GeometryManager::device_update_bvh(Device *device,
 
 void GeometryManager::device_update_preprocess(Device *device, Scene *scene, Progress &progress)
 {
-  if (!need_update && !need_flags_update) {
+  if (!need_update() && !need_flags_update) {
     return;
   }
 
@@ -1434,10 +1433,6 @@ void GeometryManager::device_update_preprocess(Device *device, Scene *scene, Pro
     device_update_flags |= DEVICE_CURVE_DATA_NEEDS_REALLOC;
   }
 
-  if (device_update_flags != 0) {
-    need_update = true;
-  }
-
   need_flags_update = false;
 }
 
@@ -1520,7 +1515,7 @@ void GeometryManager::device_update(Device *device,
                                     Scene *scene,
                                     Progress &progress)
 {
-  if (!need_update)
+  if (!need_update())
     return;
 
   VLOG(1) << "Total " << scene->geometry.size() << " meshes.";
@@ -1806,7 +1801,6 @@ void GeometryManager::device_update(Device *device,
     }
   }
 
-  need_update = false;
   update_flags = 0;
 
   if (true_displacement_used) {
@@ -1901,8 +1895,15 @@ void GeometryManager::device_free(Device *device, DeviceScene *dscene)
 void GeometryManager::tag_update(Scene *scene, uint32_t flag)
 {
   update_flags |= flag;
-  need_update = true;
-  scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MANAGER);
+
+  if ((flag & OBJECT_MANAGER) == 0) {
+    scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MANAGER);
+  }
+}
+
+bool GeometryManager::need_update() const
+{
+  return update_flags != 0;
 }
 
 void GeometryManager::collect_statistics(const Scene *scene, RenderStats *stats)
diff --git a/intern/cycles/render/geometry.h b/intern/cycles/render/geometry.h
index 4d872369767..00eff781e7d 100644
--- a/intern/cycles/render/geometry.h
+++ b/intern/cycles/render/geometry.h
@@ -191,12 +191,14 @@ class GeometryManager {
     HAIR_REMOVED = (1 << 3),
     UV_PASS_NEEDED = (1 << 4),
     MOTION_PASS_NEEDED = (1 << 5),
+    SHADER_ATTRIBUTE_MODIFIED = (1 << 6),
+    OBJECT_MANAGER = (1 << 7),
+    GEOMETRY_MODIFIED = (1 << 8),
 
     UPDATE_ALL = ~0u,
   };
 
   /* Update Flags */
-  bool need_update;
   bool need_flags_update;
 
   /* Constructor/Destructor */
@@ -211,6 +213,8 @@ class GeometryManager {
   /* Updates */
   void tag_update(Scene *scene, uint32_t flag);
 
+  bool need_update() const;
+
   /* Statistics */
   void collect_statistics(const Scene *scene, RenderStats *stats);
 
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index 3e6ff289c85..c90d8a2b49d 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -298,7 +298,7 @@ bool ImageLoader::is_vdb_loader() const
 
 ImageManager::ImageManager(const DeviceInfo &info)
 {
-  need_update = true;
+  need_update_ = true;
   osl_texture_system = NULL;
   animation_frame = 0;
 
@@ -451,7 +451,7 @@ int ImageManager::add_image_slot(ImageLoader *loader,
 
   images[slot] = img;
 
-  need_update = true;
+  need_update_ = true;
 
   return slot;
 }
@@ -478,7 +478,7 @@ void ImageManager::remove_image_user(int slot)
    * the reasons for this is that on shader changes we add and remove nodes
    * that use them, but we do not want to reload the image all the time. */
   if (image->users == 0)
-    need_update = true;
+    need_update_ = true;
 }
 
 static bool image_associate_alpha(ImageManager::Image *img)
@@ -810,7 +810,7 @@ void ImageManager::device_free_image(Device *, int slot)
 
 void ImageManager::device_update(Device *device, Scene *scene, Progress &progress)
 {
-  if (!need_update) {
+  if (!need_update()) {
     return;
   }
 
@@ -834,7 +834,7 @@ void ImageManager::device_update(Device *device, Scene *scene, Progress &progres
 
   pool.wait_work();
 
-  need_update = false;
+  need_update_ = false;
 }
 
 void ImageManager::device_update_slot(Device *device, Scene *scene, int slot, Progress *progress)
@@ -854,7 +854,7 @@ void ImageManager::device_load_builtin(Device *device, Scene *scene, Progress &p
 {
   /* Load only builtin images, Blender needs this to load evaluated
    * scene data from depsgraph before it is freed. */
-  if (!need_update) {
+  if (!need_update()) {
     return;
   }
 
@@ -896,4 +896,14 @@ void ImageManager::collect_statistics(RenderStats *stats)
   }
 }
 
+void ImageManager::tag_update()
+{
+  need_update_ = true;
+}
+
+bool ImageManager::need_update() const
+{
+  return need_update_;
+}
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
index 6ac1db9ed63..c802521db56 100644
--- a/intern/cycles/render/image.h
+++ b/intern/cycles/render/image.h
@@ -189,7 +189,9 @@ class ImageManager {
 
   void collect_statistics(RenderStats *stats);
 
-  bool need_update;
+  void tag_update();
+
+  bool need_update() const;
 
   struct Image {
     ImageParams params;
@@ -209,6 +211,7 @@ class ImageManager {
   };
 
  private:
+  bool need_update_;
   bool has_half_images;
 
   thread_mutex device_mutex;
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 4b34bf958d7..5ff4705d6cd 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -185,7 +185,7 @@ bool Light::has_contribution(Scene *scene)
 
 LightManager::LightManager()
 {
-  need_update = true;
+  update_flags = UPDATE_ALL;
   need_update_background = true;
   use_light_visibility = false;
   last_background_enabled = false;
@@ -962,7 +962,7 @@ void LightManager::device_update(Device *device,
                                  Scene *scene,
                                  Progress &progress)
 {
-  if (!need_update)
+  if (!need_update())
     return;
 
   scoped_callback_timer timer([scene](double time) {
@@ -1000,7 +1000,7 @@ void LightManager::device_update(Device *device,
 
   scene->film->set_use_light_visibility(use_light_visibility);
 
-  need_update = false;
+  update_flags = 0;
   need_update_background = false;
 }
 
@@ -1017,7 +1017,12 @@ void LightManager::device_free(Device *, DeviceScene *dscene, const bool free_ba
 
 void LightManager::tag_update(Scene * /*scene*/, uint32_t /*flag*/)
 {
-  need_update = true;
+  update_flags |= UPDATE_ALL;
+}
+
+bool LightManager::need_update() const
+{
+  return update_flags != 0;
 }
 
 int LightManager::add_ies_from_file(const string &filename)
@@ -1063,7 +1068,7 @@ int LightManager::add_ies(const string &content)
   ies_slots[slot]->users = 1;
   ies_slots[slot]->hash = hash;
 
-  need_update = true;
+  update_flags = UPDATE_ALL;
   need_update_background = true;
 
   return slot;
@@ -1082,8 +1087,10 @@ void LightManager::remove_ies(int slot)
   ies_slots[slot]->users--;
 
   /* If the slot has no more users, update the device to remove it. */
-  need_update |= (ies_slots[slot]->users == 0);
-  need_update_background |= need_update;
+  if (ies_slots[slot]->users == 0) {
+    update_flags |= UPDATE_ALL;
+    need_update_background |= need_update();
+  }
 }
 
 void LightManager::device_update_ies(DeviceScene *dscene)
diff --git a/intern/cycles/render/light.h b/intern/cycles/render/light.h
index 1f0ca50cad4..c32eee0f53b 100644
--- a/intern/cycles/render/light.h
+++ b/inte

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list