[Bf-blender-cvs] [0226279d0e7] temp-cycles-denoising: Cycles Denoising: Fix AMD OpenCL support

Lukas Stockner noreply at git.blender.org
Fri Apr 14 00:57:32 CEST 2017


Commit: 0226279d0e72ec3d29a5853fac3a33883ee77986
Author: Lukas Stockner
Date:   Tue Apr 11 19:32:46 2017 +0200
Branches: temp-cycles-denoising
https://developer.blender.org/rB0226279d0e72ec3d29a5853fac3a33883ee77986

Cycles Denoising: Fix AMD OpenCL support

Credit for this patch goes to nirved.

===================================================================

M	intern/cycles/filter/CMakeLists.txt
M	intern/cycles/filter/filter_defines.h
M	intern/cycles/filter/filter_prefilter.h
M	intern/cycles/filter/kernels/opencl/filter.cl

===================================================================

diff --git a/intern/cycles/filter/CMakeLists.txt b/intern/cycles/filter/CMakeLists.txt
index 6d723583401..adea2cf1e26 100644
--- a/intern/cycles/filter/CMakeLists.txt
+++ b/intern/cycles/filter/CMakeLists.txt
@@ -170,6 +170,6 @@ endif()
 
 # OpenCL kernel
 
-delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "kernels/opencl/filter.cl" ${CYCLES_INSTALL_PATH}/kernel/kernels/opencl)
-delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "kernels/cuda/filter.cu" ${CYCLES_INSTALL_PATH}/kernel/kernels/cuda)
-delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_HEADERS}" ${CYCLES_INSTALL_PATH}/kernel)
+delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "kernels/opencl/filter.cl" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/opencl)
+delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "kernels/cuda/filter.cu" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/cuda)
+delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_HEADERS}" ${CYCLES_INSTALL_PATH}/source/filter)
diff --git a/intern/cycles/filter/filter_defines.h b/intern/cycles/filter/filter_defines.h
index e98596d21e8..4a55a91fc7f 100644
--- a/intern/cycles/filter/filter_defines.h
+++ b/intern/cycles/filter/filter_defines.h
@@ -29,7 +29,11 @@ typedef struct TilesInfo {
 	int x[4];
 	int y[4];
 	/* TODO(lukas): CUDA doesn't have uint64_t... */
+#ifdef __SPLIT_KERNEL__
+	ccl_global float *buffers[9];
+#else
 	long long int buffers[9];
+#endif
 } TilesInfo;
 
 #endif /* __FILTER_DEFINES_H__*/
diff --git a/intern/cycles/filter/filter_prefilter.h b/intern/cycles/filter/filter_prefilter.h
index e57600bde21..156992951d5 100644
--- a/intern/cycles/filter/filter_prefilter.h
+++ b/intern/cycles/filter/filter_prefilter.h
@@ -42,10 +42,10 @@ ccl_device void kernel_filter_divide_shadow(int sample,
 	int ytile = (y < tiles->y[1])? 0: ((y < tiles->y[2])? 1: 2);
 	int tile = ytile*3+xtile;
 
-	float ccl_readonly_ptr buffer = (float*) tiles->buffers[tile];
+	ccl_global float ccl_readonly_ptr buffer = (ccl_global float*) tiles->buffers[tile];
 	int offset = tiles->offsets[tile];
 	int stride = tiles->strides[tile];
-	float ccl_readonly_ptr center_buffer = buffer + (y*stride + x + offset)*buffer_pass_stride + buffer_denoising_offset;
+	ccl_global float ccl_readonly_ptr center_buffer = buffer + (y*stride + x + offset)*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);
@@ -90,7 +90,7 @@ ccl_device void kernel_filter_get_feature(int sample,
 	int xtile = (x < tiles->x[1])? 0: ((x < tiles->x[2])? 1: 2);
 	int ytile = (y < tiles->y[1])? 0: ((y < tiles->y[2])? 1: 2);
 	int tile = ytile*3+xtile;
-	float *center_buffer = ((float*) tiles->buffers[tile]) + (tiles->offsets[tile] + y*tiles->strides[tile] + x)*buffer_pass_stride + buffer_denoising_offset;
+	ccl_global float *center_buffer = ((ccl_global float*) tiles->buffers[tile]) + (tiles->offsets[tile] + y*tiles->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/filter/kernels/opencl/filter.cl b/intern/cycles/filter/kernels/opencl/filter.cl
index fd381f1e56f..e71c88fd54b 100644
--- a/intern/cycles/filter/kernels/opencl/filter.cl
+++ b/intern/cycles/filter/kernels/opencl/filter.cl
@@ -16,9 +16,9 @@
 
 /* OpenCL kernel entry points */
 
-#include "../../filter_compat_opencl.h"
+#include "filter/filter_compat_opencl.h"
 
-#include "../../filter_kernel.h"
+#include "filter/filter_kernel.h"
 
 /* kernels */
 
@@ -276,4 +276,4 @@ __kernel void kernel_ocl_filter_set_tiles(ccl_global TilesInfo* tiles,
 		tiles->buffers[7] = buffer_8;
 		tiles->buffers[8] = buffer_9;
 	}
-}
\ No newline at end of file
+}




More information about the Bf-blender-cvs mailing list