23 const uint aux_w_offset =
kernel_data.film.pass_adaptive_aux_buffer + 3;
24 return buffer[aux_w_offset] == 0.0f;
33 const float threshold,
41 const int render_pixel_index = offset +
x +
y * stride;
48 if (!
reset &&
A.w != 0.0f) {
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;
unsigned long long int uint64_t
void reset()
clear internal cached data and reset random seed
#define kernel_assert(cond)
#define ccl_device_forceinline
const ThreadKernelGlobalsCPU * KernelGlobals
#define CCL_NAMESPACE_END
ccl_gpu_kernel_postfix ccl_global KernelWorkTile const int ccl_global float * render_buffer
ccl_device void film_adaptive_sampling_filter_y(KernelGlobals kg, ccl_global float *render_buffer, const int x, const int start_y, const int height, const int offset, const 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_x(KernelGlobals kg, ccl_global float *render_buffer, const int y, const int start_x, const int width, const int offset, const int stride)
ccl_device bool film_adaptive_sampling_convergence_check(KernelGlobals kg, ccl_global float *render_buffer, const int x, const int y, const float threshold, const int reset, const int offset, const int stride)
static void error(const char *str)
const IntegratorStateCPU * ConstIntegratorState
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)