[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49155] branches/soc-2011-tomato/intern/ cycles: Tomato Cycles: deadlock with save buffers enabled should be resolved now

Sergey Sharybin sergey.vfx at gmail.com
Mon Jul 23 22:46:28 CEST 2012


Revision: 49155
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49155
Author:   nazgul
Date:     2012-07-23 20:46:27 +0000 (Mon, 23 Jul 2012)
Log Message:
-----------
Tomato Cycles: deadlock with save buffers enabled should be resolved now

Modified Paths:
--------------
    branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp
    branches/soc-2011-tomato/intern/cycles/blender/blender_session.h
    branches/soc-2011-tomato/intern/cycles/render/session.cpp
    branches/soc-2011-tomato/intern/cycles/render/session.h

Modified: branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp	2012-07-23 20:24:35 UTC (rev 49154)
+++ branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp	2012-07-23 20:46:27 UTC (rev 49155)
@@ -189,7 +189,7 @@
 	RE_engine_end_result((RenderEngine*)b_engine.ptr.data, (RenderResult*)b_rr.ptr.data, (int)cancel);
 }
 
-void BlenderSession::write_render_buffers(RenderBuffers *buffers)
+void BlenderSession::write_render_buffers(RenderBuffers *buffers, bool final_sample)
 {
 	BufferParams& params = buffers->params;
 	int x = params.full_x - session->tile_manager.params.full_x;
@@ -211,13 +211,15 @@
 
 	/* write result */
 	write_render_result(b_rr, b_rlay, buffers);
-	end_render_result(b_engine, b_rr);
+
+	if (final_sample)
+		end_render_result(b_engine, b_rr);
 }
 
 void BlenderSession::render()
 {
 	/* set callback to write out render results */
-	session->write_render_buffers_cb = function_bind(&BlenderSession::write_render_buffers, this, _1);
+	session->write_render_buffers_cb = function_bind(&BlenderSession::write_render_buffers, this, _1, _2);
 
 	/* get buffer parameters */
 	SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);

Modified: branches/soc-2011-tomato/intern/cycles/blender/blender_session.h
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/blender_session.h	2012-07-23 20:24:35 UTC (rev 49154)
+++ branches/soc-2011-tomato/intern/cycles/blender/blender_session.h	2012-07-23 20:46:27 UTC (rev 49155)
@@ -48,7 +48,7 @@
 	/* offline render */
 	void render();
 	void write_render_result(BL::RenderResult b_rr, BL::RenderLayer b_rlay, RenderBuffers *buffers);
-	void write_render_buffers(RenderBuffers *buffers);
+	void write_render_buffers(RenderBuffers *buffers, bool final_sample);
 
 	/* interactive updates */
 	void synchronize();

Modified: branches/soc-2011-tomato/intern/cycles/render/session.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/session.cpp	2012-07-23 20:24:35 UTC (rev 49154)
+++ branches/soc-2011-tomato/intern/cycles/render/session.cpp	2012-07-23 20:46:27 UTC (rev 49155)
@@ -381,7 +381,7 @@
 		/* todo: optimize this by making it thread safe and removing lock */
 
 		if(!progress.get_cancel())
-			write_render_buffers_cb(rtile.buffers);
+			write_render_buffers_cb(rtile.buffers, false);
 	}
 
 	update_status_time();
@@ -393,9 +393,8 @@
 
 	if(write_render_buffers_cb) {
 		/* todo: optimize this by making it thread safe and removing lock */
-		/* todo: this could be removed as soon as all devices would use update_tile_sample */
 		if(!progress.get_cancel())
-			write_render_buffers_cb(rtile.buffers);
+			write_render_buffers_cb(rtile.buffers, true);
 		delete rtile.buffers;
 	}
 

Modified: branches/soc-2011-tomato/intern/cycles/render/session.h
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/session.h	2012-07-23 20:24:35 UTC (rev 49154)
+++ branches/soc-2011-tomato/intern/cycles/render/session.h	2012-07-23 20:46:27 UTC (rev 49155)
@@ -105,7 +105,7 @@
 	TileManager tile_manager;
 	int sample;
 
-	boost::function<void(RenderBuffers*)> write_render_buffers_cb;
+	boost::function<void(RenderBuffers*, bool)> write_render_buffers_cb;
 
 	Session(const SessionParams& params);
 	~Session();




More information about the Bf-blender-cvs mailing list