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:
authorLukas Stockner <lukas.stockner@freenet.de>2018-07-04 15:02:38 +0300
committerLukas Stockner <lukas.stockner@freenet.de>2018-07-04 15:38:03 +0300
commitc9608047472ae2b08d2d4b188fca5211a6c0b925 (patch)
tree171bc5203f26edf51f0cdc2dc22d33e8b05725bb /intern/cycles/kernel
parentf1525cf53462b5841f2f50283ae2926ab990170e (diff)
Cycles Denoising: Pass tile buffers to every OpenCL kernel to conform to standard and get rid of set_tile_info
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r--intern/cycles/kernel/filter/filter_defines.h25
-rw-r--r--intern/cycles/kernel/filter/filter_prefilter.h8
-rw-r--r--intern/cycles/kernel/kernels/opencl/filter.cl32
3 files changed, 33 insertions, 32 deletions
diff --git a/intern/cycles/kernel/filter/filter_defines.h b/intern/cycles/kernel/filter/filter_defines.h
index 57d3d90594f..d48ea3ac1d6 100644
--- a/intern/cycles/kernel/filter/filter_defines.h
+++ b/intern/cycles/kernel/filter/filter_defines.h
@@ -35,4 +35,29 @@ typedef struct TileInfo {
#endif
} TileInfo;
+#ifdef __KERNEL_OPENCL__
+# define CCL_FILTER_TILE_INFO ccl_global TileInfo* tile_info, \
+ ccl_global float *tile_buffer_1, \
+ ccl_global float *tile_buffer_2, \
+ ccl_global float *tile_buffer_3, \
+ ccl_global float *tile_buffer_4, \
+ ccl_global float *tile_buffer_5, \
+ ccl_global float *tile_buffer_6, \
+ ccl_global float *tile_buffer_7, \
+ ccl_global float *tile_buffer_8, \
+ ccl_global float *tile_buffer_9
+# define CCL_FILTER_TILE_INFO_ARG tile_info, \
+ tile_buffer_1, tile_buffer_2, tile_buffer_3, \
+ tile_buffer_4, tile_buffer_5, tile_buffer_6, \
+ tile_buffer_7, tile_buffer_8, tile_buffer_9
+# define ccl_get_tile_buffer(id) (tile_buffer_ ## id)
+#else
+# ifdef __KERNEL_CUDA__
+# define CCL_FILTER_TILE_INFO ccl_global TileInfo* tile_info
+# else
+# define CCL_FILTER_TILE_INFO TileInfo* tile_info
+# endif
+# define ccl_get_tile_buffer(id) (tile_info->buffers[id])
+#endif
+
#endif /* __FILTER_DEFINES_H__*/
diff --git a/intern/cycles/kernel/filter/filter_prefilter.h b/intern/cycles/kernel/filter/filter_prefilter.h
index 9513bf46bd7..3507f80df46 100644
--- a/intern/cycles/kernel/filter/filter_prefilter.h
+++ b/intern/cycles/kernel/filter/filter_prefilter.h
@@ -26,7 +26,7 @@ CCL_NAMESPACE_BEGIN
* bufferVariance: The buffer-based variance of the shadow feature. Unbiased, but quite noisy.
*/
ccl_device void kernel_filter_divide_shadow(int sample,
- ccl_global TileInfo *tile_info,
+ CCL_FILTER_TILE_INFO,
int x, int y,
ccl_global float *unfilteredA,
ccl_global float *unfilteredB,
@@ -43,7 +43,7 @@ ccl_device void kernel_filter_divide_shadow(int sample,
int offset = tile_info->offsets[tile];
int stride = tile_info->strides[tile];
- const ccl_global float *ccl_restrict center_buffer = (ccl_global float*) tile_info->buffers[tile];
+ const ccl_global float *ccl_restrict center_buffer = (ccl_global float*) ccl_get_tile_buffer(tile);
center_buffer += (y*stride + x + offset)*buffer_pass_stride;
center_buffer += buffer_denoising_offset + 14;
@@ -79,7 +79,7 @@ ccl_device void kernel_filter_divide_shadow(int sample,
* - rect: The prefilter area (lower pixels inclusive, upper pixels exclusive).
*/
ccl_device void kernel_filter_get_feature(int sample,
- ccl_global TileInfo *tile_info,
+ CCL_FILTER_TILE_INFO,
int m_offset, int v_offset,
int x, int y,
ccl_global float *mean,
@@ -90,7 +90,7 @@ ccl_device void kernel_filter_get_feature(int sample,
int xtile = (x < tile_info->x[1])? 0: ((x < tile_info->x[2])? 1: 2);
int ytile = (y < tile_info->y[1])? 0: ((y < tile_info->y[2])? 1: 2);
int tile = ytile*3+xtile;
- ccl_global float *center_buffer = ((ccl_global float*) tile_info->buffers[tile]) + (tile_info->offsets[tile] + y*tile_info->strides[tile] + x)*buffer_pass_stride + buffer_denoising_offset;
+ ccl_global float *center_buffer = ((ccl_global float*) ccl_get_tile_buffer(tile)) + (tile_info->offsets[tile] + y*tile_info->strides[tile] + x)*buffer_pass_stride + buffer_denoising_offset;
int buffer_w = align_up(rect.z - rect.x, 4);
int idx = (y-rect.y)*buffer_w + (x - rect.x);
diff --git a/intern/cycles/kernel/kernels/opencl/filter.cl b/intern/cycles/kernel/kernels/opencl/filter.cl
index d553ee6833c..3c75754fb39 100644
--- a/intern/cycles/kernel/kernels/opencl/filter.cl
+++ b/intern/cycles/kernel/kernels/opencl/filter.cl
@@ -23,7 +23,7 @@
/* kernels */
__kernel void kernel_ocl_filter_divide_shadow(int sample,
- ccl_global TileInfo *tile_info,
+ CCL_FILTER_TILE_INFO,
ccl_global float *unfilteredA,
ccl_global float *unfilteredB,
ccl_global float *sampleVariance,
@@ -37,7 +37,7 @@ __kernel void kernel_ocl_filter_divide_shadow(int sample,
int y = prefilter_rect.y + get_global_id(1);
if(x < prefilter_rect.z && y < prefilter_rect.w) {
kernel_filter_divide_shadow(sample,
- tiles,
+ CCL_FILTER_TILE_INFO_ARG,
x, y,
unfilteredA,
unfilteredB,
@@ -51,7 +51,7 @@ __kernel void kernel_ocl_filter_divide_shadow(int sample,
}
__kernel void kernel_ocl_filter_get_feature(int sample,
- ccl_global TileInfo *tile_info,
+ CCL_FILTER_TILE_INFO,
int m_offset,
int v_offset,
ccl_global float *mean,
@@ -64,7 +64,7 @@ __kernel void kernel_ocl_filter_get_feature(int sample,
int y = prefilter_rect.y + get_global_id(1);
if(x < prefilter_rect.z && y < prefilter_rect.w) {
kernel_filter_get_feature(sample,
- tiles,
+ CCL_FILTER_TILE_INFO_ARG,
m_offset, v_offset,
x, y,
mean, variance,
@@ -276,27 +276,3 @@ __kernel void kernel_ocl_filter_finalize(ccl_global float *buffer,
buffer_params, sample);
}
}
-
-__kernel void kernel_ocl_filter_set_tile_info(ccl_global TileInfo* tile_info,
- ccl_global float *buffer_1,
- ccl_global float *buffer_2,
- ccl_global float *buffer_3,
- ccl_global float *buffer_4,
- ccl_global float *buffer_5,
- ccl_global float *buffer_6,
- ccl_global float *buffer_7,
- ccl_global float *buffer_8,
- ccl_global float *buffer_9)
-{
- if((get_global_id(0) == 0) && (get_global_id(1) == 0)) {
- tile_info->buffers[0] = buffer_1;
- tile_info->buffers[1] = buffer_2;
- tile_info->buffers[2] = buffer_3;
- tile_info->buffers[3] = buffer_4;
- tile_info->buffers[4] = buffer_5;
- tile_info->buffers[5] = buffer_6;
- tile_info->buffers[6] = buffer_7;
- tile_info->buffers[7] = buffer_8;
- tile_info->buffers[8] = buffer_9;
- }
-}