19#if defined(__EMBREE__)
22#elif defined(__METALRT__)
24#elif defined(__KERNEL_OPTIX__)
26#elif defined(__HIPRT__)
32#if defined(__KERNEL_ONEAPI__) && defined(WITH_EMBREE_GPU)
41static constexpr sycl::specialization_id<RTCFeatureFlags> oneapi_embree_features{
42 RTC_FEATURE_FLAG_NONE};
43# define IF_USING_EMBREE \
44 if (kernel_handler.get_specialization_constant<oneapi_embree_features>() != \
45 RTC_FEATURE_FLAG_NONE)
46# define IF_NOT_USING_EMBREE \
47 if (kernel_handler.get_specialization_constant<oneapi_embree_features>() == \
48 RTC_FEATURE_FLAG_NONE)
50# define IF_USING_EMBREE
51# define IF_NOT_USING_EMBREE
73# define BVH_FUNCTION_NAME bvh_intersect
74# define BVH_FUNCTION_FEATURES BVH_POINTCLOUD
78# define BVH_FUNCTION_NAME bvh_intersect_hair
79# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_POINTCLOUD
83# if defined(__OBJECT_MOTION__)
84# define BVH_FUNCTION_NAME bvh_intersect_motion
85# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_POINTCLOUD
89# if defined(__HAIR__) && defined(__OBJECT_MOTION__)
90# define BVH_FUNCTION_NAME bvh_intersect_hair_motion
91# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_MOTION | BVH_POINTCLOUD
97 const uint visibility,
115# ifdef __OBJECT_MOTION__
119 return bvh_intersect_hair_motion(kg, ray, isect, visibility);
123 return bvh_intersect_motion(kg, ray, isect, visibility);
129 return bvh_intersect_hair(kg, ray, isect, visibility);
133 return bvh_intersect(kg, ray, isect, visibility);
142 const uint visibility)
152# define BVH_FUNCTION_NAME bvh_intersect_local
153# define BVH_FUNCTION_FEATURES BVH_HAIR
156# if defined(__OBJECT_MOTION__)
157# define BVH_FUNCTION_NAME bvh_intersect_local_motion
158# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_HAIR
162template<
bool single_hit = false>
166 const int local_object,
172 local_isect->num_hits = 0;
181 return kernel_embree_intersect_local(
182 kg, ray, local_isect, local_object, lcg_state, max_hits);
189# ifdef __OBJECT_MOTION__
191 return bvh_intersect_local_motion(kg, ray, local_isect, local_object, lcg_state, max_hits);
194 return bvh_intersect_local(kg, ray, local_isect, local_object, lcg_state, max_hits);
204# ifdef __SHADOW_RECORD_ALL__
206# define BVH_FUNCTION_NAME bvh_intersect_shadow_all
207# define BVH_FUNCTION_FEATURES BVH_POINTCLOUD
210# if defined(__HAIR__)
211# define BVH_FUNCTION_NAME bvh_intersect_shadow_all_hair
212# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_POINTCLOUD
216# if defined(__OBJECT_MOTION__)
217# define BVH_FUNCTION_NAME bvh_intersect_shadow_all_motion
218# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_POINTCLOUD
222# if defined(__HAIR__) && defined(__OBJECT_MOTION__)
223# define BVH_FUNCTION_NAME bvh_intersect_shadow_all_hair_motion
224# define BVH_FUNCTION_FEATURES BVH_HAIR | BVH_MOTION | BVH_POINTCLOUD
231 const uint visibility,
232 const uint max_transparent_hits,
237 *num_recorded_hits = 0;
246 return kernel_embree_intersect_shadow_all(
247 kg,
state, ray, visibility, max_transparent_hits, num_recorded_hits, throughput);
254# ifdef __OBJECT_MOTION__
258 return bvh_intersect_shadow_all_hair_motion(
259 kg, ray,
state, visibility, max_transparent_hits, num_recorded_hits, throughput);
263 return bvh_intersect_shadow_all_motion(
264 kg, ray,
state, visibility, max_transparent_hits, num_recorded_hits, throughput);
270 return bvh_intersect_shadow_all_hair(
271 kg, ray,
state, visibility, max_transparent_hits, num_recorded_hits, throughput);
275 return bvh_intersect_shadow_all(
276 kg, ray,
state, visibility, max_transparent_hits, num_recorded_hits, throughput);
286# if defined(__VOLUME__) && !defined(__VOLUME_RECORD_ALL__)
288# define BVH_FUNCTION_NAME bvh_intersect_volume
289# define BVH_FUNCTION_FEATURES BVH_HAIR
292# if defined(__OBJECT_MOTION__)
293# define BVH_FUNCTION_NAME bvh_intersect_volume_motion
294# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_HAIR
301 const uint visibility)
311 return kernel_embree_intersect_volume(kg, ray, isect, visibility);
318# ifdef __OBJECT_MOTION__
320 return bvh_intersect_volume_motion(kg, ray, isect, visibility);
324 return bvh_intersect_volume(kg, ray, isect, visibility);
335# if defined(__VOLUME__) && defined(__VOLUME_RECORD_ALL__)
337# define BVH_FUNCTION_NAME bvh_intersect_volume_all
338# define BVH_FUNCTION_FEATURES BVH_HAIR
341# if defined(__OBJECT_MOTION__)
342# define BVH_FUNCTION_NAME bvh_intersect_volume_all_motion
343# define BVH_FUNCTION_FEATURES BVH_MOTION | BVH_HAIR
351 const uint visibility)
361 return kernel_embree_intersect_volume(kg, ray, isect, max_hits, visibility);
368# ifdef __OBJECT_MOTION__
370 return bvh_intersect_volume_all_motion(kg, ray, isect, max_hits, visibility);
374 return bvh_intersect_volume_all(kg, ray, isect, max_hits, visibility);
386# undef BVH_FUNCTION_FULL_NAME
CCL_NAMESPACE_BEGIN ccl_device_inline bool intersection_ray_valid(const ccl_private Ray *ray)
#define kernel_assert(cond)
const ThreadKernelGlobalsCPU * KernelGlobals
#define CCL_NAMESPACE_END
#define IF_NOT_USING_EMBREE
ccl_device_intersect bool scene_intersect(KernelGlobals kg, const ccl_private Ray *ray, const uint visibility, ccl_private Intersection *isect)
ccl_device_intersect bool scene_intersect_shadow(KernelGlobals kg, const ccl_private Ray *ray, const uint visibility)
#define ccl_device_intersect
ccl_device_intersect bool kernel_embree_intersect(KernelGlobals kg, const ccl_private Ray *ray, const uint visibility, ccl_private Intersection *isect)
IntegratorShadowStateCPU * IntegratorShadowState