[Bf-blender-cvs] [3165e87] master: Fix T48139: Checker texture strange behavior in cycles

Sergey Sharybin noreply at git.blender.org
Fri Apr 15 15:30:29 CEST 2016


Commit: 3165e8740b83f28569a9e405757f4c34c378df3b
Author: Sergey Sharybin
Date:   Fri Apr 15 15:29:12 2016 +0200
Branches: master
https://developer.blender.org/rB3165e8740b83f28569a9e405757f4c34c378df3b

Fix T48139: Checker texture strange behavior in cycles

Seems particular CUDA implementations has some precision issues,
which made integer coordinate (which was expected to always be
positive) to go negative.

===================================================================

M	intern/cycles/kernel/svm/svm_checker.h
M	intern/cycles/util/util_math.h

===================================================================

diff --git a/intern/cycles/kernel/svm/svm_checker.h b/intern/cycles/kernel/svm/svm_checker.h
index 186bf7d..cea2459 100644
--- a/intern/cycles/kernel/svm/svm_checker.h
+++ b/intern/cycles/kernel/svm/svm_checker.h
@@ -25,9 +25,9 @@ ccl_device_noinline float svm_checker(float3 p)
 	p.y = (p.y + 0.000001f)*0.999999f;
 	p.z = (p.z + 0.000001f)*0.999999f;
 
-	int xi = float_to_int(fabsf(floorf(p.x)));
-	int yi = float_to_int(fabsf(floorf(p.y)));
-	int zi = float_to_int(fabsf(floorf(p.z)));
+	int xi = abs(float_to_int(floorf(p.x)));
+	int yi = abs(float_to_int(floorf(p.y)));
+	int zi = abs(float_to_int(floorf(p.z)));
 
 	return ((xi % 2 == yi % 2) == (zi % 2))? 1.0f: 0.0f;
 }
diff --git a/intern/cycles/util/util_math.h b/intern/cycles/util/util_math.h
index cdbc37f..32924f9 100644
--- a/intern/cycles/util/util_math.h
+++ b/intern/cycles/util/util_math.h
@@ -97,6 +97,11 @@ ccl_device_inline float fminf(float a, float b)
 
 #ifndef __KERNEL_GPU__
 
+ccl_device_inline int abs(int x)
+{
+	return (x > 0)? x: -x;
+}
+
 ccl_device_inline int max(int a, int b)
 {
 	return (a > b)? a: b;




More information about the Bf-blender-cvs mailing list