diff options
Diffstat (limited to 'intern/cycles/device/opencl/opencl_util.cpp')
-rw-r--r-- | intern/cycles/device/opencl/opencl_util.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/intern/cycles/device/opencl/opencl_util.cpp b/intern/cycles/device/opencl/opencl_util.cpp index aca4ccdde26..978c75d2e2c 100644 --- a/intern/cycles/device/opencl/opencl_util.cpp +++ b/intern/cycles/device/opencl/opencl_util.cpp @@ -810,18 +810,30 @@ bool OpenCLInfo::platform_version_check(cl_platform_id platform, string *error) return true; } -bool OpenCLInfo::device_version_check(cl_device_id device, string *error) +bool OpenCLInfo::get_device_version(cl_device_id device, int *r_major, int *r_minor, string *error) { - const int req_major = 1, req_minor = 1; - int major, minor; char version[256]; clGetDeviceInfo(device, CL_DEVICE_OPENCL_C_VERSION, sizeof(version), &version, NULL); - if (sscanf(version, "OpenCL C %d.%d", &major, &minor) < 2) { + if (sscanf(version, "OpenCL C %d.%d", r_major, r_minor) < 2) { if (error != NULL) { *error = string_printf("OpenCL: failed to parse OpenCL C version string (%s).", version); } return false; } + if (error != NULL) { + *error = ""; + } + return true; +} + +bool OpenCLInfo::device_version_check(cl_device_id device, string *error) +{ + const int req_major = 1, req_minor = 1; + int major, minor; + if (!get_device_version(device, &major, &minor, error)) { + return false; + } + if (!((major == req_major && minor >= req_minor) || (major > req_major))) { if (error != NULL) { *error = string_printf("OpenCL: C version 1.1 or later required, found %d.%d", major, minor); |