Cycles: Fix stack overflow during traversal caused by floating overflow
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 25 Aug 2017 12:00:33 +0000 (14:00 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 25 Aug 2017 12:27:34 +0000 (14:27 +0200)
Would be nice to be able to catch this with assert as well, will see what would
be the best way to do this/.\

Need to verify with Mai that this solves crash for her and maybe consider
porting this to 2.79.

intern/cycles/bvh/bvh4.cpp

index aeedd802f497762e3112b1f6171ae44f43d6bdea..777de20423b77886496686252ea66e3caba9e112 100644 (file)
@@ -242,21 +242,21 @@ void BVH4::pack_unaligned_node(int idx,
                 * so kernel might safely assume there are always 4 child nodes.
                 */
 
-               data[1][i] = 1.0f;
-               data[2][i] = 0.0f;
-               data[3][i] = 0.0f;
+               data[1][i] = NAN;
+               data[2][i] = NAN;
+               data[3][i] = NAN;
 
-               data[4][i] = 0.0f;
-               data[5][i] = 0.0f;
-               data[6][i] = 0.0f;
+               data[4][i] = NAN;
+               data[5][i] = NAN;
+               data[6][i] = NAN;
 
-               data[7][i] = 0.0f;
-               data[8][i] = 0.0f;
-               data[9][i] = 0.0f;
+               data[7][i] = NAN;
+               data[8][i] = NAN;
+               data[9][i] = NAN;
 
-               data[10][i] = -FLT_MAX;
-               data[11][i] = -FLT_MAX;
-               data[12][i] = -FLT_MAX;
+               data[10][i] = NAN;
+               data[11][i] = NAN;
+               data[12][i] = NAN;
 
                data[13][i] = __int_as_float(0);
        }