9 #ifndef VOLUME_READ_LAMBDA
10 # define VOLUME_READ_LAMBDA(function_call) \
11 auto volume_read_lambda_pass = [=](const int i) { return function_call; };
12 # define VOLUME_WRITE_LAMBDA(function_call) \
13 auto volume_write_lambda_pass = [=](const int i, VolumeStack entry) { function_call; };
21 template<
typename StackReadOp,
typename StackWriteOp>
24 StackReadOp stack_read,
25 StackWriteOp stack_write)
36 for (
int i = 0;; i++) {
42 if (entry.
object == sd->object && entry.
shader == sd->shader) {
45 entry = stack_read(i + 1);
46 stack_write(i, entry);
64 if (entry.
object == sd->object && entry.
shader == sd->shader) {
77 stack_write(i, new_entry);
78 stack_write(i + 1, empty_entry);
125 template<
typename StackReadOp>
128 float step_size = FLT_MAX;
130 for (
int i = 0;; i++) {
138 bool heterogeneous =
false;
141 heterogeneous =
true;
147 int object = entry.
object;
151 heterogeneous =
true;
158 object_step_size *=
kernel_data.integrator.volume_step_rate;
159 step_size =
fminf(object_step_size, step_size);
177 for (
int i = 0;; i++) {
#define ccl_device_inline
#define CCL_NAMESPACE_END
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
ccl_device_inline float object_volume_step_size(KernelGlobals kg, int object)
@ SD_NEED_VOLUME_ATTRIBUTES
@ SD_HETEROGENEOUS_VOLUME
@ SD_OBJECT_HAS_VOLUME_ATTRIBUTES
#define INTEGRATOR_STATE_ARRAY_WRITE(state, nested_struct, array_index, member)
IntegratorStateCPU *ccl_restrict IntegratorState
IntegratorShadowStateCPU *ccl_restrict IntegratorShadowState
ccl_device_forceinline VolumeStack integrator_state_read_volume_stack(ConstIntegratorState state, int i)
ccl_device_forceinline VolumeStack integrator_state_read_shadow_volume_stack(ConstIntegratorShadowState state, int i)
ccl_device_forceinline void integrator_state_write_shadow_volume_stack(IntegratorShadowState state, int i, VolumeStack entry)
ccl_device_forceinline void integrator_state_write_volume_stack(IntegratorState state, int i, VolumeStack entry)
#define VOLUME_WRITE_LAMBDA(function_call)
ccl_device VolumeSampleMethod volume_stack_sample_method(KernelGlobals kg, IntegratorState state)
#define VOLUME_READ_LAMBDA(function_call)
ccl_device_inline void volume_stack_clean(KernelGlobals kg, IntegratorState state)
@ VOLUME_SAMPLE_EQUIANGULAR
ccl_device float volume_stack_step_size(KernelGlobals kg, StackReadOp stack_read)
ccl_device void volume_stack_enter_exit(KernelGlobals kg, ccl_private const ShaderData *sd, StackReadOp stack_read, StackWriteOp stack_write)
ccl_device void shadow_volume_stack_enter_exit(KernelGlobals kg, IntegratorShadowState state, ccl_private const ShaderData *sd)