23 const int shader_flags)
54 if (probability != 1.0f) {
57 if (probability == 0.0f || terminate >= probability) {
75 #ifdef __SHADOW_CATCHER__
126 const bool use_caustics =
kernel_data.integrator.use_caustics &&
133 else if (use_raytrace_kernel) {
143 template<DeviceKernel current_kernel>
155 const bool use_caustics =
kernel_data.integrator.use_caustics &&
163 else if (use_raytrace_kernel) {
174 template<DeviceKernel current_kernel>
188 integrator_intersect_next_kernel_after_shadow_catcher_volume<current_kernel>(kg,
state);
196 template<DeviceKernel current_kernel>
233 const bool use_caustics =
kernel_data.integrator.use_caustics &&
240 else if (use_raytrace_kernel) {
249 #ifdef __SHADOW_CATCHER__
269 template<DeviceKernel current_kernel>
287 const bool use_caustics =
kernel_data.integrator.use_caustics &&
295 else if (use_raytrace_kernel) {
304 #ifdef __SHADOW_CATCHER__
335 ray.tmax =
kernel_data.integrator.ao_bounces_distance;
338 const float object_ao_distance =
kernel_data_fetch(objects, last_isect_object).ao_distance;
339 if (object_ao_distance != 0.0f) {
340 ray.tmax = object_ao_distance;
349 ray.self.object = last_isect_object;
350 ray.self.prim = last_isect_prim;
369 bool from_caustic_caster =
false;
370 bool from_caustic_receiver =
false;
379 if (from_caustic_caster && has_receiver_ancestor)
381 if (from_caustic_receiver)
392 kg,
state, &ray, &isect, last_isect_prim, last_isect_object, last_type, path_flag) ||
400 integrator_intersect_next_kernel<DEVICE_KERNEL_INTEGRATOR_INTERSECT_CLOSEST>(
_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_forceinline
#define ccl_optional_struct_init
#define CCL_NAMESPACE_END
ccl_device_forceinline int intersection_get_object_flags(KernelGlobals kg, ccl_private const Intersection *ccl_restrict isect)
ccl_device_forceinline int intersection_get_shader(KernelGlobals kg, ccl_private const Intersection *ccl_restrict isect)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
CCL_NAMESPACE_BEGIN ccl_device_forceinline bool integrator_intersect_terminate(KernelGlobals kg, IntegratorState state, const int shader_flags)
ccl_device_forceinline void integrator_intersect_next_kernel_after_volume(KernelGlobals kg, IntegratorState state, ccl_private const Intersection *ccl_restrict isect, ccl_global float *ccl_restrict render_buffer)
ccl_device_forceinline void integrator_intersect_next_kernel(KernelGlobals kg, IntegratorState state, ccl_private const Intersection *ccl_restrict isect, ccl_global float *ccl_restrict render_buffer, const bool hit)
ccl_device void integrator_intersect_closest(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
ccl_device_intersect bool scene_intersect(KernelGlobals kg, ccl_private const Ray *ray, const uint visibility, ccl_private Intersection *isect)
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
ccl_device bool lights_intersect(KernelGlobals kg, IntegratorState state, ccl_private const Ray *ccl_restrict ray, ccl_private Intersection *ccl_restrict isect, const int last_prim, const int last_object, const int last_type, const uint32_t path_flag)
@ PATH_MNEE_RECEIVER_ANCESTOR
@ PATH_MNEE_CULL_LIGHT_CONNECTION
@ SD_HAS_TRANSPARENT_SHADOW
@ PATH_RAY_SHADOW_CATCHER_HIT
@ PATH_RAY_TERMINATE_AFTER_TRANSPARENT
@ PATH_RAY_TERMINATE_AFTER_VOLUME
@ PATH_RAY_SHADOW_CATCHER_PASS
@ PATH_RAY_TERMINATE_IN_NEXT_VOLUME
@ PATH_RAY_SHADOW_CATCHER_BACKGROUND
@ PATH_RAY_TERMINATE_ON_NEXT_SURFACE
@ SD_OBJECT_CAUSTICS_RECEIVER
@ SD_OBJECT_CAUSTICS_CASTER
@ DEVICE_KERNEL_INTEGRATOR_SHADE_LIGHT
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_VOLUME_STACK
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_RAYTRACE
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_MNEE
@ DEVICE_KERNEL_INTEGRATOR_SHADE_VOLUME
@ DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND
#define PROFILING_INIT(kg, event)
ccl_device_inline float path_state_continuation_probability(KernelGlobals kg, ConstIntegratorState state, const uint32_t path_flag)
ccl_device_inline bool path_state_ao_bounce(KernelGlobals kg, ConstIntegratorState state)
ccl_device_inline float path_state_rng_1D(KernelGlobals kg, ccl_private const RNGState *rng_state, int dimension)
ccl_device_inline void path_state_rng_load(ConstIntegratorState state, ccl_private RNGState *rng_state)
ccl_device_inline uint path_state_ray_visibility(ConstIntegratorState state)
CCL_NAMESPACE_BEGIN ccl_device_inline bool kernel_shadow_catcher_is_path_split_bounce(KernelGlobals kg, IntegratorState state, const int object_flag)
IntegratorStateCPU *ccl_restrict IntegratorState
#define INTEGRATOR_STATE_WRITE(state, nested_struct, member)
#define INTEGRATOR_STATE(state, nested_struct, member)
ccl_device_forceinline void integrator_path_next_sorted(KernelGlobals kg, IntegratorState state, const DeviceKernel current_kernel, const DeviceKernel next_kernel, const uint32_t key)
ccl_device_forceinline void integrator_path_terminate(KernelGlobals kg, IntegratorState state, const DeviceKernel current_kernel)
ccl_device_forceinline void integrator_path_next(KernelGlobals kg, IntegratorState state, const DeviceKernel current_kernel, const DeviceKernel next_kernel)
ccl_device_forceinline void integrator_path_init_sorted(KernelGlobals kg, IntegratorState state, const DeviceKernel next_kernel, const uint32_t key)
ccl_device_forceinline void integrator_path_init(KernelGlobals kg, IntegratorState state, const DeviceKernel next_kernel)
ccl_device_forceinline void integrator_state_write_isect(KernelGlobals kg, IntegratorState state, ccl_private const Intersection *ccl_restrict isect)
ccl_device_forceinline void integrator_state_read_ray(KernelGlobals kg, ConstIntegratorState state, ccl_private Ray *ccl_restrict ray)
ccl_device_forceinline bool integrator_state_volume_stack_is_empty(KernelGlobals kg, ConstIntegratorState state)
ccl_device_inline IntegratorState integrator_state_shadow_catcher_split(KernelGlobals kg, IntegratorState state)
ccl_device_forceinline void integrator_state_read_isect(KernelGlobals kg, ConstIntegratorState state, ccl_private Intersection *ccl_restrict isect)
@ PROFILING_INTERSECT_CLOSEST