[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50696] trunk/blender/intern/cycles: Revert r50528: "Performance fix for Cycles: Don' t wait in the main UI thread when resetting devices."

Lukas Toenne lukas.toenne at googlemail.com
Mon Sep 17 14:07:06 CEST 2012


Revision: 50696
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50696
Author:   lukastoenne
Date:     2012-09-17 12:07:06 +0000 (Mon, 17 Sep 2012)
Log Message:
-----------
Revert r50528: "Performance fix for Cycles: Don't wait in the main UI thread when resetting devices."

This commit leads to random freezes in Cycles rendering:
https://projects.blender.org/tracker/index.php?func=detail&aid=32545&group_id=9&atid=498

The goal of this commit was to remove UI lag for OSL, but since that is not officially supported yet, better revert it until a proper fix can be implemented in 2.65.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50528

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_session.cpp
    trunk/blender/intern/cycles/device/device.h
    trunk/blender/intern/cycles/device/device_cpu.cpp
    trunk/blender/intern/cycles/device/device_cuda.cpp
    trunk/blender/intern/cycles/device/device_multi.cpp
    trunk/blender/intern/cycles/device/device_opencl.cpp
    trunk/blender/intern/cycles/render/session.cpp
    trunk/blender/intern/cycles/render/session.h
    trunk/blender/intern/cycles/util/util_task.cpp

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp	2012-09-17 12:07:06 UTC (rev 50696)
@@ -372,12 +372,6 @@
 		return;
 	}
 
-	/* if the session is still resetting the device come back later */
-	if(session->resetting()) {
-		tag_update();
-		return;
-	}
-
 	/* increase samples, but never decrease */
 	session->set_samples(session_params.samples);
 	session->set_pause(BlenderSync::get_session_pause(b_scene, background));

Modified: trunk/blender/intern/cycles/device/device.h
===================================================================
--- trunk/blender/intern/cycles/device/device.h	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/device/device.h	2012-09-17 12:07:06 UTC (rev 50696)
@@ -115,7 +115,6 @@
 	virtual void task_add(DeviceTask& task) = 0;
 	virtual void task_wait() = 0;
 	virtual void task_cancel() = 0;
-	virtual bool task_cancelled() = 0;
 	
 	/* opengl drawing */
 	virtual void draw_pixels(device_memory& mem, int y, int w, int h,

Modified: trunk/blender/intern/cycles/device/device_cpu.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cpu.cpp	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/device/device_cpu.cpp	2012-09-17 12:07:06 UTC (rev 50696)
@@ -273,11 +273,6 @@
 	{
 		task_pool.cancel();
 	}
-
-	bool task_cancelled()
-	{
-		return task_pool.cancelled();
-	}
 };
 
 Device *device_cpu_create(DeviceInfo& info, int threads)

Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cuda.cpp	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/device/device_cuda.cpp	2012-09-17 12:07:06 UTC (rev 50696)
@@ -892,11 +892,6 @@
 	{
 		task_pool.cancel();
 	}
-
-	bool task_cancelled()
-	{
-		return task_pool.cancelled();
-	}
 };
 
 Device *device_cuda_create(DeviceInfo& info, bool background)

Modified: trunk/blender/intern/cycles/device/device_multi.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_multi.cpp	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/device/device_multi.cpp	2012-09-17 12:07:06 UTC (rev 50696)
@@ -312,14 +312,6 @@
 		foreach(SubDevice& sub, devices)
 			sub.device->task_cancel();
 	}
-
-	bool task_cancelled()
-	{
-		foreach(SubDevice& sub, devices)
-			if (sub.device->task_cancelled())
-				return true;
-		return false;
-	}
 };
 
 Device *device_multi_create(DeviceInfo& info, bool background)

Modified: trunk/blender/intern/cycles/device/device_opencl.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_opencl.cpp	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/device/device_opencl.cpp	2012-09-17 12:07:06 UTC (rev 50696)
@@ -724,11 +724,6 @@
 	{
 		task_pool.cancel();
 	}
-
-	bool task_cancelled()
-	{
-		return task_pool.cancelled();
-	}
 };
 
 Device *device_opencl_create(DeviceInfo& info, bool background)

