diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-10-11 11:14:16 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-10-11 11:14:16 +0300 |
commit | dc95c79971d48dae9418e0047f14c01e6dcab13c (patch) | |
tree | f6da183a7e7b3d0adf691c5b270ccab4f8801e35 /intern/cycles/device/device.cpp | |
parent | ef1918d3128b1f56d69c189a838b648dc88de4c9 (diff) | |
parent | 4782000fd5b2a1ae3041884f64ab192dbcb853c0 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern/cycles/device/device.cpp')
-rw-r--r-- | intern/cycles/device/device.cpp | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp index 5ae83b56fcd..19c4bec55a8 100644 --- a/intern/cycles/device/device.cpp +++ b/intern/cycles/device/device.cpp @@ -35,6 +35,7 @@ CCL_NAMESPACE_BEGIN bool Device::need_types_update = true; bool Device::need_devices_update = true; +thread_mutex Device::device_mutex; vector<DeviceType> Device::types; vector<DeviceInfo> Device::devices; @@ -443,53 +444,49 @@ string Device::string_from_type(DeviceType type) vector<DeviceType>& Device::available_types() { + thread_scoped_lock lock(device_mutex); if(need_types_update) { types.clear(); types.push_back(DEVICE_CPU); - #ifdef WITH_CUDA - if(device_cuda_init()) + if(device_cuda_init()) { types.push_back(DEVICE_CUDA); + } #endif - #ifdef WITH_OPENCL - if(device_opencl_init()) + if(device_opencl_init()) { types.push_back(DEVICE_OPENCL); + } #endif - #ifdef WITH_NETWORK types.push_back(DEVICE_NETWORK); #endif - need_types_update = false; } - return types; } vector<DeviceInfo>& Device::available_devices() { + thread_scoped_lock lock(device_mutex); if(need_devices_update) { devices.clear(); -#ifdef WITH_CUDA - if(device_cuda_init()) - device_cuda_info(devices); -#endif - #ifdef WITH_OPENCL - if(device_opencl_init()) + if(device_opencl_init()) { device_opencl_info(devices); + } +#endif +#ifdef WITH_CUDA + if(device_cuda_init()) { + device_cuda_info(devices); + } #endif - device_cpu_info(devices); - #ifdef WITH_NETWORK device_network_info(devices); #endif - need_devices_update = false; } - return devices; } @@ -497,12 +494,6 @@ string Device::device_capabilities() { string capabilities = "CPU device capabilities: "; capabilities += device_cpu_capabilities() + "\n"; -#ifdef WITH_CUDA - if(device_cuda_init()) { - capabilities += "\nCUDA device capabilities:\n"; - capabilities += device_cuda_capabilities(); - } -#endif #ifdef WITH_OPENCL if(device_opencl_init()) { @@ -511,6 +502,13 @@ string Device::device_capabilities() } #endif +#ifdef WITH_CUDA + if(device_cuda_init()) { + capabilities += "\nCUDA device capabilities:\n"; + capabilities += device_cuda_capabilities(); + } +#endif + return capabilities; } @@ -526,10 +524,14 @@ DeviceInfo Device::get_multi_device(vector<DeviceInfo> subdevices) info.num = 0; info.has_bindless_textures = true; + info.has_volume_decoupled = true; + info.has_qbvh = true; foreach(DeviceInfo &device, subdevices) { assert(device.type == info.multi_devices[0].type); info.has_bindless_textures &= device.has_bindless_textures; + info.has_volume_decoupled &= device.has_volume_decoupled; + info.has_qbvh &= device.has_qbvh; } return info; |