From 16d8a683be4348b5c6eff48cbb16c7454863d9ea Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 14 May 2020 17:26:04 +0200 Subject: Fix T73984: unnecessary Cycles viewport updates with object texture coordinates Remove old code that added extra updates for shaders that have a dependency on objects. The dependency graph can now tell Cycles when a material is affected by an object transform. --- intern/cycles/blender/blender_shader.cpp | 3 +-- intern/cycles/blender/blender_sync.cpp | 15 --------------- intern/cycles/render/graph.h | 4 ---- intern/cycles/render/nodes.h | 8 -------- intern/cycles/render/osl.cpp | 5 ----- intern/cycles/render/shader.cpp | 2 -- intern/cycles/render/shader.h | 2 -- intern/cycles/render/svm.cpp | 5 ----- 8 files changed, 1 insertion(+), 43 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/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..8403a636e1c 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() 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 &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 */ -- cgit v1.2.3