@@ -210,6 +210,12 @@ namespace w2xc
210210 cl_device_type dtype;
211211
212212 clGetDeviceInfo (dev, CL_DEVICE_TYPE, sizeof (dtype), &dtype, NULL );
213+
214+ size_t dev_name_len;
215+ clGetDeviceInfo (dev, CL_DEVICE_NAME, 0 , nullptr , &dev_name_len);
216+ std::vector<char > dev_name (dev_name_len + 1 );
217+ clGetDeviceInfo (dev, CL_DEVICE_NAME, dev_name_len, &dev_name[0 ], &dev_name_len);
218+
213219 int sub_type = 0 ;
214220
215221 if (is_amd)
@@ -224,6 +230,25 @@ namespace w2xc
224230 {
225231 sub_type = W2XCONV_PROC_OPENCL_PLATFORM_INTEL;
226232 }
233+ else if (is_apple)
234+ {
235+ if (strstr (&dev_name[0 ], " AMD" ) != NULL )
236+ {
237+ sub_type = W2XCONV_PROC_OPENCL_PLATFORM_AMD;
238+ }
239+ else if (strstr (&dev_name[0 ], " NVIDIA" ) != NULL )
240+ {
241+ sub_type = W2XCONV_PROC_OPENCL_PLATFORM_NVIDIA;
242+ }
243+ else if (strstr (&dev_name[0 ], " Intel" ) != NULL )
244+ {
245+ sub_type = W2XCONV_PROC_OPENCL_PLATFORM_INTEL;
246+ }
247+ else
248+ {
249+ sub_type = W2XCONV_PROC_OPENCL_PLATFORM_UNKNOWN;
250+ }
251+ }
227252 else
228253 {
229254 sub_type = W2XCONV_PROC_OPENCL_PLATFORM_UNKNOWN;
@@ -243,11 +268,6 @@ namespace w2xc
243268 }
244269
245270 proc.sub_type = sub_type;
246-
247- size_t dev_name_len;
248- clGetDeviceInfo (dev, CL_DEVICE_NAME, 0 , nullptr , &dev_name_len);
249- std::vector<char > dev_name (dev_name_len + 1 );
250- clGetDeviceInfo (dev, CL_DEVICE_NAME, dev_name_len, &dev_name[0 ], &dev_name_len);
251271
252272 proc.dev_name = strdup (&dev_name[0 ]);
253273 proc.dev_id = cur_dev_id++;
0 commit comments