23 const uint aux_w_offset =
kernel_data.film.pass_adaptive_aux_buffer + 3;
24 return buffer[aux_w_offset] == 0.0f;
41 const int render_pixel_index = offset + x + y * stride;
48 if (!
reset && A.w != 0.0f) {
63 const float error_difference = (
fabsf(
I.x - A.x) +
fabsf(
I.y - A.y) +
fabsf(
I.z - A.z)) *
65 const float intensity = (
I.x +
I.y +
I.z) * intensity_scale;
74 float error_normalize;
75 if (intensity < 1.0f) {
76 error_normalize =
sqrtf(intensity);
79 error_normalize = intensity;
83 const float error = error_difference / (0.0001f + error_normalize);
84 const bool did_converge = (
error < threshold);
86 const uint aux_w_offset =
kernel_data.film.pass_adaptive_aux_buffer + 3;
87 buffer[aux_w_offset] = did_converge;
106 for (
int x = start_x; x < start_x + width; ++
x) {
107 int index = offset + x + y * stride;
109 const uint aux_w_offset =
kernel_data.film.pass_adaptive_aux_buffer + 3;
111 if (buffer[aux_w_offset] == 0.0f) {
112 if (x > start_x && !prev) {
115 buffer[aux_w_offset] = 0.0f;
121 buffer[aux_w_offset] = 0.0f;
139 for (
int y = start_y; y < start_y + height; ++
y) {
140 int index = offset + x + y * stride;
142 const uint aux_w_offset =
kernel_data.film.pass_adaptive_aux_buffer + 3;
144 if (buffer[aux_w_offset] == 0.0f) {
145 if (y > start_y && !prev) {
146 index = index - stride;
148 buffer[aux_w_offset] = 0.0f;
154 buffer[aux_w_offset] = 0.0f;
void reset()
clear internal cached data and reset random seed
#define kernel_assert(cond)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define ccl_device_forceinline
#define CCL_NAMESPACE_END
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_NAMESPACE_BEGIN ccl_device_forceinline bool film_need_sample_pixel(KernelGlobals kg, ConstIntegratorState state, ccl_global float *render_buffer)
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)
static void error(const char *str)
const IntegratorStateCPU *ccl_restrict ConstIntegratorState
unsigned __int64 uint64_t
CCL_NAMESPACE_BEGIN ccl_device_forceinline ccl_global float * film_pass_pixel_render_buffer(KernelGlobals kg, ConstIntegratorState state, ccl_global float *ccl_restrict render_buffer)
ccl_device_inline float4 kernel_read_pass_float4(ccl_global float *ccl_restrict buffer)