[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