Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorAntonio Vazquez <blendergit@gmail.com>2020-05-14 20:54:15 +0300
committerAntonio Vazquez <blendergit@gmail.com>2020-05-14 20:54:15 +0300
commit4ac748c0993f2555abc879c630a0efe893909fe3 (patch)
treefe1a34e2a94c3d775b11a201625e710ad2c71027 /intern
parentcc3d3a453e769a57399b1eae371d7bde9b67731c (diff)
parent5f31e5031cb8c65a3379cb7c309268fc6cececf3 (diff)
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/blender_shader.cpp3
-rw-r--r--intern/cycles/blender/blender_sync.cpp15
-rw-r--r--intern/cycles/render/graph.h4
-rw-r--r--intern/cycles/render/light.cpp22
-rw-r--r--intern/cycles/render/light.h5
-rw-r--r--intern/cycles/render/nodes.h8
-rw-r--r--intern/cycles/render/osl.cpp5
-rw-r--r--intern/cycles/render/shader.cpp10
-rw-r--r--intern/cycles/render/shader.h2
-rw-r--r--intern/cycles/render/svm.cpp5
10 files changed, 25 insertions, 54 deletions
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index edde1fd243e..7297ce829c5 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -1231,12 +1231,11 @@ void BlenderSync::sync_materials(BL::Depsgraph &b_depsgraph, bool update_all)
Shader *shader;
/* test if we need to sync */
- if (shader_map.add_or_update(&shader, b_mat) || shader->need_sync_object || update_all) {
+ if (shader_map.add_or_update(&shader, b_mat) || update_all) {
ShaderGraph *graph = new ShaderGraph();
shader->name = b_mat.name().c_str();
shader->pass_id = b_mat.pass_index();
- shader->need_sync_object = false;
/* create nodes */
if (b_mat.use_nodes() && b_mat.node_tree()) {
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 0c120b944a7..e8031be7dd1 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -85,8 +85,6 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d
/* Sync recalc flags from blender to cycles. Actual update is done separate,
* so we can do it later on if doing it immediate is not suitable. */
- bool has_updated_objects = b_depsgraph.id_type_updated(BL::DriverTarget::id_type_OBJECT);
-
if (experimental) {
/* Mark all meshes as needing to be exported again if dicing changed. */
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
@@ -189,19 +187,6 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d
if (viewport_parameters.modified(new_viewport_parameters)) {
world_recalc = true;
}
-
- /* Updates shader with object dependency if objects changed. */
- if (has_updated_objects) {
- if (scene->default_background->has_object_dependency) {
- world_recalc = true;
- }
-
- foreach (Shader *shader, scene->shaders) {
- if (shader->has_object_dependency) {
- shader->need_sync_object = true;
- }
- }
- }
}
void BlenderSync::sync_data(BL::RenderSettings &b_render,
diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h
index 0ea7935f714..febd7a76f03 100644
--- a/intern/cycles/render/graph.h
+++ b/intern/cycles/render/graph.h
@@ -204,10 +204,6 @@ class ShaderNode : public Node {
{
return false;
}
- virtual bool has_object_dependency()
- {
- return false;
- }
virtual bool has_attribute_dependency()
{
return false;
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 9adf8e5341a..cd19b03ac53 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -181,6 +181,7 @@ bool Light::has_contribution(Scene *scene)
LightManager::LightManager()
{
need_update = true;
+ need_update_background = true;
use_light_visibility = false;
}
@@ -901,7 +902,7 @@ void LightManager::device_update(Device *device,
VLOG(1) << "Total " << scene->lights.size() << " lights.";
- device_free(device, dscene);
+ device_free(device, dscene, need_update_background);
use_light_visibility = false;
@@ -915,9 +916,11 @@ void LightManager::device_update(Device *device,
if (progress.get_cancel())
return;
- device_update_background(device, dscene, scene, progress);
- if (progress.get_cancel())
- return;
+ if (need_update_background) {
+ device_update_background(device, dscene, scene, progress);
+ if (progress.get_cancel())
+ return;
+ }
device_update_ies(dscene);
if (progress.get_cancel())
@@ -929,14 +932,17 @@ void LightManager::device_update(Device *device,
}
need_update = false;
+ need_update_background = false;
}
-void LightManager::device_free(Device *, DeviceScene *dscene)
+void LightManager::device_free(Device *, DeviceScene *dscene, const bool free_background)
{
dscene->light_distribution.free();
dscene->lights.free();
- dscene->light_background_marginal_cdf.free();
- dscene->light_background_conditional_cdf.free();
+ if (free_background) {
+ dscene->light_background_marginal_cdf.free();
+ dscene->light_background_conditional_cdf.free();
+ }
dscene->ies_lights.free();
}
@@ -989,6 +995,7 @@ int LightManager::add_ies(const string &content)
ies_slots[slot]->hash = hash;
need_update = true;
+ need_update_background = true;
return slot;
}
@@ -1007,6 +1014,7 @@ 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 4f3048c1f32..1a99b2b76ae 100644
--- a/intern/cycles/render/light.h
+++ b/intern/cycles/render/light.h
@@ -88,6 +88,9 @@ class LightManager {
bool use_light_visibility;
bool need_update;
+ /* Need to update background (including multiple importance map) */
+ bool need_update_background;
+
LightManager();
~LightManager();
@@ -97,7 +100,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);
+ void device_free(Device *device, DeviceScene *dscene, const bool free_background = true);
void tag_update(Scene *scene);
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 8316fa3cf9b..83c3ad071ae 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -359,10 +359,6 @@ class PointDensityTextureNode : public ShaderNode {
{
return true;
}
- bool has_object_dependency()
- {
- return true;
- }
/* Parameters. */
ustring filename;
@@ -896,10 +892,6 @@ class TextureCoordinateNode : public ShaderNode {
{
return true;
}
- bool has_object_dependency()
- {
- return use_transform;
- }
float3 normal_osl;
bool from_dupli;
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp
index 06d832a29ca..5c62ae73e47 100644
--- a/intern/cycles/render/osl.cpp
+++ b/intern/cycles/render/osl.cpp
@@ -764,10 +764,6 @@ void OSLCompiler::add(ShaderNode *node, const char *name, bool isfilepath)
current_shader->has_volume_attribute_dependency = true;
}
- if (node->has_object_dependency()) {
- current_shader->has_object_dependency = true;
- }
-
if (node->has_integrator_dependency()) {
current_shader->has_integrator_dependency = true;
}
@@ -1142,7 +1138,6 @@ void OSLCompiler::compile(OSLGlobals *og, Shader *shader)
shader->has_surface_spatial_varying = false;
shader->has_volume_spatial_varying = false;
shader->has_volume_attribute_dependency = false;
- shader->has_object_dependency = false;
shader->has_integrator_dependency = false;
/* generate surface shader */
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 747fc58f81a..39ba45a751a 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -206,7 +206,6 @@ Shader::Shader() : Node(node_type)
has_surface_spatial_varying = false;
has_volume_spatial_varying = false;
has_volume_attribute_dependency = false;
- has_object_dependency = false;
has_integrator_dependency = false;
has_volume_connected = false;
prev_volume_step_rate = 0.0f;
@@ -218,7 +217,6 @@ Shader::Shader() : Node(node_type)
need_update = true;
need_update_geometry = true;
- need_sync_object = false;
}
Shader::~Shader()
@@ -320,9 +318,11 @@ 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->has_background_light(scene)) {
- scene->light_manager->need_update = true;
+ 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;
+ }
}
/* quick detection of which kind of shaders we have to avoid loading
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index 7801fd29276..993b467b396 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -98,7 +98,6 @@ class Shader : public Node {
/* synchronization */
bool need_update;
bool need_update_geometry;
- bool need_sync_object;
/* If the shader has only volume components, the surface is assumed to
* be transparent.
@@ -121,7 +120,6 @@ class Shader : public Node {
bool has_surface_spatial_varying;
bool has_volume_spatial_varying;
bool has_volume_attribute_dependency;
- bool has_object_dependency;
bool has_integrator_dependency;
/* displacement */
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index b4858f488c3..ea3dbaf8e03 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -448,10 +448,6 @@ void SVMCompiler::generate_node(ShaderNode *node, ShaderNodeSet &done)
current_shader->has_volume_attribute_dependency = true;
}
- if (node->has_object_dependency()) {
- current_shader->has_object_dependency = true;
- }
-
if (node->has_integrator_dependency()) {
current_shader->has_integrator_dependency = true;
}
@@ -863,7 +859,6 @@ void SVMCompiler::compile(Shader *shader, array<int4> &svm_nodes, int index, Sum
shader->has_surface_spatial_varying = false;
shader->has_volume_spatial_varying = false;
shader->has_volume_attribute_dependency = false;
- shader->has_object_dependency = false;
shader->has_integrator_dependency = false;
/* generate bump shader */