Commit: 8e49b9b06e3bf739850f700af476b735351e3fad
Author: Mai Lavelle
Date:   Tue Jan 24 06:56:02 2017 -0500
Branches: cycles_split_kernel
https://developer.blender.org/rB8e49b9b06e3bf739850f700af476b735351e3fad

Cycles: Add split_kernel_global_size function

This is to allow devices to suggest a good global work size. Only
implemented for OpenCL devices right now.

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

M       intern/cycles/device/device.h
M       intern/cycles/device/opencl/opencl_split.cpp

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

diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 13b7c08f50..dd176c7577 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -33,6 +33,7 @@ CCL_NAMESPACE_BEGIN
 
 class Progress;
 class RenderTile;
+class DeviceSplitKernel;
 
 /* Device Types */
 
@@ -330,6 +331,12 @@ private:
                return make_int2(0, 0);
        }
 
+       virtual int2 split_kernel_global_size(DeviceTask */*task*/, 
DeviceSplitKernel& /*split_kernel*/)
+       {
+               assert(!"not implemented for this device");
+               return make_int2(64, 64);
+       }
+
        friend class DeviceSplitKernel;
 
 public:
diff --git a/intern/cycles/device/opencl/opencl_split.cpp 
b/intern/cycles/device/opencl/opencl_split.cpp
index 8d3e2598c5..cd2c3f25b5 100644
--- a/intern/cycles/device/opencl/opencl_split.cpp
+++ b/intern/cycles/device/opencl/opencl_split.cpp
@@ -259,6 +259,16 @@ public:
                return make_int2(64, 1);
        }
 
+       virtual int2 split_kernel_global_size(DeviceTask *task, 
DeviceSplitKernel& split_kernel)
+       {
+               size_t max_buffer_size;
+               clGetDeviceInfo(cdDevice, CL_DEVICE_MAX_MEM_ALLOC_SIZE, 
sizeof(size_t), &max_buffer_size, NULL);
+
+               size_t num_elements = 
split_kernel.max_elements_for_max_buffer_size(max_buffer_size / 2, 
task->passes_size);
+
+               return make_int2(round_up((int)sqrt(num_elements), 64), 
(int)sqrt(num_elements));
+       }
+
        void thread_run(DeviceTask *task)
        {
                if(task->type == DeviceTask::FILM_CONVERT) {

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

Reply via email to