diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2018-07-06 13:30:48 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2018-07-06 13:30:48 +0300 |
commit | ccef83b2fb7aeb0653bcc13cfc49dac421ac88c8 (patch) | |
tree | 2f35f1f83cef51f76d65482702ce3c2ceeae60e7 /intern/cycles/device | |
parent | dd5c25fab205daea5afa7e62d80d56ac17f297fa (diff) | |
parent | 3cc2a9b934d072fdd817863aa8e93e2416f5c804 (diff) |
Merge branch 'master' into blender2.8
Conflicts:
source/blender/editors/screen/screen_edit.c
Diffstat (limited to 'intern/cycles/device')
-rw-r--r-- | intern/cycles/device/device_opencl.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/device/opencl/opencl.h | 13 | ||||
-rw-r--r-- | intern/cycles/device/opencl/opencl_util.cpp | 38 |
3 files changed, 52 insertions, 3 deletions
diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp index 9d61bbdae5d..95eef8263d4 100644 --- a/intern/cycles/device/device_opencl.cpp +++ b/intern/cycles/device/device_opencl.cpp @@ -137,6 +137,10 @@ void device_opencl_info(vector<DeviceInfo>& devices) info.has_volume_decoupled = false; info.bvh_layout_mask = BVH_LAYOUT_BVH2; info.id = id; + + /* Check OpenCL extensions */ + info.has_half_images = platform_device.device_extensions.find("cl_khr_fp16") != string::npos; + devices.push_back(info); num_devices++; } diff --git a/intern/cycles/device/opencl/opencl.h b/intern/cycles/device/opencl/opencl.h index 22e0503365c..d0571fc3c14 100644 --- a/intern/cycles/device/opencl/opencl.h +++ b/intern/cycles/device/opencl/opencl.h @@ -59,19 +59,22 @@ struct OpenCLPlatformDevice { cl_device_id device_id, cl_device_type device_type, const string& device_name, - const string& hardware_id) + const string& hardware_id, + const string& device_extensions) : platform_id(platform_id), platform_name(platform_name), device_id(device_id), device_type(device_type), device_name(device_name), - hardware_id(hardware_id) {} + hardware_id(hardware_id), + device_extensions(device_extensions) {} cl_platform_id platform_id; string platform_name; cl_device_id device_id; cl_device_type device_type; string device_name; string hardware_id; + string device_extensions; }; /* Contains all static OpenCL helper functions. */ @@ -130,6 +133,12 @@ public: static string get_device_name(cl_device_id device_id); + static bool get_device_extensions(cl_device_id device_id, + string *device_extensions, + cl_int* error = NULL); + + static string get_device_extensions(cl_device_id device_id); + static bool get_device_type(cl_device_id device_id, cl_device_type *device_type, cl_int* error = NULL); diff --git a/intern/cycles/device/opencl/opencl_util.cpp b/intern/cycles/device/opencl/opencl_util.cpp index 78ed401bff5..9104f64bedd 100644 --- a/intern/cycles/device/opencl/opencl_util.cpp +++ b/intern/cycles/device/opencl/opencl_util.cpp @@ -831,13 +831,15 @@ void OpenCLInfo::get_usable_devices(vector<OpenCLPlatformDevice> *usable_devices FIRST_VLOG(2) << "Adding new device " << readable_device_name << "."; string hardware_id = get_hardware_id(platform_name, device_id); + string device_extensions = get_device_extensions(device_id); usable_devices->push_back(OpenCLPlatformDevice( platform_id, platform_name, device_id, device_type, readable_device_name, - hardware_id)); + hardware_id, + device_extensions)); } else { FIRST_VLOG(2) << "Ignoring device " << device_name @@ -1047,6 +1049,40 @@ string OpenCLInfo::get_device_name(cl_device_id device_id) return device_name; } +bool OpenCLInfo::get_device_extensions(cl_device_id device_id, + string *device_extensions, + cl_int* error) +{ + char buffer[1024]; + cl_int err; + if((err = clGetDeviceInfo(device_id, + CL_DEVICE_EXTENSIONS, + sizeof(buffer), + &buffer, + NULL)) != CL_SUCCESS) + { + if(error != NULL) { + *error = err; + } + *device_extensions = ""; + return false; + } + if(error != NULL) { + *error = CL_SUCCESS; + } + *device_extensions = buffer; + return true; +} + +string OpenCLInfo::get_device_extensions(cl_device_id device_id) +{ + string device_extensions; + if(!get_device_extensions(device_id, &device_extensions)) { + return ""; + } + return device_extensions; +} + bool OpenCLInfo::get_device_type(cl_device_id device_id, cl_device_type *device_type, cl_int* error) |