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.vfx@gmail.com>2015-06-17 12:35:39 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-06-17 12:35:39 +0300
commitae3e37b899d68d12a7d40f09fe28d700243784d7 (patch)
tree72968a8f7cf940c3d6ba61ded1dad1b20ac2c41f
parent364d934951e3a46864d6478309345a3b10e67818 (diff)
Cycles: Fix wrong numbering of OpenCL devices when some of them are skipped
Skipped devices did not reflect in the device number, which might result in bad array indices. This might also resolve T45037, and need to be ported to a release branch.
-rw-r--r--intern/cycles/device/device_opencl.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index 87c08b3e045..ccfa97f06b7 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -3370,6 +3370,9 @@ void device_opencl_info(vector<DeviceInfo>& devices)
vector<cl_platform_id> platform_ids;
cl_uint num_platforms = 0;
+ /* Number of the devices we didn't use from the platform. */
+ cl_uint num_skip_devices = 0;
+
/* get devices */
if(clGetPlatformIDs(0, NULL, &num_platforms) != CL_SUCCESS || num_platforms == 0)
return;
@@ -3386,8 +3389,11 @@ void device_opencl_info(vector<DeviceInfo>& devices)
(getenv("CYCLES_OPENCL_TEST") != NULL) ||
(getenv("CYCLES_OPENCL_SPLIT_KERNEL_TEST")) != NULL;
- for(int platform = 0; platform < num_platforms; platform++, num_base += num_devices) {
- num_devices = 0;
+ for(int platform = 0;
+ platform < num_platforms;
+ platform++, num_base += num_devices - num_skip_devices)
+ {
+ num_devices = num_skip_devices = 0;
if(clGetDeviceIDs(platform_ids[platform], opencl_device_type(), 0, NULL, &num_devices) != CL_SUCCESS || num_devices == 0)
continue;
@@ -3401,6 +3407,7 @@ void device_opencl_info(vector<DeviceInfo>& devices)
string platform_name = pname;
/* add devices */
+ int num_skip_devices = 0;
for(int num = 0; num < num_devices; num++) {
cl_device_id device_id = device_ids[num];
char name[1024] = "\0";
@@ -3413,6 +3420,7 @@ void device_opencl_info(vector<DeviceInfo>& devices)
(platform_name == "AMD Accelerated Parallel Processing" &&
device_type == CL_DEVICE_TYPE_GPU)))
{
+ ++num_skip_devices;
continue;
}