20 #if BVH_FEATURE(BVH_HAIR)
21 # define NODE_INTERSECT bvh_node_intersect
23 # define NODE_INTERSECT bvh_aligned_node_intersect
37 const uint visibility)
60 #if BVH_FEATURE(BVH_MOTION)
77 int node_addr_child1, traverse_mask;
97 if (traverse_mask == 3) {
99 bool is_closest_child1 = (dist[1] < dist[0]);
100 if (is_closest_child1) {
102 node_addr = node_addr_child1;
103 node_addr_child1 = tmp;
112 if (traverse_mask == 2) {
113 node_addr = node_addr_child1;
115 else if (traverse_mask == 0) {
129 if (prim_addr >= 0) {
140 for (; prim_addr < prim_addr2; prim_addr++) {
151 #if BVH_FEATURE(BVH_MOTION)
153 for (; prim_addr < prim_addr2; prim_addr++) {
157 kg, isect,
P, dir, ray->time, visibility,
object, prim_addr)) {
166 #if BVH_FEATURE(BVH_HAIR)
171 for (; prim_addr < prim_addr2; prim_addr++) {
175 const bool hit = curve_intersect(
176 kg, isect,
P, dir, visibility,
object, prim_addr, ray->time, curve_type);
192 #if BVH_FEATURE(BVH_MOTION)
193 isect->t = bvh_instance_motion_push(
194 kg,
object, ray, &
P, &dir, &idir, isect->t, &ob_itfm);
210 if (stack_ptr >= 0) {
214 #if BVH_FEATURE(BVH_MOTION)
215 isect->t = bvh_instance_motion_pop(
kg,
object, ray, &
P, &dir, &idir, isect->t, &ob_itfm);
232 const uint visibility)
237 #undef BVH_FUNCTION_NAME
238 #undef BVH_FUNCTION_FEATURES
239 #undef NODE_INTERSECT
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals *kg, const Ray *ray, Intersection *isect, const uint visibility)
#define ENTRYPOINT_SENTINEL
#define BVH_DEBUG_NEXT_INTERSECTION()
#define BVH_DEBUG_NEXT_NODE()
#define BVH_FUNCTION_FULL_NAME(prefix)
#define BVH_DEBUG_NEXT_INSTANCE()
BLI_Stack * traversal_stack
ccl_device_inline bool motion_triangle_intersect(KernelGlobals *kg, Intersection *isect, float3 P, float3 dir, float time, uint visibility, int object, int prim_addr)
ccl_device_inline float3 bvh_clamp_direction(float3 dir)
ccl_device_inline float3 bvh_inverse_direction(float3 dir)
ccl_device_inline float bvh_instance_push(KernelGlobals *kg, int object, const Ray *ray, float3 *P, float3 *dir, float3 *idir, float t)
ccl_device_inline float bvh_instance_pop(KernelGlobals *kg, int object, const Ray *ray, float3 *P, float3 *dir, float3 *idir, float t)
CCL_NAMESPACE_BEGIN ccl_device_inline bool triangle_intersect(KernelGlobals *kg, Intersection *isect, float3 P, float3 dir, uint visibility, int object, int prim_addr)
#define kernel_assert(cond)
#define kernel_tex_fetch(tex, index)
#define ccl_device_inline
#define ccl_device_noinline
@ PRIMITIVE_MOTION_CURVE_RIBBON
@ PRIMITIVE_MOTION_TRIANGLE
@ PRIMITIVE_MOTION_CURVE_THICK
ccl_device_inline int __float_as_int(float f)