[Bf-blender-cvs] [0b07c2c8a25] master: Code cleanup: remove copy of shader graph for bump, no longer needed.

Brecht Van Lommel noreply at git.blender.org
Sun Aug 20 17:17:08 CEST 2017


Commit: 0b07c2c8a254295dfdd3d051c6e84d36a0a3cc30
Author: Brecht Van Lommel
Date:   Sun Aug 20 14:02:16 2017 +0200
Branches: master
https://developer.blender.org/rB0b07c2c8a254295dfdd3d051c6e84d36a0a3cc30

Code cleanup: remove copy of shader graph for bump, no longer needed.

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

M	intern/cycles/render/graph.cpp
M	intern/cycles/render/graph.h
M	intern/cycles/render/osl.cpp
M	intern/cycles/render/shader.cpp
M	intern/cycles/render/shader.h
M	intern/cycles/render/svm.cpp
M	intern/cycles/render/svm.h

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

diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp
index 2d810ff664f..41e7e0205b0 100644
--- a/intern/cycles/render/graph.cpp
+++ b/intern/cycles/render/graph.cpp
@@ -221,28 +221,6 @@ OutputNode *ShaderGraph::output()
 	return (OutputNode*)nodes.front();
 }
 
-ShaderGraph *ShaderGraph::copy()
-{
-	ShaderGraph *newgraph = new ShaderGraph();
-
-	/* copy nodes */
-	ShaderNodeSet nodes_all;
-	foreach(ShaderNode *node, nodes)
-		nodes_all.insert(node);
-
-	ShaderNodeMap nodes_copy;
-	copy_nodes(nodes_all, nodes_copy);
-
-	/* add nodes (in same order, so output is still first) */
-	newgraph->clear_nodes();
-	foreach(ShaderNode *node, nodes)
-		newgraph->add(nodes_copy[node]);
-
-	newgraph->simplified = simplified;
-
-	return newgraph;
-}
-
 void ShaderGraph::connect(ShaderOutput *from, ShaderInput *to)
 {
 	assert(!finalized);
diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h
index 72e391991a7..20ce8195093 100644
--- a/intern/cycles/render/graph.h
+++ b/intern/cycles/render/graph.h
@@ -245,8 +245,6 @@ public:
 	ShaderGraph();
 	~ShaderGraph();
 
-	ShaderGraph *copy();
-
 	ShaderNode *add(ShaderNode *node);
 	OutputNode *output();
 
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp
index c337079b09f..8fca3ebac70 100644
--- a/intern/cycles/render/osl.cpp
+++ b/intern/cycles/render/osl.cpp
@@ -1091,21 +1091,14 @@ void OSLCompiler::compile(Scene *scene, OSLGlobals *og, Shader *shader)
 		ShaderGraph *graph = shader->graph;
 		ShaderNode *output = (graph)? graph->output(): NULL;
 
-		/* copy graph for shader with bump mapping */
-		if(output->input("Surface")->link && output->input("Displacement")->link)
-			if(!shader->graph_bump)
-				shader->graph_bump = shader->graph->copy();
+		bool has_bump = (shader->displacement_method != DISPLACE_TRUE) &&
+		                output->input("Surface")->link && output->input("Displacement")->link;
 
 		/* finalize */
 		shader->graph->finalize(scene,
-		                        false,
-		                        shader->has_integrator_dependency);
-		if(shader->graph_bump) {
-			shader->graph_bump->finalize(scene,
-			                             true,
-			                             shader->has_integrator_dependency,
-			                             shader->displacement_method == DISPLACE_BOTH);
-		}
+		                        has_bump,
+		                        shader->has_integrator_dependency,
+		                        shader->displacement_method == DISPLACE_BOTH);
 
 		current_shader = shader;
 
@@ -1113,7 +1106,8 @@ void OSLCompiler::compile(Scene *scene, OSLGlobals *og, Shader *shader)
 		shader->has_surface_emission = false;
 		shader->has_surface_transparent = false;
 		shader->has_surface_bssrdf = false;
