diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-29 18:39:30 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-29 19:00:02 +0300 |
commit | 001414fb2f7346d2ff332bf851373522d87659d7 (patch) | |
tree | 366112462b869a31767d7439b04b900ba21044c1 /intern/cycles/device/device.h | |
parent | e37b9b5d0d2664697de8f1c7614e88073dd8ff49 (diff) |
Cycles: delay CUDA and OpenCL initialization to avoid driver crashes.
We've had many reported crashes on Windows where we suspect there is a
corrupted OpenCL driver. The purpose here is to keep Blender generally
usable in such cases.
Now it always shows None / CUDA / OpenCL in the preferences, and only when
selecting one will it reveal if there are any GPUs available. This should
avoid crashes when opening the preferences or on startup.
Differential Revision: https://developer.blender.org/D4265
Diffstat (limited to 'intern/cycles/device/device.h')
-rw-r--r-- | intern/cycles/device/device.h | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h index 55c39188210..082f9f758a8 100644 --- a/intern/cycles/device/device.h +++ b/intern/cycles/device/device.h @@ -40,7 +40,7 @@ class RenderTile; /* Device Types */ enum DeviceType { - DEVICE_NONE, + DEVICE_NONE = 0, DEVICE_CPU, DEVICE_OPENCL, DEVICE_CUDA, @@ -48,6 +48,16 @@ enum DeviceType { DEVICE_MULTI }; +enum DeviceTypeMask { + DEVICE_MASK_CPU = (1 << DEVICE_CPU), + DEVICE_MASK_OPENCL = (1 << DEVICE_OPENCL), + DEVICE_MASK_CUDA = (1 << DEVICE_CUDA), + DEVICE_MASK_NETWORK = (1 << DEVICE_NETWORK), + DEVICE_MASK_ALL = ~0 +}; + +#define DEVICE_MASK(type) (DeviceTypeMask)(1 << type) + class DeviceInfo { public: DeviceType type; @@ -328,9 +338,9 @@ public: static DeviceType type_from_string(const char *name); static string string_from_type(DeviceType type); - static vector<DeviceType>& available_types(); - static vector<DeviceInfo>& available_devices(); - static string device_capabilities(); + static vector<DeviceType> available_types(); + static vector<DeviceInfo> available_devices(uint device_type_mask = DEVICE_MASK_ALL); + static string device_capabilities(uint device_type_mask = DEVICE_MASK_ALL); static DeviceInfo get_multi_device(const vector<DeviceInfo>& subdevices, int threads, bool background); @@ -357,8 +367,11 @@ private: /* Indicted whether device types and devices lists were initialized. */ static bool need_types_update, need_devices_update; static thread_mutex device_mutex; - static vector<DeviceType> types; - static vector<DeviceInfo> devices; + static vector<DeviceInfo> cuda_devices; + static vector<DeviceInfo> opencl_devices; + static vector<DeviceInfo> cpu_devices; + static vector<DeviceInfo> network_devices; + static uint devices_initialized_mask; }; CCL_NAMESPACE_END |