[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