44# define STUB_ASSERT(arch, name) \
45 assert(!(#name " kernel stub for architecture " #arch " was called!"))
56# define KERNEL_INVOKE(name, ...) (STUB_ASSERT(KERNEL_ARCH, name), 0)
58# define KERNEL_INVOKE(name, ...) integrator_##name(__VA_ARGS__)
63#define DEFINE_INTEGRATOR_INIT_KERNEL(name) \
64 bool KERNEL_FUNCTION_FULL_NAME(integrator_##name)(const KernelGlobalsCPU *kg, \
65 IntegratorStateCPU *state, \
66 KernelWorkTile *tile, \
67 ccl_global float *render_buffer) \
69 return KERNEL_INVOKE( \
70 name, kg, state, tile, render_buffer, tile->x, tile->y, tile->start_sample); \
73#define DEFINE_INTEGRATOR_KERNEL(name) \
74 void KERNEL_FUNCTION_FULL_NAME(integrator_##name)(const KernelGlobalsCPU *kg, \
75 IntegratorStateCPU *state) \
77 KERNEL_INVOKE(name, kg, state); \
80#define DEFINE_INTEGRATOR_SHADE_KERNEL(name) \
81 void KERNEL_FUNCTION_FULL_NAME(integrator_##name)( \
82 const KernelGlobalsCPU *kg, IntegratorStateCPU *state, ccl_global float *render_buffer) \
84 KERNEL_INVOKE(name, kg, state, render_buffer); \
87#define DEFINE_INTEGRATOR_SHADOW_KERNEL(name) \
88 void KERNEL_FUNCTION_FULL_NAME(integrator_##name)(const KernelGlobalsCPU *kg, \
89 IntegratorStateCPU *state) \
91 KERNEL_INVOKE(name, kg, &state->shadow); \
94#define DEFINE_INTEGRATOR_SHADOW_SHADE_KERNEL(name) \
95 void KERNEL_FUNCTION_FULL_NAME(integrator_##name)( \
96 const KernelGlobalsCPU *kg, IntegratorStateCPU *state, ccl_global float *render_buffer) \
98 KERNEL_INVOKE(name, kg, &state->shadow, render_buffer); \
231# define KERNEL_FILM_CONVERT_FUNCTION(name, is_float) \
232 void KERNEL_FUNCTION_FULL_NAME(film_convert_##name)(const KernelFilmConvert *kfilm_convert, \
233 const float *buffer, \
236 const int buffer_stride, \
237 const int pixel_stride) \
239 STUB_ASSERT(KERNEL_ARCH, film_convert_##name); \
241 void KERNEL_FUNCTION_FULL_NAME(film_convert_half_rgba_##name)( \
242 const KernelFilmConvert *kfilm_convert, \
243 const float *buffer, \
246 const int buffer_stride) \
248 STUB_ASSERT(KERNEL_ARCH, film_convert_##name); \
253# define KERNEL_FILM_CONVERT_FUNCTION(name, is_float) \
254 void KERNEL_FUNCTION_FULL_NAME(film_convert_##name)(const KernelFilmConvert *kfilm_convert, \
255 const float *buffer, \
258 const int buffer_stride, \
259 const int pixel_stride) \
261 for (int i = 0; i < width; i++, buffer += buffer_stride, pixel += pixel_stride) { \
262 film_get_pass_pixel_##name(kfilm_convert, buffer, pixel); \
265 void KERNEL_FUNCTION_FULL_NAME(film_convert_half_rgba_##name)( \
266 const KernelFilmConvert *kfilm_convert, \
267 const float *buffer, \
270 const int buffer_stride) \
272 for (int i = 0; i < width; i++, buffer += buffer_stride, pixel++) { \
273 float pixel_rgba[4] = {0.0f, 0.0f, 0.0f, 1.0f}; \
274 film_get_pass_pixel_##name(kfilm_convert, buffer, pixel_rgba); \
276 pixel_rgba[1] = pixel_rgba[0]; \
277 pixel_rgba[2] = pixel_rgba[0]; \
279 film_apply_pass_pixel_overlays_rgba(kfilm_convert, buffer, pixel_rgba); \
280 *pixel = float4_to_half4_display( \
281 make_float4(pixel_rgba[0], pixel_rgba[1], pixel_rgba[2], pixel_rgba[3])); \
302#undef KERNEL_FILM_CONVERT_FUNCTION
305#undef DEFINE_INTEGRATOR_KERNEL
306#undef DEFINE_INTEGRATOR_SHADE_KERNEL
307#undef DEFINE_INTEGRATOR_INIT_KERNEL
void reset()
clear internal cached data and reset random seed
ccl_device_inline void film_cryptomatte_post(KernelGlobals kg, ccl_global float *render_buffer, int pixel_index)
#define CCL_NAMESPACE_END
CCL_NAMESPACE_BEGIN ccl_device void kernel_displace_evaluate(KernelGlobals kg, ccl_global const KernelShaderEvalInput *input, ccl_global float *output, const int offset)
ccl_device void kernel_curve_shadow_transparency_evaluate(KernelGlobals kg, ccl_global const KernelShaderEvalInput *input, ccl_global float *output, const int offset)
ccl_device void kernel_background_evaluate(KernelGlobals kg, ccl_global const KernelShaderEvalInput *input, ccl_global float *output, const int offset)
#define KERNEL_FUNCTION_FULL_NAME(name)
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
ccl_device bool film_adaptive_sampling_convergence_check(KernelGlobals kg, ccl_global float *render_buffer, int x, int y, float threshold, int reset, int offset, int stride)
ccl_device void film_adaptive_sampling_filter_x(KernelGlobals kg, ccl_global float *render_buffer, int y, int start_x, int width, int offset, int stride)
ccl_device void film_adaptive_sampling_filter_y(KernelGlobals kg, ccl_global float *render_buffer, int x, int start_y, int height, int offset, int stride)
#define DEFINE_INTEGRATOR_INIT_KERNEL(name)
#define KERNEL_FILM_CONVERT_FUNCTION(name, is_float)
void KERNEL_FUNCTION_FULL_NAME adaptive_sampling_filter_x(const KernelGlobalsCPU *kg, ccl_global float *render_buffer, int y, int start_x, int width, int offset, int stride)
#define DEFINE_INTEGRATOR_SHADE_KERNEL(name)
#define DEFINE_INTEGRATOR_KERNEL(name)
void KERNEL_FUNCTION_FULL_NAME cryptomatte_postprocess(const KernelGlobalsCPU *kg, ccl_global float *render_buffer, int pixel_index)
void KERNEL_FUNCTION_FULL_NAME shader_eval_background(const KernelGlobalsCPU *kg, const KernelShaderEvalInput *input, float *output, const int offset)
void KERNEL_FUNCTION_FULL_NAME shader_eval_displace(const KernelGlobalsCPU *kg, const KernelShaderEvalInput *input, float *output, const int offset)
#define DEFINE_INTEGRATOR_SHADOW_SHADE_KERNEL(name)
#define DEFINE_INTEGRATOR_SHADOW_KERNEL(name)
bool KERNEL_FUNCTION_FULL_NAME adaptive_sampling_convergence_check(const KernelGlobalsCPU *kg, ccl_global float *render_buffer, int x, int y, float threshold, int reset, int offset, int stride)
void KERNEL_FUNCTION_FULL_NAME adaptive_sampling_filter_y(const KernelGlobalsCPU *kg, ccl_global float *render_buffer, int x, int start_y, int height, int offset, int stride)
void KERNEL_FUNCTION_FULL_NAME shader_eval_curve_shadow_transparency(const KernelGlobalsCPU *kg, const KernelShaderEvalInput *input, float *output, const int offset)