32 const uint visibility)
53 const float tmin = ray->tmin;
55 float isect_t = ray->tmax;
58 isect_array->t = ray->tmax;
65 int node_addr_child1, traverse_mask;
84 if (traverse_mask == 3) {
86 bool is_closest_child1 = (dist[1] < dist[0]);
87 if (is_closest_child1) {
89 node_addr = node_addr_child1;
90 node_addr_child1 = tmp;
95 traversal_stack[stack_ptr] = node_addr_child1;
99 if (traverse_mask == 2) {
100 node_addr = node_addr_child1;
102 else if (traverse_mask == 0) {
104 node_addr = traversal_stack[stack_ptr];
115 if (prim_addr >= 0) {
121 node_addr = traversal_stack[stack_ptr];
128 for (; prim_addr < prim_addr2; prim_addr++) {
156 isect_array->t = isect_t;
157 if (num_hits == max_hits) {
164#if BVH_FEATURE(BVH_MOTION)
167 for (; prim_addr < prim_addr2; prim_addr++) {
196 isect_array->t = isect_t;
197 if (num_hits == max_hits) {
215#if BVH_FEATURE(BVH_MOTION)
216 bvh_instance_motion_push(kg,
object, ray, &
P, &dir, &idir);
221 isect_array->t = isect_t;
232 node_addr = traversal_stack[stack_ptr];
239 if (stack_ptr >= 0) {
246 node_addr = traversal_stack[stack_ptr];
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 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)