19#ifdef __TRANSPARENT_SHADOWS__
51 shadow_volume_stack_enter_exit(kg,
state, shadow_sd);
67 const int num_recorded_hits,
91 shader_setup_from_volume(kg, shadow_sd, &ray,
OBJECT_NONE);
94 const float step_size = volume_stack_step_size(kg, volume_read_lambda_pass);
96 volume_shadow_heterogeneous(kg,
state, &ray, shadow_sd, throughput, step_size);
108 for (
uint hit = 0; hit < num_recorded_hits + 1; hit++) {
112 if (!integrator_state_shadow_volume_stack_is_empty(kg,
state)) {
114 integrate_transparent_volume_shadow(kg,
state, hit, num_recorded_hits, &throughput);
125 if (hit < num_recorded_hits) {
126 const Spectrum shadow = integrate_transparent_surface_shadow(kg,
state, hit);
160#ifdef __TRANSPARENT_SHADOWS__
162 const bool opaque = integrate_transparent_shadow(kg,
state, num_hits);
ccl_device_forceinline float intersection_t_offset(const float t)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define ccl_optional_struct_init
#define ccl_device_inline
#define CCL_NAMESPACE_END
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
ccl_device_forceinline void guiding_record_direct_light(KernelGlobals kg, IntegratorShadowState state)
#define AS_SHADER_DATA(shader_data_tiny_storage)
#define INTEGRATOR_SHADOW_ISECT_SIZE
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_SHADOW
#define PROFILING_INIT(kg, event)
ccl_device_inline void film_write_direct_light(KernelGlobals kg, ConstIntegratorShadowState state, ccl_global float *ccl_restrict render_buffer)
ccl_device_inline bool is_zero(const float2 a)
ccl_device void integrator_shade_shadow(KernelGlobals kg, IntegratorShadowState state, ccl_global float *ccl_restrict render_buffer)
CCL_NAMESPACE_BEGIN ccl_device_inline bool shadow_intersections_has_remaining(const uint num_hits)
ccl_device_inline void shader_setup_from_ray(KernelGlobals kg, ccl_private ShaderData *ccl_restrict sd, ccl_private const Ray *ccl_restrict ray, ccl_private const Intersection *ccl_restrict isect)
#define INTEGRATOR_STATE_WRITE(state, nested_struct, member)
#define INTEGRATOR_STATE(state, nested_struct, member)
IntegratorShadowStateCPU *ccl_restrict IntegratorShadowState
#define INTEGRATOR_STATE_ARRAY(state, nested_struct, array_index, member)
ccl_device_forceinline void integrator_shadow_path_terminate(KernelGlobals kg, IntegratorShadowState state, const DeviceKernel current_kernel)
ccl_device_forceinline void integrator_shadow_path_next(KernelGlobals kg, IntegratorShadowState state, const DeviceKernel current_kernel, const DeviceKernel next_kernel)
ccl_device_forceinline void integrator_state_read_shadow_ray(ConstIntegratorShadowState state, ccl_private Ray *ccl_restrict ray)
ccl_device_forceinline void integrator_state_read_shadow_isect(ConstIntegratorShadowState state, ccl_private Intersection *ccl_restrict isect, const int index)
ccl_device void surface_shader_eval(KernelGlobals kg, ConstIntegratorGenericState state, ccl_private ShaderData *ccl_restrict sd, ccl_global float *ccl_restrict buffer, uint32_t path_flag, bool use_caustics_storage=false)
ccl_device Spectrum surface_shader_transparency(KernelGlobals kg, ccl_private const ShaderData *sd)
SPECTRUM_DATA_TYPE Spectrum
@ PROFILING_SHADE_SHADOW_SURFACE
@ PROFILING_SHADE_SHADOW_VOLUME
@ PROFILING_SHADE_SHADOW_SETUP