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.
This commit is contained in:
Sergey Sharybin
2016-04-15 15:29:12 +02:00
parent 177d051126
commit 3165e8740b
2 changed files with 8 additions and 3 deletions

View File

@@ -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;
}