14#if defined(__EMBREE__)
17#elif defined(__METALRT__)
19#elif defined(__KERNEL_OPTIX__)
21#elif defined(__HIPRT__)
27#if defined(__KERNEL_ONEAPI__) && defined(WITH_EMBREE_GPU)
36static constexpr sycl::specialization_id<RTCFeatureFlags> oneapi_embree_features{
37 RTC_FEATURE_FLAG_NONE};
38# define IF_USING_EMBREE \
39 if (kernel_handler.get_specialization_constant<oneapi_embree_features>() != \
40 RTC_FEATURE_FLAG_NONE)
41# define IF_NOT_USING_EMBREE \
42 if (kernel_handler.get_specialization_constant<oneapi_embree_features>() == \
43 RTC_FEATURE_FLAG_NONE)
45# define IF_USING_EMBREE
46# define IF_NOT_USING_EMBREE
70# define BVH_FUNCTION_NAME bvh_intersect
71# define BVH_FUNCTION_FEATURES BVH_POINTCLOUD
75# define BVH_FUNCTION_NAME bvh_intersect_hair
76# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_POINTCLOUD
80# if defined(__OBJECT_MOTION__)
81# define BVH_FUNCTION_NAME bvh_intersect_motion
82# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_POINTCLOUD
86# if defined(__HAIR__) && defined(__OBJECT_MOTION__)
87# define BVH_FUNCTION_NAME bvh_intersect_hair_motion
88# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_MOTION | BVH_POINTCLOUD
94 const uint visibility,
112# ifdef __OBJECT_MOTION__
116 return bvh_intersect_hair_motion(kg, ray, isect, visibility);
120 return bvh_intersect_motion(kg, ray, isect, visibility);
126 return bvh_intersect_hair(kg, ray, isect, visibility);
130 return bvh_intersect(kg, ray, isect, visibility);
139 const uint visibility)
149# define BVH_FUNCTION_NAME bvh_intersect_local
150# define BVH_FUNCTION_FEATURES BVH_HAIR
153# if defined(__OBJECT_MOTION__)
154# define BVH_FUNCTION_NAME bvh_intersect_local_motion
155# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_HAIR
159template<
bool single_hit = false>
169 local_isect->num_hits = 0;
178 return kernel_embree_intersect_local(
179 kg, ray, local_isect, local_object, lcg_state, max_hits);
186# ifdef __OBJECT_MOTION__
188 return bvh_intersect_local_motion(kg, ray, local_isect, local_object, lcg_state, max_hits);
191 return bvh_intersect_local(kg, ray, local_isect, local_object, lcg_state, max_hits);
201# ifdef __SHADOW_RECORD_ALL__
203# define BVH_FUNCTION_NAME bvh_intersect_shadow_all
204# define BVH_FUNCTION_FEATURES BVH_POINTCLOUD
207# if defined(__HAIR__)
208# define BVH_FUNCTION_NAME bvh_intersect_shadow_all_hair
209# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_POINTCLOUD
213# if defined(__OBJECT_MOTION__)
214# define BVH_FUNCTION_NAME bvh_intersect_shadow_all_motion
215# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_POINTCLOUD
219# if defined(__HAIR__) && defined(__OBJECT_MOTION__)
220# define BVH_FUNCTION_NAME bvh_intersect_shadow_all_hair_motion
221# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_MOTION | BVH_POINTCLOUD
234 *num_recorded_hits = 0;
243 return kernel_embree_intersect_shadow_all(
244 kg,
state, ray, visibility, max_hits, num_recorded_hits, throughput);
251# ifdef __OBJECT_MOTION__
255 return bvh_intersect_shadow_all_hair_motion(
256 kg, ray,
state, visibility, max_hits, num_recorded_hits, throughput);
260 return bvh_intersect_shadow_all_motion(
261 kg, ray,
state, visibility, max_hits, num_recorded_hits, throughput);
267 return bvh_intersect_shadow_all_hair(
268 kg, ray,
state, visibility, max_hits, num_recorded_hits, throughput);
272 return bvh_intersect_shadow_all(
273 kg, ray,
state, visibility, max_hits, num_recorded_hits, throughput);
283# if defined(__VOLUME__) && !defined(__VOLUME_RECORD_ALL__)
285# define BVH_FUNCTION_NAME bvh_intersect_volume
286# define BVH_FUNCTION_FEATURES BVH_HAIR
289# if defined(__OBJECT_MOTION__)
290# define BVH_FUNCTION_NAME bvh_intersect_volume_motion
291# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_HAIR
298 const uint visibility)
308 return kernel_embree_intersect_volume(kg, ray, isect, visibility);
315# ifdef __OBJECT_MOTION__
317 return bvh_intersect_volume_motion(kg, ray, isect, visibility);
321 return bvh_intersect_volume(kg, ray, isect, visibility);
332# if defined(__VOLUME__) && defined(__VOLUME_RECORD_ALL__)
334# define BVH_FUNCTION_NAME bvh_intersect_volume_all
335# define BVH_FUNCTION_FEATURES BVH_HAIR
338# if defined(__OBJECT_MOTION__)
339# define BVH_FUNCTION_NAME bvh_intersect_volume_all_motion
340# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_HAIR
348 const uint visibility)
358 return kernel_embree_intersect_volume(kg, ray, isect, max_hits, visibility);
365# ifdef __OBJECT_MOTION__
367 return bvh_intersect_volume_all_motion(kg, ray, isect, max_hits, visibility);
371 return bvh_intersect_volume_all(kg, ray, isect, max_hits, visibility);
383# undef BVH_FUNCTION_FULL_NAME
CCL_NAMESPACE_BEGIN ccl_device_inline bool intersection_ray_valid(ccl_private const Ray *ray)
#define kernel_assert(cond)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define CCL_NAMESPACE_END
#define IF_NOT_USING_EMBREE
ccl_device_intersect bool scene_intersect(KernelGlobals kg, ccl_private const Ray *ray, const uint visibility, ccl_private Intersection *isect)
ccl_device_intersect bool scene_intersect_shadow(KernelGlobals kg, ccl_private const Ray *ray, const uint visibility)
#define ccl_device_intersect
ccl_device_intersect bool kernel_embree_intersect(KernelGlobals kg, ccl_private const Ray *ray, const uint visibility, ccl_private Intersection *isect)
IntegratorShadowStateCPU *ccl_restrict IntegratorShadowState