Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-04-15 16:29:12 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-04-15 16:30:30 +0300
commit3165e8740b83f28569a9e405757f4c34c378df3b (patch)
tree35cf95b439c7b7f1b63380659b9971ea4868a017
parent177d051126b3ea4a1dec6a016ae67d7f51f233d0 (diff)
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.
-rw-r--r--intern/cycles/kernel/svm/svm_checker.h6
-rw-r--r--intern/cycles/util/util_math.h5
2 files changed, 8 insertions, 3 deletions
diff --git a/intern/cycles/kernel/svm/svm_checker.h b/intern/cycles/kernel/svm/svm_checker.h
index 186bf7df55f..cea245991de 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 cdbc37fd32c..32924f9a8c2 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;