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:
authorMai Lavelle <mai.lavelle@gmail.com>2017-05-18 05:14:12 +0300
committerMai Lavelle <mai.lavelle@gmail.com>2017-05-19 23:24:19 +0300
commit177385dc439b4f6b478a033413a8df992e7f5ed3 (patch)
tree87d295352627fe53c45b4edd820ba65fa4c888cc /intern/cycles/render/session.cpp
parentb6f5e8d9a1aa29720167cf1b1700f76b3e5950a1 (diff)
Cycles: Reload kernels from Session when requested features change
This fixes T49496.
Diffstat (limited to 'intern/cycles/render/session.cpp')
-rw-r--r--intern/cycles/render/session.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 3f080407b1f..08909943c49 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -726,16 +726,20 @@ DeviceRequestedFeatures Session::get_requested_device_features()
return requested_features;
}
-void Session::load_kernels()
+void Session::load_kernels(bool lock_scene)
{
- thread_scoped_lock scene_lock(scene->mutex);
+ thread_scoped_lock scene_lock;
+ if(lock_scene) {
+ scene_lock = thread_scoped_lock(scene->mutex);
+ }
- if(!kernels_loaded) {
+ DeviceRequestedFeatures requested_features = get_requested_device_features();
+
+ if(!kernels_loaded || loaded_kernel_features.modified(requested_features)) {
progress.set_status("Loading render kernels (may take a few minutes the first time)");
scoped_timer timer;
- DeviceRequestedFeatures requested_features = get_requested_device_features();
VLOG(2) << "Requested features:\n" << requested_features;
if(!device->load_kernels(requested_features)) {
string message = device->error_message();
@@ -752,6 +756,7 @@ void Session::load_kernels()
VLOG(1) << "Total time spent loading kernels: " << time_dt() - timer.get_start();
kernels_loaded = true;
+ loaded_kernel_features = requested_features;
}
}
@@ -902,6 +907,8 @@ void Session::update_scene()
/* update scene */
if(scene->need_update()) {
+ load_kernels(false);
+
progress.set_status("Updating Scene");
MEM_GUARDED_CALL(&progress, scene->device_update, device, progress);
}