diff options
Diffstat (limited to 'intern/cycles/render/osl.cpp')
-rw-r--r-- | intern/cycles/render/osl.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index 1c54dc2d531..bea2c534bd1 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -24,6 +24,7 @@ #include "render/osl.h" #include "render/scene.h" #include "render/shader.h" +#include "render/stats.h" #ifdef WITH_OSL @@ -75,9 +76,9 @@ OSLShaderManager::~OSLShaderManager() void OSLShaderManager::free_memory() { # ifdef OSL_HAS_BLENDER_CLEANUP_FIX - /* There is a problem with llvm+osl: The order global destructors across + /* There is a problem with LLVM+OSL: The order global destructors across * different compilation units run cannot be guaranteed, on windows this means - * that the llvm destructors run before the osl destructors, causing a crash + * that the LLVM destructors run before the osl destructors, causing a crash * when the process exits. the OSL in svn has a special cleanup hack to * sidestep this behavior */ OSL::pvt::LLVM_Util::Cleanup(); @@ -98,6 +99,12 @@ void OSLShaderManager::device_update(Device *device, if (!need_update) return; + scoped_callback_timer timer([scene](double time) { + if (scene->update_stats) { + scene->update_stats->osl.times.add_entry({"device_update", time}); + } + }); + VLOG(1) << "Total " << scene->shaders.size() << " shaders."; device_free(device, dscene, scene); @@ -124,7 +131,7 @@ void OSLShaderManager::device_update(Device *device, compiler.background = (shader == background_shader); compiler.compile(og, shader); - if (shader->use_mis && shader->has_surface_emission) + if (shader->get_use_mis() && shader->has_surface_emission) scene->light_manager->need_update = true; } @@ -138,7 +145,7 @@ void OSLShaderManager::device_update(Device *device, og->use = true; foreach (Shader *shader, scene->shaders) - shader->need_update = false; + shader->clear_modified(); need_update = false; @@ -1113,18 +1120,18 @@ OSL::ShaderGroupRef OSLCompiler::compile_type(Shader *shader, ShaderGraph *graph void OSLCompiler::compile(OSLGlobals *og, Shader *shader) { - if (shader->need_update) { + if (shader->is_modified()) { ShaderGraph *graph = shader->graph; ShaderNode *output = (graph) ? graph->output() : NULL; - bool has_bump = (shader->displacement_method != DISPLACE_TRUE) && + bool has_bump = (shader->get_displacement_method() != DISPLACE_TRUE) && output->input("Surface")->link && output->input("Displacement")->link; /* finalize */ shader->graph->finalize(scene, has_bump, shader->has_integrator_dependency, - shader->displacement_method == DISPLACE_BOTH); + shader->get_displacement_method() == DISPLACE_BOTH); current_shader = shader; |