Blender  V3.3
megakernel.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #pragma once
5 
16 
18 
22 {
23  /* Each kernel indicates the next kernel to execute, so here we simply
24  * have to check what that kernel is and execute it. */
25  while (true) {
26  /* Handle any shadow paths before we potentially create more shadow paths. */
27  const uint32_t shadow_queued_kernel = INTEGRATOR_STATE(
28  &state->shadow, shadow_path, queued_kernel);
29  if (shadow_queued_kernel) {
30  switch (shadow_queued_kernel) {
32  integrator_intersect_shadow(kg, &state->shadow);
33  break;
36  break;
37  default:
38  kernel_assert(0);
39  break;
40  }
41  continue;
42  }
43 
44  /* Handle any AO paths before we potentially create more AO paths. */
45  const uint32_t ao_queued_kernel = INTEGRATOR_STATE(&state->ao, shadow_path, queued_kernel);
46  if (ao_queued_kernel) {
47  switch (ao_queued_kernel) {
50  break;
53  break;
54  default:
55  kernel_assert(0);
56  break;
57  }
58  continue;
59  }
60 
61  /* Then handle regular path kernels. */
62  const uint32_t queued_kernel = INTEGRATOR_STATE(state, path, queued_kernel);
63  if (queued_kernel) {
64  switch (queued_kernel) {
67  break;
70  break;
73  break;
76  break;
79  break;
82  break;
85  break;
88  break;
91  break;
92  default:
93  kernel_assert(0);
94  break;
95  }
96  continue;
97  }
98 
99  break;
100  }
101 }
102 
#define kernel_assert(cond)
Definition: cpu/compat.h:34
#define ccl_restrict
Definition: cuda/compat.h:50
#define ccl_device
Definition: cuda/compat.h:32
#define ccl_global
Definition: cuda/compat.h:43
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
const KernelGlobalsCPU *ccl_restrict KernelGlobals
ccl_device void integrator_intersect_closest(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
ccl_device void integrator_intersect_shadow(KernelGlobals kg, IntegratorShadowState state)
CCL_NAMESPACE_BEGIN ccl_device void integrator_intersect_subsurface(KernelGlobals kg, IntegratorState state)
ccl_device void integrator_intersect_volume_stack(KernelGlobals kg, IntegratorState state)
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
const int state
@ DEVICE_KERNEL_INTEGRATOR_SHADE_LIGHT
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_SUBSURFACE
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW
@ 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_INTERSECT_SHADOW
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_CLOSEST
@ DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND
CCL_NAMESPACE_BEGIN ccl_device void integrator_megakernel(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
Definition: megakernel.h:19
ccl_device void integrator_shade_background(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
ccl_device void integrator_shade_light(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
Definition: shade_light.h:73
ccl_device void integrator_shade_shadow(KernelGlobals kg, IntegratorShadowState state, ccl_global float *ccl_restrict render_buffer)
Definition: shade_shadow.h:143
ccl_device_forceinline void integrator_shade_surface(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
ccl_device_forceinline void integrator_shade_surface_mnee(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
ccl_device_forceinline void integrator_shade_surface_raytrace(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
CCL_NAMESPACE_BEGIN ccl_device void integrator_shade_volume(KernelGlobals kg, IntegratorState state, ccl_global float *ccl_restrict render_buffer)
IntegratorStateCPU *ccl_restrict IntegratorState
Definition: state.h:147
#define INTEGRATOR_STATE(state, nested_struct, member)
Definition: state.h:154
unsigned int uint32_t
Definition: stdint.h:80