[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52519] trunk/blender/intern/cycles: Fix #33267: cycles math node power gave different results for CPU and GPU.

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Nov 23 18:39:42 CET 2012


Revision: 52519
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52519
Author:   blendix
Date:     2012-11-23 17:39:41 +0000 (Fri, 23 Nov 2012)
Log Message:
-----------
Fix #33267: cycles math node power gave different results for CPU and GPU. The
GPU variants do not support pow(-1, 2), it doesn't check for even exponents, do
manually now.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_camera.cpp
    trunk/blender/intern/cycles/kernel/svm/svm_hsv.h
    trunk/blender/intern/cycles/kernel/svm/svm_math.h

Modified: trunk/blender/intern/cycles/blender/blender_camera.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_camera.cpp	2012-11-23 15:35:16 UTC (rev 52518)
+++ trunk/blender/intern/cycles/blender/blender_camera.cpp	2012-11-23 17:39:41 UTC (rev 52519)
@@ -300,7 +300,7 @@
 			horizontal_fit = true;
 			sensor_size = bcam->sensor_width;
 		}
-		else if(bcam->sensor_fit == BlenderCamera::VERTICAL) {
+		else { /* vertical */
 			horizontal_fit = false;
 			sensor_size = bcam->sensor_height;
 		}

Modified: trunk/blender/intern/cycles/kernel/svm/svm_hsv.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_hsv.h	2012-11-23 15:35:16 UTC (rev 52518)
+++ trunk/blender/intern/cycles/kernel/svm/svm_hsv.h	2012-11-23 17:39:41 UTC (rev 52519)
@@ -110,7 +110,7 @@
 
 	color = rgb_to_hsv(color);
 
-	// remember: fmod doesn't work for negative numbers
+	/* remember: fmod doesn't work for negative numbers here */
 	color.x += hue + 0.5f;
 	color.x = fmod(color.x, 1.0f);
 	color.y *= sat;

Modified: trunk/blender/intern/cycles/kernel/svm/svm_math.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_math.h	2012-11-23 15:35:16 UTC (rev 52518)
+++ trunk/blender/intern/cycles/kernel/svm/svm_math.h	2012-11-23 17:39:41 UTC (rev 52519)
@@ -38,6 +38,21 @@
 	return acosf(a);
 }
 
+__device float compatible_powf(float x, float y)
+{
+	/* GPU pow doesn't accept negative x, do manual checks here */
+	if(x < 0.0f) {
+		if(fmod(-y, 2.0f) == 0.0f)
+			return powf(-x, y);
+		else
+			return -powf(-x, y);
+	}
+	else if(x == 0.0f)
+		return 0.0f;
+
+	return powf(x, y);
+}
+
 __device float safe_powf(float a, float b)
 {
 	if(b == 0.0f)
@@ -47,7 +62,7 @@
 	if(a < 0.0f && b != (int)b)
 		return 0.0f;
 	
-	return powf(a, b);
+	return compatible_powf(a, b);
 }
 
 __device float safe_logf(float a, float b)




More information about the Bf-blender-cvs mailing list