[Bf-blender-cvs] [12e6bfe] blender-v2.75-release: Cycles: Fix wrong numbering of OpenCL devices when some of them are skipped

Sergey Sharybin noreply at git.blender.org
Thu Jun 18 17:38:16 CEST 2015


Commit: 12e6bfe1d3a15455aafc0fb81b2035721b6495b7
Author: Sergey Sharybin
Date:   Wed Jun 17 11:35:39 2015 +0200
Branches: blender-v2.75-release
https://developer.blender.org/rB12e6bfe1d3a15455aafc0fb81b2035721b6495b7

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.

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

M	intern/cycles/device/device_opencl.cpp

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

diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index 87c08b3..ccfa97f 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;
 			}




More information about the Bf-blender-cvs mailing list