[Bf-blender-cvs] [0d9e6a7] master: Fix T40262: cycles GPU bake crash due to kernels not loaded, randomly due to thread timing.
Brecht Van Lommel
noreply at git.blender.org
Mon May 19 19:33:32 CEST 2014
Commit: 0d9e6a736a410991ef9a11ef87c8d23c96199823
Author: Brecht Van Lommel
Date: Mon May 19 19:17:57 2014 +0200
https://developer.blender.org/rB0d9e6a736a410991ef9a11ef87c8d23c96199823
Fix T40262: cycles GPU bake crash due to kernels not loaded, randomly due to thread timing.
===================================================================
M intern/cycles/blender/blender_session.cpp
M intern/cycles/render/session.cpp
M intern/cycles/render/session.h
===================================================================
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 01a5acd..13d4041 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -518,6 +518,12 @@ void BlenderSession::bake(BL::Object b_object, const string& pass_type, BL::Bake
size_t object_index = OBJECT_NONE;
int tri_offset = 0;
+ /* ensure kernels are loaded before we do any scene updates */
+ session->load_kernels();
+
+ if(session->progress.get_cancel())
+ return;
+
if(shader_type == SHADER_EVAL_UV) {
/* force UV to be available */
Pass::add(PASS_UV, scene->film->passes);
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 28b44df..9fcd9fa 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -592,9 +592,10 @@ void Session::run_cpu()
update_progressive_refine(true);
}
-void Session::run()
+void Session::load_kernels()
{
- /* load kernels */
+ thread_scoped_lock scene_lock(scene->mutex);
+
if(!kernels_loaded) {
progress.set_status("Loading render kernels (may take a few minutes the first time)");
@@ -603,6 +604,7 @@ void Session::run()
if(message.empty())
message = "Failed loading render kernel, see console for errors";
+ progress.set_cancel(message);
progress.set_status("Error", message);
progress.set_update();
return;
@@ -610,6 +612,12 @@ void Session::run()
kernels_loaded = true;
}
+}
+
+void Session::run()
+{
+ /* load kernels */
+ load_kernels();
/* session thread loop */
progress.set_status("Waiting for render to start");
diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h
index 4638bb8..9da7a0aa 100644
--- a/intern/cycles/render/session.h
+++ b/intern/cycles/render/session.h
@@ -138,7 +138,10 @@ public:
void set_pause(bool pause);
void update_scene();
+ void load_kernels();
+
void device_free();
+
protected:
struct DelayedReset {
thread_mutex mutex;
More information about the Bf-blender-cvs
mailing list