7 #if BVH_FEATURE(BVH_HAIR)
8 # define NODE_INTERSECT bvh_node_intersect
10 # define NODE_INTERSECT bvh_aligned_node_intersect
25 const uint visibility)
46 const float tmin = ray->tmin;
60 int node_addr_child1, traverse_mask;
81 if (traverse_mask == 3) {
83 bool is_closest_child1 = (dist[1] < dist[0]);
84 if (is_closest_child1) {
86 node_addr = node_addr_child1;
87 node_addr_child1 = tmp;
96 if (traverse_mask == 2) {
97 node_addr = node_addr_child1;
99 else if (traverse_mask == 0) {
112 if (prim_addr >= 0) {
121 for (; prim_addr < prim_addr2; prim_addr++) {
150 #if BVH_FEATURE(BVH_MOTION)
170 #if BVH_FEATURE(BVH_HAIR)
177 if (ray->time < prim_time.
x || ray->time > prim_time.
y) {
183 const bool hit = curve_intersect(
184 kg, isect,
P, dir, tmin, isect->t, prim_object, prim, ray->time, curve_type);
193 #if BVH_FEATURE(BVH_POINTCLOUD)
198 if (ray->time < prim_time.
x || ray->time > prim_time.
y) {
204 const bool hit = point_intersect(
205 kg, isect,
P, dir, tmin, isect->t, prim_object, prim, ray->time, point_type);
221 #if BVH_FEATURE(BVH_MOTION)
222 bvh_instance_motion_push(kg,
object, ray, &
P, &dir, &idir);
236 if (stack_ptr >= 0) {
254 const uint visibility)
259 #undef BVH_FUNCTION_NAME
260 #undef BVH_FUNCTION_FEATURES
261 #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
#define kernel_assert(cond)
#define ccl_device_inline
#define ccl_device_noinline
ccl_device_inline bool intersection_skip_self_shadow(ccl_private const RaySelfPrimitives &self, const int object, const int prim)
BLI_Stack * traversal_stack
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
#define ENTRYPOINT_SENTINEL
#define BVH_FUNCTION_FULL_NAME(prefix)
ccl_device_inline void bvh_instance_push(KernelGlobals kg, int object, ccl_private const Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
ccl_device_inline float3 bvh_clamp_direction(float3 dir)
ccl_device_inline void bvh_instance_pop(ccl_private const Ray *ray, ccl_private float3 *P, ccl_private float3 *dir, ccl_private float3 *idir)
ccl_device_inline float3 bvh_inverse_direction(float3 dir)
@ PRIMITIVE_MOTION_CURVE_RIBBON
@ PRIMITIVE_MOTION_TRIANGLE
@ PRIMITIVE_MOTION_CURVE_THICK
ccl_device_inline bool motion_triangle_intersect(KernelGlobals kg, ccl_private Intersection *isect, float3 P, float3 dir, float tmin, float tmax, float time, uint visibility, int object, int prim, int prim_addr)
ccl_device_inline bool BVH_FUNCTION_NAME(KernelGlobals kg, ccl_private const Ray *ray, ccl_private Intersection *isect, const uint visibility)
CCL_NAMESPACE_BEGIN ccl_device_inline bool triangle_intersect(KernelGlobals kg, ccl_private Intersection *isect, float3 P, float3 dir, float tmin, float tmax, uint visibility, int object, int prim, int prim_addr)
ccl_device_inline int __float_as_int(float f)