[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