Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2021-09-21 18:03:22 +0300
committerSergey Sharybin <sergey@blender.org>2021-10-05 17:19:14 +0300
commit6e268a749fee16b442bcb3fba6cb6e08850d8389 (patch)
treeeffa2244461bc000856218ec44b8990305aac91c /intern/cycles/kernel/device
parent758f3f7456ac1e31f411c4ac1b19760ad6e5539c (diff)
Fix adaptive sampling artifacts on tile boundaries
Implement an overscan support for tiles, so that adaptive sampling can rely on the pixels neighbourhood. Differential Revision: https://developer.blender.org/D12599
Diffstat (limited to 'intern/cycles/kernel/device')
-rw-r--r--intern/cycles/kernel/device/gpu/kernel.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/intern/cycles/kernel/device/gpu/kernel.h b/intern/cycles/kernel/device/gpu/kernel.h
index 7b79c0aedfa..3379114fc62 100644
--- a/intern/cycles/kernel/device/gpu/kernel.h
+++ b/intern/cycles/kernel/device/gpu/kernel.h
@@ -424,8 +424,12 @@ ccl_device_inline void kernel_gpu_film_convert_common(const KernelFilmConvert *k
return;
}
- const uint64_t render_buffer_offset = (uint64_t)render_pixel_index * kfilm_convert->pass_stride;
- ccl_global const float *buffer = render_buffer + render_buffer_offset;
+ const int x = render_pixel_index % width;
+ const int y = render_pixel_index / width;
+
+ ccl_global const float *buffer = render_buffer + offset + x * kfilm_convert->pass_stride +
+ y * stride * kfilm_convert->pass_stride;
+
ccl_global float *pixel = pixels +
(render_pixel_index + dst_offset) * kfilm_convert->pixel_stride;
@@ -451,17 +455,17 @@ ccl_device_inline void kernel_gpu_film_convert_half_rgba_common_rgba(
return;
}
- const uint64_t render_buffer_offset = (uint64_t)render_pixel_index * kfilm_convert->pass_stride;
- ccl_global const float *buffer = render_buffer + render_buffer_offset;
+ const int x = render_pixel_index % width;
+ const int y = render_pixel_index / width;
+
+ ccl_global const float *buffer = render_buffer + offset + x * kfilm_convert->pass_stride +
+ y * stride * kfilm_convert->pass_stride;
float pixel[4];
processor(kfilm_convert, buffer, pixel);
film_apply_pass_pixel_overlays_rgba(kfilm_convert, buffer, pixel);
- const int x = render_pixel_index % width;
- const int y = render_pixel_index / width;
-
ccl_global half4 *out = ((ccl_global half4 *)rgba) + rgba_offset + y * rgba_stride + x;
float4_store_half((ccl_global half *)out, make_float4(pixel[0], pixel[1], pixel[2], pixel[3]));
}