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
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-08-21 16:20:38 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-08-21 16:20:38 +0400
commit0b42f14079f4a746592f184ec61783e7ca13c9be (patch)
treed1cca4f287ed54b85bc59ae0fc9464fdb17857e4 /intern
parent76a4d91dc4214c1b3992e9389d434356033ac108 (diff)
Fix #36526: SSS + hair crash after recent changes.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/kernel_bvh.h4
-rw-r--r--intern/cycles/kernel/kernel_bvh_subsurface.h10
2 files changed, 9 insertions, 5 deletions
diff --git a/intern/cycles/kernel/kernel_bvh.h b/intern/cycles/kernel/kernel_bvh.h
index 4d37b6ddcf4..21320dadb44 100644
--- a/intern/cycles/kernel/kernel_bvh.h
+++ b/intern/cycles/kernel/kernel_bvh.h
@@ -794,7 +794,7 @@ __device_inline void bvh_triangle_intersect_subsurface(KernelGlobals *kg, Inters
#if defined(__SUBSURFACE__) && defined(__HAIR__)
#define BVH_FUNCTION_NAME bvh_intersect_subsurface_hair
-#define BVH_FUNCTION_FEATURES BVH_INSTANCING|BVH_HAIR|BVH_HAIR_MINIMUM_WIDTH
+#define BVH_FUNCTION_FEATURES BVH_INSTANCING|BVH_HAIR
#include "kernel_bvh_subsurface.h"
#endif
@@ -806,7 +806,7 @@ __device_inline void bvh_triangle_intersect_subsurface(KernelGlobals *kg, Inters
#if defined(__SUBSURFACE__) && defined(__HAIR__) && defined(__OBJECT_MOTION__)
#define BVH_FUNCTION_NAME bvh_intersect_subsurface_hair_motion
-#define BVH_FUNCTION_FEATURES BVH_INSTANCING|BVH_HAIR|BVH_HAIR_MINIMUM_WIDTH|BVH_MOTION
+#define BVH_FUNCTION_FEATURES BVH_INSTANCING|BVH_HAIR|BVH_MOTION
#include "kernel_bvh_subsurface.h"
#endif
diff --git a/intern/cycles/kernel/kernel_bvh_subsurface.h b/intern/cycles/kernel/kernel_bvh_subsurface.h
index ac30bea6a9d..4446c1821d5 100644
--- a/intern/cycles/kernel/kernel_bvh_subsurface.h
+++ b/intern/cycles/kernel/kernel_bvh_subsurface.h
@@ -207,7 +207,13 @@ __device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersection
--stackPtr;
/* primitive intersection */
- while(primAddr < primAddr2) {
+ for(; primAddr < primAddr2; primAddr++) {
+#if FEATURE(BVH_HAIR)
+ uint segment = kernel_tex_fetch(__prim_segment, primAddr);
+ if(segment != ~0)
+ continue;
+#endif
+
/* only primitives from the same object */
uint tri_object = (object == ~0)? kernel_tex_fetch(__prim_object, primAddr): object;
@@ -216,8 +222,6 @@ __device uint BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersection
/* intersect ray against primitive */
bvh_triangle_intersect_subsurface(kg, isect_array, P, idir, object, primAddr, tmax, &num_hits, lcg_state, max_hits);
}
-
- primAddr++;
}
}
#if FEATURE(BVH_INSTANCING)