-		shader->has_bssrdf_bump = false;
+		shader->has_bump = has_bump;
+		shader->has_bssrdf_bump = has_bump;
 		shader->has_volume = false;
 		shader->has_displacement = false;
 		shader->has_surface_spatial_varying = false;
@@ -1125,8 +1119,8 @@ void OSLCompiler::compile(Scene *scene, OSLGlobals *og, Shader *shader)
 		if(shader->used && graph && output->input("Surface")->link) {
 			shader->osl_surface_ref = compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
 
-			if(shader->graph_bump && shader->displacement_method != DISPLACE_TRUE)
-				shader->osl_surface_bump_ref = compile_type(shader, shader->graph_bump, SHADER_TYPE_BUMP);
+			if(has_bump)
+				shader->osl_surface_bump_ref = compile_type(shader, shader->graph, SHADER_TYPE_BUMP);
 			else
 				shader->osl_surface_bump_ref = OSL::ShaderGroupRef();
 
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 493e01de363..86378dfb495 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -177,7 +177,6 @@ Shader::Shader()
 	pass_id = 0;
 
 	graph = NULL;
-	graph_bump = NULL;
 
 	has_surface = false;
 	has_surface_transparent = false;
@@ -185,6 +184,7 @@ Shader::Shader()
 	has_surface_bssrdf = false;
 	has_volume = false;
 	has_displacement = false;
+	has_bump = false;
 	has_bssrdf_bump = false;
 	has_surface_spatial_varying = false;
 	has_volume_spatial_varying = false;
@@ -204,7 +204,6 @@ Shader::Shader()
 Shader::~Shader()
 {
 	delete graph;
-	delete graph_bump;
 }
 
 bool Shader::is_constant_emission(float3 *emission)
@@ -239,9 +238,7 @@ void Shader::set_graph(ShaderGraph *graph_)
 
 	/* assign graph */
 	delete graph;
-	delete graph_bump;
 	graph = graph_;
-	graph_bump = NULL;
 
 	/* Store info here before graph optimization to make sure that
 	 * nodes that get optimized away still count. */
@@ -458,15 +455,11 @@ void ShaderManager::device_update_common(Device *device,
 			flag |= SD_VOLUME_MIS;
 		if(shader->volume_interpolation_method == VOLUME_INTERPOLATION_CUBIC)
 			flag |= SD_VOLUME_CUBIC;
-		if(shader->graph_bump)
+		if(shader->has_bump)
 			flag |= SD_HAS_BUMP;
 		if(shader->displacement_method != DISPLACE_BUMP)
 			flag |= SD_HAS_DISPLACEMENT;
 
-		/* shader with bump mapping */
-		if(shader->displacement_method != DISPLACE_TRUE && shader->graph_bump)
-			flag |= SD_HAS_BSSRDF_BUMP;
-
 		/* constant emission check */
 		float3 constant_emission = make_float3(0.0f, 0.0f, 0.0f);
 		if(shader->is_constant_emission(&constant_emission))
@@ -608,11 +601,6 @@ void ShaderManager::get_requested_features(Scene *scene,
 		Shader *shader = scene->shaders[i];
 		/* Gather requested features from all the nodes from the graph nodes. */
 		get_requested_graph_features(shader->graph, requested_features);
-		/* Gather requested features from the graph itself. */
-		if(shader->graph_bump) {
-			get_requested_graph_features(shader->graph_bump,
-			                             requested_features);
-		}
 		ShaderNode *output_node = shader->graph->output();
 		if(output_node->input("Displacement")->link != NULL) {
 			requested_features->nodes_features |= NODE_FEATURE_BUMP;
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index b6714b13247..79a67d6756a 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -89,11 +89,6 @@ public:
 	/* shader graph */
 	ShaderGraph *graph;
 
-	/* shader graph with auto bump mapping included, we compile two shaders,
-	 * with and without bump,  because the displacement method is a mesh
-	 * level setting, so we need to handle both */
-	ShaderGraph *graph_bump;
-
 	/* sampling */
 	bool use_mis;
 	bool use_transparent_shadow;
@@ -121,6 +116,7 @@ public:
 	bool has_volume;
 	bool has_displacement;
 	bool has_surface_bssrdf;
+	bool has_bump;
 	bool has_bssrdf_bump;
 	bool has_surface_spatial_varying;
 	bool has_volume_spatial_varying;
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index 48287d872d4..66eb6a31847 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -799,29 +799,21 @@ void SVMCompiler::compile(Scene *scene,
                           Summary *summary)
 {
 	/* copy graph for shader with bump mapping */
-	ShaderNode *node = shader->graph->output();
+	ShaderNode *output = shader->graph->output();
 	int start_num_svm_nodes = svm_nodes.size();
 
 	const double time_start = time_dt();
 
-	if(node->input("Surface")->link && node->input("Displacement")->link)
-		if(!shader->graph_bump)
-			shader->graph_bump = shader->graph->copy();
+	bool has_bump = (shader->displacement_method != DISPLACE_TRUE) &&
+	                output->input("Surface")->link && output->input("Displacement")->link;
 
 	/* finalize */
 	{
 		scoped_timer timer((summary != NULL)? &summary->time_finalize: NULL);
 		shader->graph->finalize(scene,
-		                        false,
-		                        shader->has_integrator_dependency);
-	}
-
-	if(shader->graph_bump) {
-		scoped_timer timer((summary != NULL)? &summary->time_finalize_bump: NULL);
-		shader->graph_bump->finalize(scene,
-		                             true,
-		                             shader->has_integrator_dependency,
-		                             shader->displacement_method == DISPLACE_BOTH);
+		                        has_bump,
+		                        shader->has_integrator_dependency,
+		                        shader->displacement_method == DISPLACE_BOTH);
 	}
 
 	current_shader = shader;
@@ -830,7 +822,8 @@ void SVMCompiler::compile(Scene *scene,
 	shader->has_surface_emission = false;
 	shader->has_surface_transparent = false;
 	shader->has_surface_bssrdf = false;
-	shader->has_bssrdf_bump = false;
+	shader->has_bump = has_bump;
+	shader->has_bssrdf_bump = has_bump;
 	shader->has_volume = false;
 	shader->has_displacement = false;
 	shader->has_surface_spatial_varying = false;
@@ -839,9 +832,9 @@ void SVMCompiler::compile(Scene *scene,
 	shader->has_integrator_dependency = false;
 
 	/* generate bump shader */
-	if(shader->displacement_method != DISPLACE_TRUE && shader->graph_bump) {
+	if(has_bump) {
 		scoped_timer timer((summary != NULL)? &summary->time_generate_bump: NULL);
-		compile_type(shader, shader->graph_bump, SHADER_TYPE_BUMP);
+		compile_type(shader, shader->graph, SHADER_TYPE_BUMP);
 		svm_nodes[index].y = svm_nodes.size();
 		svm_nodes.insert(svm_nodes.end(),
 		                 current_svm_nodes.begin(),
@@ -853,7 +846,7 @@ void SVMCompiler::compile(Scene *scene,
 		scoped_timer timer((summary != NULL)? &summary->time_generate_surface: NULL);
 		compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
 		/* only set jump offset if there's no bump shader, as the bump shader will fall thru to this one if it exists */
-		if(shader->displacement_method == DISPLACE_TRUE || !shader->graph_bump) {
+		if(!has_bump) {
 			svm_nodes[index].y = svm_nodes.size();
 		}
 		svm_nodes.insert(svm_nodes.end(),
@@ -895,7 +888,6 @@ SVMCompiler::Summary::Summary()
 	: num_svm_nodes(0),
 	  peak_stack_usage(0),
 	  time_finalize(0.0),
-	  time_finalize_bump(0.0),
 	  time_generate_surface(0.0),
 	  time_generate_bump(0.0),
 	  time_generate_volume(0.0),
@@ -911,10 +903,7 @@ string SVMCompiler::Summary::full_report() const
 	report += string_printf("Peak stack usage:    %d\n", peak_stack_usage);
 
 	report += string_printf("Time (in seconds):\n");
-	report += string_printf("  Finalize:          %f\n", time_finalize);
-	report += string_printf("  Bu

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list