Code cleanup: remove copy of shader graph for bump, no longer needed.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Sun, 20 Aug 2017 12:02:16 +0000 (14:02 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Sun, 20 Aug 2017 12:27:51 +0000 (14:27 +0200)
intern/cycles/render/graph.cpp
intern/cycles/render/graph.h
intern/cycles/render/osl.cpp
intern/cycles/render/shader.cpp
intern/cycles/render/shader.h
intern/cycles/render/svm.cpp
intern/cycles/render/svm.h

index 2d810ff664fc395c3bb6f25487b5a87f7d657aae..41e7e0205b00eae45e5209a8efa68cf6d2313c2c 100644 (file)
@@ -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);
index 72e391991a7301cd9eafc249967922cb5b96afc3..20ce8195093b07a1d46650e07cd29c5e57a43b67 100644 (file)
@@ -245,8 +245,6 @@ public:
        ShaderGraph();
        ~ShaderGraph();
 
-       ShaderGraph *copy();
-
        ShaderNode *add(ShaderNode *node);
        OutputNode *output();
 
index c337079b09f1912be9b29388ee8f3b2043eb2075..8fca3ebac70c6d36527e4a33118525959be01e50 100644 (file)
@@ -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();
 
index 493e01de36344cc4a7897dd2a73c932e59119b1a..86378dfb4952eccf6e96966e4738860e4b0d0644 100644 (file)
@@ -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;
index b6714b132471e90647af5eb7e490d9ccd1042594..79a67d6756ac45ccffca2b5db855731b8100fd4d 100644 (file)
@@ -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;
index 48287d872d4fa94b25a9b8371b71e9ddfbd28993..66eb6a31847b0984754b889183e1d61edb582ed8 100644 (file)
@@ -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("  Bump finalize:     %f\n", time_finalize_bump);
-       report += string_printf("Finalize:            %f\n", time_finalize +
-                                                            time_finalize_bump);
+       report += string_printf("Finalize:            %f\n", time_finalize);
        report += string_printf("  Surface:           %f\n", time_generate_surface);
        report += string_printf("  Bump:              %f\n", time_generate_bump);
        report += string_printf("  Volume:            %f\n", time_generate_volume);
index abbd9e50610419b92d159e96bf11fcb875a976c2..98ef5fa05d81deaf3a04d705c7ce55f841a659b9 100644 (file)
@@ -74,9 +74,6 @@ public:
                /* Time spent on surface graph finalization. */
                double time_finalize;
 
-               /* Time spent on bump graph finalization. */
-               double time_finalize_bump;
-
                /* Time spent on generating SVM nodes for surface shader. */
                double time_generate_surface;