Blender  V3.3
adaptive_sampling.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
5 
6 #include "util/math.h"
7 
9 
11 {
12 }
13 
14 int AdaptiveSampling::align_samples(int start_sample, int num_samples) const
15 {
16  if (!use) {
17  return num_samples;
18  }
19 
20  /*
21  * The naive implementation goes as following:
22  *
23  * int count = 1;
24  * while (!need_filter(start_sample + count - 1) && count < num_samples) {
25  * ++count;
26  * }
27  * return count;
28  */
29 
30  /* 0-based sample index at which first filtering will happen. */
31  const int first_filter_sample = (min_samples + 1) | (adaptive_step - 1);
32 
33  /* Allow as many samples as possible until the first filter sample. */
34  if (start_sample + num_samples <= first_filter_sample) {
35  return num_samples;
36  }
37 
38  const int next_filter_sample = max(first_filter_sample, start_sample | (adaptive_step - 1));
39 
40  const int num_samples_until_filter = next_filter_sample - start_sample + 1;
41 
42  return min(num_samples_until_filter, num_samples);
43 }
44 
46 {
47  if (!use) {
48  return false;
49  }
50 
51  if (sample <= min_samples) {
52  return false;
53  }
54 
55  return (sample & (adaptive_step - 1)) == (adaptive_step - 1);
56 }
57 
bool need_filter(int sample) const
int align_samples(int start_sample, int num_samples) const
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
ccl_gpu_kernel_postfix ccl_global float int int int int ccl_global const float int int int int int int int int int int int int num_samples
#define min(a, b)
Definition: sort.c:35
float max