[Bf-blender-cvs] [52cc412e0f5] blender-v2.83-release: Revert "Fix T63588: Cycles unnecessarily updates background importance sampling map"

Brecht Van Lommel noreply at git.blender.org
Tue Jun 2 19:45:32 CEST 2020


Commit: 52cc412e0f56f249d932e1025ea191939c1a6edb
Author: Brecht Van Lommel
Date:   Tue Jun 2 18:44:43 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rB52cc412e0f56f249d932e1025ea191939c1a6edb

Revert "Fix T63588: Cycles unnecessarily updates background importance sampling map"

This reverts commit 33ce0cb5a1edea4b5aaa7d37f6ad74b3b35b95f8.

Fix T77273: crash enabling portal lights. The optimization for background
updates can be added back later for 2.90 and 2.83.1.

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

M	intern/cycles/render/light.cpp
M	intern/cycles/render/light.h
M	intern/cycles/render/shader.cpp

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

diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index cd19b03ac53..9adf8e5341a 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -181,7 +181,6 @@ bool Light::has_contribution(Scene *scene)
 LightManager::LightManager()
 {
   need_update = true;
-  need_update_background = true;
   use_light_visibility = false;
 }
 
@@ -902,7 +901,7 @@ void LightManager::device_update(Device *device,
 
   VLOG(1) << "Total " << scene->lights.size() << " lights.";
 
-  device_free(device, dscene, need_update_background);
+  device_free(device, dscene);
 
   use_light_visibility = false;
 
@@ -916,11 +915,9 @@ void LightManager::device_update(Device *device,
   if (progress.get_cancel())
     return;
 
-  if (need_update_background) {
-    device_update_background(device, dscene, scene, progress);
-    if (progress.get_cancel())
-      return;
-  }
+  device_update_background(device, dscene, scene, progress);
+  if (progress.get_cancel())
+    return;
 
   device_update_ies(dscene);
   if (progress.get_cancel())
@@ -932,17 +929,14 @@ void LightManager::device_update(Device *device,
   }
 
   need_update = false;
-  need_update_background = false;
 }
 
-void LightManager::device_free(Device *, DeviceScene *dscene, const bool free_background)
+void LightManager::device_free(Device *, DeviceScene *dscene)
 {
   dscene->light_distribution.free();
   dscene->lights.free();
-  if (free_background) {
-    dscene->light_background_marginal_cdf.free();
-    dscene->light_background_conditional_cdf.free();
-  }
+  dscene->light_background_marginal_cdf.free();
+  dscene->light_background_conditional_cdf.free();
   dscene->ies_lights.free();
 }
 
@@ -995,7 +989,6 @@ int LightManager::add_ies(const string &content)
   ies_slots[slot]->hash = hash;
 
   need_update = true;
-  need_update_background = true;
 
   return slot;
 }
@@ -1014,7 +1007,6 @@ void LightManager::remove_ies(int slot)
 
   /* 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;
 }
 
 void LightManager::device_update_ies(DeviceScene *dscene)
diff --git a/intern/cycles/render/light.h b/intern/cycles/render/light.h
index 1a99b2b76ae..4f3048c1f32 100644
--- a/intern/cycles/render/light.h
+++ b/intern/cycles/render/light.h
@@ -88,9 +88,6 @@ class LightManager {
   bool use_light_visibility;
   bool need_update;
 
-  /* Need to update background (including multiple importance map) */
-  bool need_update_background;
-
   LightManager();
   ~LightManager();
 
@@ -100,7 +97,7 @@ class LightManager {
   void remove_ies(int slot);
 
   void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress);
-  void device_free(Device *device, DeviceScene *dscene, const bool free_background = true);
+  void device_free(Device *device, DeviceScene *dscene);
 
   void tag_update(Scene *scene);
 
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 39ba45a751a..8403a636e1c 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -318,11 +318,9 @@ void Shader::tag_update(Scene *scene)
    * has use_mis set to false. We are quite close to release now, so
    * better to be safe.
    */
-  if (this == scene->background->get_shader(scene)) {
-    scene->light_manager->need_update_background = true;
-    if (scene->light_manager->has_background_light(scene)) {
-      scene->light_manager->need_update = true;
-    }
+  if (this == scene->background->get_shader(scene) &&
+      scene->light_manager->has_background_light(scene)) {
+    scene->light_manager->need_update = true;
   }
 
   /* quick detection of which kind of shaders we have to avoid loading



More information about the Bf-blender-cvs mailing list