Commit: 1d0d9fa081e5f661f658e1798d5c5641968fe29d
Author: Sergey Sharybin
Date:   Fri May 8 19:59:29 2015 +0500
Branches: cycles_kernel_split
https://developer.blender.org/rB1d0d9fa081e5f661f658e1798d5c5641968fe29d

Cycles kernel split: Make opencl_device closer to master branch

Makes it easier to read the diff.

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

M       intern/cycles/device/device_opencl.cpp

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

diff --git a/intern/cycles/device/device_opencl.cpp 
b/intern/cycles/device/device_opencl.cpp
index 9d1edcb..8ef422d 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -48,8 +48,11 @@ CCL_NAMESPACE_BEGIN
 #define SPLIT_KERNEL_LOCAL_SIZE_X 64
 #define SPLIT_KERNEL_LOCAL_SIZE_Y 1
 
-/* This value may be tuned according to the scene we are rendering */
-/* modifying PATH_ITER_INC_FACTOR value proportional to number of expected 
ray-bounces will improve performance */
+/* This value may be tuned according to the scene we are rendering.
+ *
+ * Modifying PATH_ITER_INC_FACTOR value proportional to number of expected
+ * ray-bounces will improve performance.
+ */
 #define PATH_ITER_INC_FACTOR 8
 
 /*
@@ -297,7 +300,7 @@ public:
                        /* Get program related to megakernel */
                        program = get_something<cl_program>(platform, device, 
&Slot::ocl_dev_megakernel_program, slot_locker);
                } else {
-                       fprintf(stderr, "Invalid program name in OpenCLCache 
\n");
+                       assert(!"Invalid program name");
                }
 
                if(!program)
@@ -334,7 +337,7 @@ public:
                else if(program_name == OCL_DEV_MEGAKERNEL_PROGRAM) {
                        store_something<cl_program>(platform, device, program, 
&Slot::ocl_dev_megakernel_program, slot_locker);
                } else {
-                       fprintf(stderr, "Invalid program name in OpenCLCache 
\n");
+                       assert(!"Invalid program name\n");
                        return;
                }
 
@@ -372,13 +375,12 @@ public:
        cl_command_queue cqCommandQueue;
        cl_platform_id cpPlatform;
        cl_device_id cdDevice;
-       cl_int ciErr;
-
-       cl_kernel ckShaderKernel;
-       cl_kernel ckBakeKernel;
+       cl_program cpProgram;
        cl_kernel ckFilmConvertByteKernel;
        cl_kernel ckFilmConvertHalfFloatKernel;
-       cl_program cpProgram;
+       cl_kernel ckShaderKernel;
+       cl_kernel ckBakeKernel;
+       cl_int ciErr;
 
        typedef map<string, device_vector<uchar>*> ConstMemMap;
        typedef map<string, device_ptr> MemMap;
@@ -413,6 +415,7 @@ public:
 #define opencl_assert(stmt) \
        { \
                cl_int err = stmt; \
+               \
                if(err != CL_SUCCESS) { \
                        string message = string_printf("OpenCL error: %s in 
%s", clewErrorString(err), #stmt); \
                        if(error_msg == "") \
@@ -435,20 +438,19 @@ public:
        }
 
        OpenCLDeviceBase(DeviceInfo& info, Stats &stats, bool background_)
-               : Device(info, stats, background_)
+       : Device(info, stats, background_)
        {
                cpPlatform = NULL;
                cdDevice = NULL;
                cxContext = NULL;
                cqCommandQueue = NULL;
-               null_mem = 0;
-               device_initialized = false;
-
-               ckShaderKernel = NULL;
-               ckBakeKernel = NULL;
+               cpProgram = NULL;
                ckFilmConvertByteKernel = NULL;
                ckFilmConvertHalfFloatKernel = NULL;
-               cpProgram = NULL;
+               ckShaderKernel = NULL;
+               ckBakeKernel = NULL;
+               null_mem = 0;
+               device_initialized = false;
 
                /* setup platform */
                cl_uint num_platforms;
@@ -596,174 +598,6 @@ public:
                return true;
        }
 
-       string device_md5_hash(string kernel_custom_build_option)
-       {
-               MD5Hash md5;
-               char version[256], driver[256], name[256], vendor[256];
-
-               clGetPlatformInfo(cpPlatform, CL_PLATFORM_VENDOR, 
sizeof(vendor), &vendor, NULL);
-               clGetDeviceInfo(cdDevice, CL_DEVICE_VERSION, sizeof(version), 
&version, NULL);
-               clGetDeviceInfo(cdDevice, CL_DEVICE_NAME, sizeof(name), &name, 
NULL);
-               clGetDeviceInfo(cdDevice, CL_DRIVER_VERSION, sizeof(driver), 
&driver, NULL);
-
-               md5.append((uint8_t*)vendor, strlen(vendor));
-               md5.append((uint8_t*)version, strlen(version));
-               md5.append((uint8_t*)name, strlen(name));
-               md5.append((uint8_t*)driver, strlen(driver));
-
-               string options;
-
-               options = opencl_kernel_build_options(platform_name) + 
kernel_custom_build_option;
-               md5.append((uint8_t*)options.c_str(), options.size());
-
-               return md5.get_hex();
-       }
-
-       ~OpenCLDeviceBase()
-       {
-
-               if(null_mem)
-                       clReleaseMemObject(CL_MEM_PTR(null_mem));
-
-               ConstMemMap::iterator mt;
-               for(mt = const_mem_map.begin(); mt != const_mem_map.end(); 
mt++) {
-                       mem_free(*(mt->second));
-                       delete mt->second;
-               }
-
-               if(ckBakeKernel)
-                       clReleaseKernel(ckBakeKernel);
-
-               if(ckShaderKernel)
-                       clReleaseKernel(ckShaderKernel);
-
-               if(ckFilmConvertByteKernel)
-                       clReleaseKernel(ckFilmConvertByteKernel);
-
-               if(ckFilmConvertHalfFloatKernel)
-                       clReleaseKernel(ckFilmConvertHalfFloatKernel);
-
-               if(cpProgram)
-                       clReleaseProgram(cpProgram);
-
-               if(cqCommandQueue)
-                       clReleaseCommandQueue(cqCommandQueue);
-               if(cxContext)
-                       clReleaseContext(cxContext);
-       }
-
-       void mem_alloc(device_memory& mem, MemoryType type)
-       {
-               size_t size = mem.memory_size();
-
-               cl_mem_flags mem_flag;
-               void *mem_ptr = NULL;
-
-               if(type == MEM_READ_ONLY)
-                       mem_flag = CL_MEM_READ_ONLY;
-               else if(type == MEM_WRITE_ONLY)
-                       mem_flag = CL_MEM_WRITE_ONLY;
-               else
-                       mem_flag = CL_MEM_READ_WRITE;
-
-               mem.device_pointer = (device_ptr)clCreateBuffer(cxContext, 
mem_flag, size, mem_ptr, &ciErr);
-
-               opencl_assert_err(ciErr, "clCreateBuffer");
-
-               stats.mem_alloc(size);
-               mem.device_size = size;
-       }
-
-       /* overloading function for creating split kernel device buffers */
-       cl_mem mem_alloc(size_t bufsize, cl_mem_flags mem_flag = 
CL_MEM_READ_WRITE) {
-               cl_mem ptr;
-               ptr = clCreateBuffer(cxContext, mem_flag, bufsize, NULL, 
&ciErr);
-               if (ciErr != CL_SUCCESS) {
-                       fprintf(stderr, "(%d) %s in clCreateBuffer\n", ciErr, 
clewErrorString(ciErr));
-                       assert(0);
-               }
-               return ptr;
-       }
-
-       void mem_copy_to(device_memory& mem)
-       {
-               /* this is blocking */
-               size_t size = mem.memory_size();
-               opencl_assert(clEnqueueWriteBuffer(cqCommandQueue, 
CL_MEM_PTR(mem.device_pointer), CL_TRUE, 0, size, (void*)mem.data_pointer, 0, 
NULL, NULL));
-       }
-
-       void mem_copy_from(device_memory& mem, int y, int w, int h, int elem)
-       {
-               size_t offset = elem*y*w;
-               size_t size = elem*w*h;
-
-               opencl_assert(clEnqueueReadBuffer(cqCommandQueue, 
CL_MEM_PTR(mem.device_pointer), CL_TRUE, offset, size, (uchar*)mem.data_pointer 
+ offset, 0, NULL, NULL));
-       }
-
-       void mem_zero(device_memory& mem)
-       {
-               if(mem.device_pointer) {
-                       memset((void*)mem.data_pointer, 0, mem.memory_size());
-                       mem_copy_to(mem);
-               }
-       }
-
-       void mem_free(device_memory& mem)
-       {
-               if(mem.device_pointer) {
-                       
opencl_assert(clReleaseMemObject(CL_MEM_PTR(mem.device_pointer)));
-                       mem.device_pointer = 0;
-
-                       stats.mem_free(mem.device_size);
-                       mem.device_size = 0;
-               }
-       }
-
-       void const_copy_to(const char *name, void *host, size_t size)
-       {
-               ConstMemMap::iterator i = const_mem_map.find(name);
-
-               if(i == const_mem_map.end()) {
-                       device_vector<uchar> *data = new device_vector<uchar>();
-                       data->copy((uchar*)host, size);
-
-                       mem_alloc(*data, MEM_READ_ONLY);
-                       i = const_mem_map.insert(ConstMemMap::value_type(name, 
data)).first;
-               }
-               else {
-                       device_vector<uchar> *data = i->second;
-                       data->copy((uchar*)host, size);
-               }
-
-               mem_copy_to(*i->second);
-       }
-
-       void tex_alloc(const char *name,
-               device_memory& mem,
-               InterpolationType /*interpolation*/,
-               bool /*periodic*/)
-       {
-               VLOG(1) << "Texture allocate: " << name << ", " << 
mem.memory_size() << " bytes.";
-               mem_alloc(mem, MEM_READ_ONLY);
-               mem_copy_to(mem);
-               assert(mem_map.find(name) == mem_map.end());
-               mem_map.insert(MemMap::value_type(name, mem.device_pointer));
-       }
-
-       void tex_free(device_memory& mem)
-       {
-               if(mem.device_pointer) {
-                       foreach(const MemMap::value_type& value, mem_map) {
-                               if(value.second == mem.device_pointer) {
-                                       mem_map.erase(value.first);
-                                       break;
-                               }
-                       }
-
-                       mem_free(mem);
-               }
-       }
-
        bool load_binary(const string& /*kernel_path*/,
                         const string& clbin,
                         string custom_kernel_build_options,
@@ -797,7 +631,8 @@ public:
                return true;
        }
 
-       bool save_binary(cl_program *program, const string& clbin) {
+       bool save_binary(cl_program *program, const string& clbin)
+       {
                size_t size = 0;
                clGetProgramInfo(*program, CL_PROGRAM_BINARY_SIZES, 
sizeof(size_t), &size, NULL);
 
@@ -818,8 +653,8 @@ public:
        }
 
        bool build_kernel(cl_program *kernel_program,
-               string custom_kernel_build_options,
-               const string *debug_src = NULL)
+                         string custom_kernel_build_options,
+                         const string *debug_src = NULL)
        {
                string build_options;
                build_options = opencl_kernel_build_options(platform_name, 
debug_src) + custom_kernel_build_options;
@@ -848,12 +683,11 @@ public:
                return true;
        }
 
-
        bool compile_kernel(const string& kernel_path,
-               string source,
-               string custom_kernel_build_options,
-               cl_program *kernel_program,
-               const string *debug_src = NULL)
+                           string source,
+                           string custom_kernel_build_options,
+                           cl_program *kernel_program,
+                           const string *debug_src = NULL)
        {
                /* we compile kernels consisting of many files. unfortunately 
opencl
                * kernel caches do not seem to recognize changes in included 
files.
@@ -882,6 +716,27 @@ public:
                return true;
        }
 
+       string device_md5_hash(string kernel_custom_build_options)
+       {
+               MD5Hash md5;
+               char version[256], driver[256], name[256], vendor[256];
+
+               clGetPlatformInfo(cpPlatform, CL_PLATFORM_VENDOR, 
sizeof(vendor), &vendor, NULL);
+               clGetDeviceInfo(cdDevice, CL_DEVICE_VERSION, sizeof(version), 
&version, NULL);
+               clGetDeviceInfo(cdDevice, CL_DEVICE_NAME, sizeof(name), &name, 
NULL);
+               clGetDeviceInfo(cdDevice, CL_DRIVER_VERSION, sizeof(driver), 
&driver, NULL);
+
+               md5.append((uint8_t*)vendor, strlen(vendor));
+               md5.append((uint8_t*)version, strlen(version));
+               md5.append((uint8_t*)name, strlen(name));
+               md5.append((uint8_t*)driver, strlen(driver));
+
+               string options = opencl_kernel_build_options(platform_name);
+               options += kernel_custom_build_options;
+               md5.append((uint8_t*)options.c_str(), options.size());
+
+               return md5.get_hex();
+       }
 
        bool load_kernels(const DeviceRequestedFeatures& /*requested_features*/)
        {
@@ -960,10 +815,139 @@ public:
                return true;
        }
 
+       ~OpenCLDeviceBase()
+       {
+
+               if(null_mem)
+                       clReleaseMemObject(CL_MEM_PTR(null_mem));
+
+               ConstMemMap::iterator mt;
+               for(mt = const_mem_map.begin(); mt != const_mem_map.end(); 
mt++) {
+                       mem_free(*(mt->second));
+                       delete mt->second;
+               }
+
+               if(ckFilmConvertByteKernel)
+                       clReleaseKernel(ckFilmConvertByteKernel);  
+               if(ckFilmConvertHalfFloatKernel)
+                       clReleaseKernel(ckFilmCo

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to