Modified: trunk/blender/intern/cycles/render/session.cpp
===================================================================
--- trunk/blender/intern/cycles/render/session.cpp	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/render/session.cpp	2012-09-17 12:07:06 UTC (rev 50696)
@@ -140,12 +140,6 @@
 	pause_cond.notify_all();
 }
 
-bool Session::resetting_gpu() const
-{
-	/* no need to wait for gpu device */
-	return false;
-}
-
 bool Session::draw_gpu(BufferParams& buffer_params)
 {
 	/* block for buffer access */
@@ -296,11 +290,6 @@
 	pause_cond.notify_all();
 }
 
-bool Session::resetting_cpu() const
-{
-	return device->task_cancelled();
-}
-
 bool Session::draw_cpu(BufferParams& buffer_params)
 {
 	thread_scoped_lock display_lock(display_mutex);
@@ -595,14 +584,6 @@
 		reset_cpu(buffer_params, samples);
 }
 
-bool Session::resetting() const
-{
-	if(device_use_gl)
-		return resetting_gpu();
-	else
-		return resetting_cpu();
-}
-
 void Session::set_samples(int samples)
 {
 	if(samples != params.samples) {

Modified: trunk/blender/intern/cycles/render/session.h
===================================================================
--- trunk/blender/intern/cycles/render/session.h	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/render/session.h	2012-09-17 12:07:06 UTC (rev 50696)
@@ -116,7 +116,6 @@
 
 	bool ready_to_reset();
 	void reset(BufferParams& params, int samples);
-	bool resetting() const;
 	void set_samples(int samples);
 	void set_pause(bool pause);
 
@@ -140,12 +139,10 @@
 	void run_cpu();
 	bool draw_cpu(BufferParams& params);
 	void reset_cpu(BufferParams& params, int samples);
-	bool resetting_cpu() const;
 
 	void run_gpu();
 	bool draw_gpu(BufferParams& params);
 	void reset_gpu(BufferParams& params, int samples);
-	bool resetting_gpu() const;
 
 	bool acquire_tile(Device *tile_device, RenderTile& tile);
 	void update_tile_sample(RenderTile& tile);

Modified: trunk/blender/intern/cycles/util/util_task.cpp
===================================================================
--- trunk/blender/intern/cycles/util/util_task.cpp	2012-09-17 12:05:18 UTC (rev 50695)
+++ trunk/blender/intern/cycles/util/util_task.cpp	2012-09-17 12:07:06 UTC (rev 50696)
@@ -38,8 +38,6 @@
 
 void TaskPool::push(Task *task, bool front)
 {
-	thread_scoped_lock num_lock(num_mutex);
-
 	TaskScheduler::Entry entry;
 
 	entry.task = task;
@@ -104,17 +102,22 @@
 
 void TaskPool::cancel()
 {
-	thread_scoped_lock num_lock(num_mutex);
-
 	do_cancel = true;
 
 	TaskScheduler::clear(this);
+	
+	{
+		thread_scoped_lock num_lock(num_mutex);
+
+		while(num)
+			num_cond.wait(num_lock);
+	}
+
+	do_cancel = false;
 }
 
 void TaskPool::stop()
 {
-	thread_scoped_lock num_lock(num_mutex);
-	
 	TaskScheduler::clear(this);
 
 	assert(num == 0);
@@ -127,20 +130,20 @@
 
 void TaskPool::num_decrease(int done)
 {
+	num_mutex.lock();
 	num -= done;
+
 	assert(num >= 0);
-	
-	if(num == 0) {
-		do_cancel = false;
-		
+	if(num == 0)
 		num_cond.notify_all();
-	}
+
+	num_mutex.unlock();
 }
 
 void TaskPool::num_increase()
 {
+	thread_scoped_lock num_lock(num_mutex);
 	num++;
-	
 	num_cond.notify_all();
 }
 
@@ -236,11 +239,7 @@
 		delete entry.task;
 
 		/* notify pool task was done */
-		{
-			/* not called from TaskPool, have to explicitly lock the mutex here */
-			thread_scoped_lock num_lock(entry.pool->num_mutex);
-			entry.pool->num_decrease(1);
-		}
+		entry.pool->num_decrease(1);
 	}
 }
 




More information about the Bf-blender-cvs mailing list