diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-04-21 17:53:20 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-04-21 18:14:37 +0400 |
commit | 04a10907dc41a3016374f9efc4820987cc7a5460 (patch) | |
tree | d737a14c5876104e7da4f85ca9db898a1dd3dcad /intern/cycles/render/svm.cpp | |
parent | 7765b73f6d2002b074b7e78985171ef035075fbb (diff) |
Code cleanup: remove old closure sampling code Cycles.
This was the original code to get things working on old GPUs, but now it is no
longer in use and various features in fact depend on this to work correctly to
the point that enabling this code is too buggy to be useful.
Diffstat (limited to 'intern/cycles/render/svm.cpp')
-rw-r--r-- | intern/cycles/render/svm.cpp | 117 |
1 files changed, 8 insertions, 109 deletions
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index 8035b0129ca..ec0335b75a1 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -63,8 +63,6 @@ void SVMShaderManager::device_update(Device *device, DeviceScene *dscene, Scene svm_nodes.push_back(make_int4(NODE_SHADER_JUMP, 0, 0, 0)); } - bool use_multi_closure = device->info.advanced_shading; - for(i = 0; i < scene->shaders.size(); i++) { Shader *shader = scene->shaders[i]; @@ -75,8 +73,7 @@ void SVMShaderManager::device_update(Device *device, DeviceScene *dscene, Scene if(shader->use_mis && shader->has_surface_emission) scene->light_manager->need_update = true; - SVMCompiler compiler(scene->shader_manager, scene->image_manager, - use_multi_closure); + SVMCompiler compiler(scene->shader_manager, scene->image_manager); compiler.background = ((int)i == scene->default_background); compiler.compile(shader, svm_nodes, i); } @@ -104,7 +101,7 @@ void SVMShaderManager::device_free(Device *device, DeviceScene *dscene, Scene *s /* Graph Compiler */ -SVMCompiler::SVMCompiler(ShaderManager *shader_manager_, ImageManager *image_manager_, bool use_multi_closure_) +SVMCompiler::SVMCompiler(ShaderManager *shader_manager_, ImageManager *image_manager_) { shader_manager = shader_manager_; image_manager = image_manager_; @@ -114,7 +111,6 @@ SVMCompiler::SVMCompiler(ShaderManager *shader_manager_, ImageManager *image_man current_graph = NULL; background = false; mix_weight_offset = SVM_STACK_INVALID; - use_multi_closure = use_multi_closure_; compile_failed = false; } @@ -422,97 +418,6 @@ void SVMCompiler::generate_svm_nodes(const set<ShaderNode*>& nodes, set<ShaderNo } while(!nodes_done); } -void SVMCompiler::generate_closure(ShaderNode *node, set<ShaderNode*>& done) -{ - if(node->name == ustring("mix_closure") || node->name == ustring("add_closure")) { - ShaderInput *fin = node->input("Fac"); - ShaderInput *cl1in = node->input("Closure1"); - ShaderInput *cl2in = node->input("Closure2"); - - /* execute dependencies for mix weight */ - if(fin) { - set<ShaderNode*> dependencies; - find_dependencies(dependencies, done, fin); - generate_svm_nodes(dependencies, done); - - /* add mix node */ - stack_assign(fin); - } - - int mix_offset = svm_nodes.size(); - - if(fin) - add_node(NODE_MIX_CLOSURE, fin->stack_offset, 0, 0); - else - add_node(NODE_ADD_CLOSURE, 0, 0, 0); - - /* generate code for closure 1 - * note we backup all compiler state and restore it afterwards, so one - * closure choice doesn't influence the other*/ - if(cl1in->link) { - StackBackup backup; - stack_backup(backup, done); - - generate_closure(cl1in->link->parent, done); - add_node(NODE_END, 0, 0, 0); - - stack_restore(backup, done); - } - else - add_node(NODE_END, 0, 0, 0); - - /* generate code for closure 2 */ - int cl2_offset = svm_nodes.size(); - - if(cl2in->link) { - StackBackup backup; - stack_backup(backup, done); - - generate_closure(cl2in->link->parent, done); - add_node(NODE_END, 0, 0, 0); - - stack_restore(backup, done); - } - else - add_node(NODE_END, 0, 0, 0); - - /* set jump for mix node, -1 because offset is already - * incremented when this jump is added to it */ - svm_nodes[mix_offset].z = cl2_offset - mix_offset - 1; - - done.insert(node); - stack_clear_users(node, done); - stack_clear_temporary(node); - } - else { - /* execute dependencies for closure */ - foreach(ShaderInput *in, node->inputs) { - if(!node_skip_input(node, in) && in->link) { - set<ShaderNode*> dependencies; - find_dependencies(dependencies, done, in); - generate_svm_nodes(dependencies, done); - } - } - - /* compile closure itself */ - generate_node(node, done); - - if(current_type == SHADER_TYPE_SURFACE) { - if(node->has_surface_emission()) - current_shader->has_surface_emission = true; - if(node->has_surface_transparent()) - current_shader->has_surface_transparent = true; - if(node->has_surface_bssrdf()) { - current_shader->has_surface_bssrdf = true; - if(node->has_bssrdf_bump()) - current_shader->has_bssrdf_bump = true; - } - } - - /* end node is added outside of this */ - } -} - void SVMCompiler::generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done, set<ShaderNode*>& closure_done) { /* only generate once */ @@ -537,7 +442,7 @@ void SVMCompiler::generate_multi_closure(ShaderNode *node, set<ShaderNode*>& don find_dependencies(dependencies, done, facin); generate_svm_nodes(dependencies, done); - stack_assign(facin); /* XXX unassign? */ + stack_assign(facin); /* execute shared dependencies. this is needed to allow skipping * of zero weight closures and their dependencies later, so we @@ -578,7 +483,7 @@ void SVMCompiler::generate_multi_closure(ShaderNode *node, set<ShaderNode*>& don } /* unassign */ - facin->stack_offset = SVM_STACK_INVALID; // XXX clear? + facin->stack_offset = SVM_STACK_INVALID; } else { /* execute closures and their dependencies, no runtime checks @@ -706,14 +611,8 @@ void SVMCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty } if(generate) { - set<ShaderNode*> done; - - if(use_multi_closure) { - set<ShaderNode*> closure_done; - generate_multi_closure(clin->link->parent, done, closure_done); - } - else - generate_closure(clin->link->parent, done); + set<ShaderNode*> done, closure_done; + generate_multi_closure(clin->link->parent, done, closure_done); } } @@ -740,9 +639,9 @@ void SVMCompiler::compile(Shader *shader, vector<int4>& global_svm_nodes, int in shader->graph_bump = shader->graph->copy(); /* finalize */ - shader->graph->finalize(false, false, use_multi_closure); + shader->graph->finalize(false, false); if(shader->graph_bump) - shader->graph_bump->finalize(true, false, use_multi_closure); + shader->graph_bump->finalize(true, false); current_shader = shader; |