Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/session.cpp')
-rw-r--r--intern/cycles/render/session.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 6bf2160f9fa..b5d434a604c 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -987,7 +987,8 @@ bool Session::update_scene()
/* update scene */
if (scene->need_update()) {
- bool new_kernels_needed = load_kernels(false);
+ /* Updated used shader tag so we know which features are need for the kernel. */
+ scene->shader_manager->update_shaders_used(scene);
/* Update max_closures. */
KernelIntegrator *kintegrator = &scene->dscene.data.integrator;
@@ -999,6 +1000,9 @@ bool Session::update_scene()
kintegrator->max_closures = MAX_CLOSURE;
}
+ /* Load render kernels, before device update where we upload data to the GPU. */
+ bool new_kernels_needed = load_kernels(false);
+
progress.set_status("Updating Scene");
MEM_GUARDED_CALL(&progress, scene->device_update, device, progress);
@@ -1271,8 +1275,11 @@ int Session::get_max_closure_count()
int max_closures = 0;
for (int i = 0; i < scene->shaders.size(); i++) {
- int num_closures = scene->shaders[i]->graph->get_num_closures();
- max_closures = max(max_closures, num_closures);
+ Shader *shader = scene->shaders[i];
+ if (shader->used) {
+ int num_closures = shader->graph->get_num_closures();
+ max_closures = max(max_closures, num_closures);
+ }
}
max_closure_global = max(max_closure_global, max_closures);