[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52760] trunk/blender/intern/cycles: Fix #33405: preview render getting stuck in a particular .blend file, ObjectKey

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Dec 4 08:48:12 CET 2012


Revision: 52760
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52760
Author:   blendix
Date:     2012-12-04 07:48:09 +0000 (Tue, 04 Dec 2012)
Log Message:
-----------
Fix #33405: preview render getting stuck in a particular .blend file, ObjectKey
operator< had wrong brackets, changed it now to be more clear.

Fix #33404: crash GPU rendering with OSL option still enabled. There was a check
to disable OSL in this case, but it shouldn't have modified scene->params because
this is used for comparison in scene->modified().

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_shader.cpp
    trunk/blender/intern/cycles/blender/blender_util.h
    trunk/blender/intern/cycles/kernel/kernel_shader.h
    trunk/blender/intern/cycles/render/mesh.cpp
    trunk/blender/intern/cycles/render/osl.h
    trunk/blender/intern/cycles/render/scene.cpp
    trunk/blender/intern/cycles/render/shader.cpp
    trunk/blender/intern/cycles/render/shader.h

Modified: trunk/blender/intern/cycles/blender/blender_shader.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_shader.cpp	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/blender/blender_shader.cpp	2012-12-04 07:48:09 UTC (rev 52760)
@@ -445,7 +445,7 @@
 		}
 		case BL::ShaderNode::type_SCRIPT: {
 #ifdef WITH_OSL
-			if(scene->params.shadingsystem != SceneParams::OSL)
+			if(!scene->shader_manager->use_osl())
 				break;
 
 			/* create script node */

Modified: trunk/blender/intern/cycles/blender/blender_util.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_util.h	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/blender/blender_util.h	2012-12-04 07:48:09 UTC (rev 52760)
@@ -367,12 +367,22 @@
 
 	bool operator<(const ObjectKey& k) const
 	{
-		return (parent < k.parent) ||
-		       (parent == k.parent && (memcmp(id, k.id, sizeof(id)) < 0)) ||
-		       (memcmp(id, k.id, sizeof(id)) == 0 && ob < k.ob);
+		if(ob < k.ob) {
+			return true;
+		}
+		else if(ob == k.ob) {
+			if(parent < k.parent)
+				return true;
+			else if(parent == k.parent)
+				return memcmp(id, k.id, sizeof(id)) < 0;
+		}
+
+		return false;
 	}
 };
 
+/* Particle System Key */
+
 struct ParticleSystemKey {
 	void *ob;
 	int id[OBJECT_PERSISTENT_ID_SIZE];
@@ -389,8 +399,12 @@
 	bool operator<(const ParticleSystemKey& k) const
 	{
 		/* first id is particle index, we don't compare that */
-		return (ob < k.ob) ||
-		       (ob == k.ob && (memcmp(id+1, k.id+1, sizeof(int)*(OBJECT_PERSISTENT_ID_SIZE-1)) < 0));
+		if(ob < k.ob)
+			return true;
+		else if(ob == k.ob)
+			return memcmp(id+1, k.id+1, sizeof(int)*(OBJECT_PERSISTENT_ID_SIZE-1)) < 0;
+
+		return false;
 	}
 };
 

Modified: trunk/blender/intern/cycles/kernel/kernel_shader.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_shader.h	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/kernel/kernel_shader.h	2012-12-04 07:48:09 UTC (rev 52760)
@@ -698,7 +698,7 @@
 #ifdef __SVM__
 		svm_eval_nodes(kg, sd, SHADER_TYPE_SURFACE, randb, path_flag);
 #else
-		bsdf_diffuse_setup(sd, &sd->closure);
+		bsdf_diffuse_setup(&sd->closure);
 		sd->closure.weight = make_float3(0.8f, 0.8f, 0.8f);
 #endif
 	}

Modified: trunk/blender/intern/cycles/render/mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/render/mesh.cpp	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/render/mesh.cpp	2012-12-04 07:48:09 UTC (rev 52760)
@@ -547,7 +547,7 @@
 	}
 
 	/* create attribute lookup maps */
-	if(scene->params.shadingsystem == SceneParams::OSL)
+	if(scene->shader_manager->use_osl())
 		update_osl_attributes(device, scene, mesh_attributes);
 	else
 		update_svm_attributes(device, dscene, scene, mesh_attributes);

Modified: trunk/blender/intern/cycles/render/osl.h
===================================================================
--- trunk/blender/intern/cycles/render/osl.h	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/render/osl.h	2012-12-04 07:48:09 UTC (rev 52760)
@@ -52,6 +52,8 @@
 	OSLShaderManager();
 	~OSLShaderManager();
 
+	bool use_osl() { return true; }
+
 	void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
 	void device_free(Device *device, DeviceScene *dscene);
 

Modified: trunk/blender/intern/cycles/render/scene.cpp
===================================================================
--- trunk/blender/intern/cycles/render/scene.cpp	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/render/scene.cpp	2012-12-04 07:48:09 UTC (rev 52760)
@@ -44,10 +44,6 @@
 	device = NULL;
 	memset(&dscene.data, 0, sizeof(dscene.data));
 
-	/* OSL only works on the CPU */
-	if(device_info_.type != DEVICE_CPU)
-		params.shadingsystem = SceneParams::SVM;
-
 	camera = new Camera();
 	filter = new Filter();
 	film = new Film();
@@ -57,9 +53,14 @@
 	object_manager = new ObjectManager();
 	integrator = new Integrator();
 	image_manager = new ImageManager();
-	shader_manager = ShaderManager::create(this);
 	particle_system_manager = new ParticleSystemManager();
 
+	/* OSL only works on the CPU */
+	if(device_info_.type == DEVICE_CPU)
+		shader_manager = ShaderManager::create(this, params.shadingsystem);
+	else
+		shader_manager = ShaderManager::create(this, SceneParams::SVM);
+
 	if (device_info_.type == DEVICE_CPU)
 		image_manager->set_extended_image_limits();
 }

Modified: trunk/blender/intern/cycles/render/shader.cpp
===================================================================
--- trunk/blender/intern/cycles/render/shader.cpp	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/render/shader.cpp	2012-12-04 07:48:09 UTC (rev 52760)
@@ -121,12 +121,12 @@
 {
 }
 
-ShaderManager *ShaderManager::create(Scene *scene)
+ShaderManager *ShaderManager::create(Scene *scene, int shadingsystem)
 {
 	ShaderManager *manager;
 
 #ifdef WITH_OSL
-	if(scene->params.shadingsystem == SceneParams::OSL)
+	if(shadingsystem == SceneParams::OSL)
 		manager = new OSLShaderManager();
 	else
 #endif

Modified: trunk/blender/intern/cycles/render/shader.h
===================================================================
--- trunk/blender/intern/cycles/render/shader.h	2012-12-04 03:18:08 UTC (rev 52759)
+++ trunk/blender/intern/cycles/render/shader.h	2012-12-04 07:48:09 UTC (rev 52760)
@@ -107,9 +107,11 @@
 public:
 	bool need_update;
 
-	static ShaderManager *create(Scene *scene);
+	static ShaderManager *create(Scene *scene, int shadingsystem);
 	virtual ~ShaderManager();
 
+	virtual bool use_osl() { return false; }
+
 	/* device update */
 	virtual void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress) = 0;
 	virtual void device_free(Device *device, DeviceScene *dscene) = 0;




More information about the Bf-blender-cvs mailing list