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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to