17 #ifndef __KERNEL_ADAPTIVE_SAMPLING_H__
18 #define __KERNEL_ADAPTIVE_SAMPLING_H__
46 float sample_multiplier)
76 if (light_flag &
PASSMASK(DIFFUSE_INDIRECT))
78 if (light_flag &
PASSMASK(GLOSSY_INDIRECT))
80 if (light_flag &
PASSMASK(TRANSMISSION_INDIRECT))
82 kernel_data.film.pass_transmission_indirect) *= sample_multiplier;
83 if (light_flag &
PASSMASK(VOLUME_INDIRECT))
85 if (light_flag &
PASSMASK(DIFFUSE_DIRECT))
87 if (light_flag &
PASSMASK(GLOSSY_DIRECT))
89 if (light_flag &
PASSMASK(TRANSMISSION_DIRECT))
91 kernel_data.film.pass_transmission_direct) *= sample_multiplier;
92 if (light_flag &
PASSMASK(VOLUME_DIRECT))
97 if (light_flag &
PASSMASK(BACKGROUND))
102 if (light_flag &
PASSMASK(DIFFUSE_COLOR))
104 if (light_flag &
PASSMASK(GLOSSY_COLOR))
106 if (light_flag &
PASSMASK(TRANSMISSION_COLOR))
108 kernel_data.film.pass_transmission_color) *= sample_multiplier;
112 #ifdef __DENOISING_FEATURES__
114 # define scale_float3_variance(buffer, offset, scale) \
115 *(buffer + offset) *= scale; \
116 *(buffer + offset + 1) *= scale; \
117 *(buffer + offset + 2) *= scale; \
118 *(buffer + offset + 3) *= scale * scale; \
119 *(buffer + offset + 4) *= scale * scale; \
120 *(buffer + offset + 5) *= scale * scale;
122 # define scale_shadow_variance(buffer, offset, scale) \
123 *(buffer + offset) *= scale; \
124 *(buffer + offset + 1) *= scale; \
125 *(buffer + offset + 2) *= scale * scale;
128 scale_shadow_variance(
130 scale_shadow_variance(
133 scale_float3_variance(
140 scale_float3_variance(
143 scale_float3_variance(
145 scale_float3_variance(
149 1) *= sample_multiplier * sample_multiplier;
159 num_slots = num_slots * 2 *
kernel_data.film.cryptomatte_depth;
162 for (
int slot = 0; slot < num_slots; slot++) {
163 id_buffer[slot].
y *= sample_multiplier;
168 for (
int i = 0; i <
kernel_data.film.pass_aov_value_num; i++) {
171 for (
int i = 0; i <
kernel_data.film.pass_aov_color_num; i++) {
183 for (
int x = tile->x; x < tile->
x + tile->w; ++
x) {
184 int index = tile->offset +
x +
y * tile->stride;
188 if ((*aux).w == 0.0f) {
190 if (
x > tile->x && !prev) {
212 for (
int y = tile->y; y < tile->
y + tile->h; ++
y) {
213 int index = tile->offset +
x +
y * tile->stride;
217 if ((*aux).w == 0.0f) {
219 if (
y > tile->y && !prev) {
220 index = index - tile->stride;
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
CCL_NAMESPACE_BEGIN ccl_device void kernel_do_adaptive_stopping(KernelGlobals *kg, ccl_global float *buffer, int sample)
ccl_device bool kernel_do_adaptive_filter_x(KernelGlobals *kg, int y, ccl_global WorkTile *tile)
ccl_device void kernel_adaptive_post_adjust(KernelGlobals *kg, ccl_global float *buffer, float sample_multiplier)
ccl_device bool kernel_do_adaptive_filter_y(KernelGlobals *kg, int x, ccl_global WorkTile *tile)
#define kernel_assert(cond)
#define CCL_NAMESPACE_END
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
@ DENOISING_PASS_SHADOW_B
@ DENOISING_PASS_SHADOW_A
static void error(const char *str)
static void sample(SocketReader *reader, int x, int y, float color[4])
__forceinline bool any(const avxb &b)