9#if BVH_FEATURE(BVH_HAIR)
10# define NODE_INTERSECT bvh_node_intersect
12# define NODE_INTERSECT bvh_aligned_node_intersect
27 const uint visibility)
48 const float tmin = ray->tmin;
62 int node_addr_child1, traverse_mask;
83 if (traverse_mask == 3) {
85 bool is_closest_child1 = (dist[1] < dist[0]);
86 if (is_closest_child1) {
88 node_addr = node_addr_child1;
89 node_addr_child1 = tmp;
94 traversal_stack[stack_ptr] = node_addr_child1;
98 if (traverse_mask == 2) {
99 node_addr = node_addr_child1;
101 else if (traverse_mask == 0) {
103 node_addr = traversal_stack[stack_ptr];
114 if (prim_addr >= 0) {
119 node_addr = traversal_stack[stack_ptr];
123 for (; prim_addr < prim_addr2; prim_addr++) {
134#ifdef __SHADOW_LINKING__
160#if BVH_FEATURE(BVH_MOTION)
181#if BVH_FEATURE(BVH_HAIR) && defined(__HAIR__)
190 if (ray->time < prim_time.
x || ray->time > prim_time.
y) {
196 const bool hit = curve_intersect(
197 kg, isect,
P, dir, tmin, isect->t, prim_object, prim, ray->time, curve_type);
206#if BVH_FEATURE(BVH_POINTCLOUD) && defined(__POINTCLOUD__)
211 if (ray->time < prim_time.
x || ray->time > prim_time.
y) {
217 const bool hit = point_intersect(
218 kg, isect,
P, dir, tmin, isect->t, prim_object, prim, ray->time, point_type);
234#if BVH_FEATURE(BVH_MOTION)
235 bvh_instance_motion_push(kg,
object, ray, &
P, &dir, &idir);
249 if (stack_ptr >= 0) {
256 node_addr = traversal_stack[stack_ptr];
267 const uint visibility)
272#undef BVH_FUNCTION_NAME
273#undef BVH_FUNCTION_FEATURES
ccl_device_inline bool intersection_skip_shadow_link(KernelGlobals kg, const ccl_ray_data RaySelfPrimitives &self, const int isect_object)
ccl_device_inline bool intersection_skip_self_shadow(const ccl_ray_data RaySelfPrimitives &self, const int object, const int prim)
#define kernel_assert(cond)
#define kernel_data_fetch(name, index)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define ccl_device_noinline
#define BVH_FUNCTION_NAME
#define ENTRYPOINT_SENTINEL
#define BVH_FUNCTION_FULL_NAME(prefix)
ccl_device_inline void bvh_instance_push(KernelGlobals kg, const int object, const ccl_private Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
ccl_device_inline float3 bvh_inverse_direction(const float3 dir)
ccl_device_inline float3 bvh_clamp_direction(const float3 dir)
ccl_device_inline void bvh_instance_pop(const ccl_private Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
@ PRIMITIVE_MOTION_CURVE_RIBBON
@ PRIMITIVE_CURVE_THICK_LINEAR
@ PRIMITIVE_MOTION_TRIANGLE
@ PRIMITIVE_MOTION_CURVE_THICK
@ PRIMITIVE_MOTION_CURVE_THICK_LINEAR
ccl_device_inline bool motion_triangle_intersect(KernelGlobals kg, ccl_private Intersection *isect, const float3 P, const float3 dir, const float tmin, const float tmax, const float time, const uint visibility, const int object, const int prim, const int prim_addr)
CCL_NAMESPACE_BEGIN ccl_device_inline bool triangle_intersect(KernelGlobals kg, ccl_private Intersection *isect, const float3 P, const float3 dir, const float tmin, const float tmax, const uint visibility, const int object, const int prim, const int prim_addr)