diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-30 20:36:54 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-30 20:36:54 +0300 |
commit | f4b1f1f0beece897df0a9013adf2253e89a85975 (patch) | |
tree | 936e13ede178105f13396008076db7a955bc97a9 /intern/cycles/blender/blender_sync.cpp | |
parent | ab682b15582bfc2e550f979c34f2f2b27629ea3d (diff) | |
parent | 001414fb2f7346d2ff332bf851373522d87659d7 (diff) |
Merge branch 'blender2.7'
Diffstat (limited to 'intern/cycles/blender/blender_sync.cpp')
-rw-r--r-- | intern/cycles/blender/blender_sync.cpp | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 60192bfa8f8..e41a80a14a5 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -741,24 +741,18 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine, /* Background */ params.background = background; - /* device type */ - vector<DeviceInfo>& devices = Device::available_devices(); - - /* device default CPU */ - foreach(DeviceInfo& device, devices) { - if(device.type == DEVICE_CPU) { - params.device = device; - break; - } - } + /* Default to CPU device. */ + params.device = Device::available_devices(DEVICE_MASK_CPU).front(); if(get_enum(cscene, "device") == 2) { - /* find network device */ - foreach(DeviceInfo& info, devices) - if(info.type == DEVICE_NETWORK) - params.device = info; + /* Find network device. */ + vector<DeviceInfo> devices = Device::available_devices(DEVICE_MASK_NETWORK); + if(!devices.empty()) { + params.device = devices.front(); + } } else if(get_enum(cscene, "device") == 1) { + /* Find cycles preferences. */ PointerRNA b_preferences; BL::Preferences::addons_iterator b_addon_iter; @@ -769,6 +763,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine, } } + /* Test if we are using GPU devices. */ enum ComputeDevice { COMPUTE_DEVICE_CPU = 0, COMPUTE_DEVICE_CUDA = 1, @@ -782,15 +777,20 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine, COMPUTE_DEVICE_CPU); if(compute_device != COMPUTE_DEVICE_CPU) { + /* Query GPU devices with matching types. */ + uint mask = DEVICE_MASK_CPU; + if(compute_device == COMPUTE_DEVICE_CUDA) { + mask |= DEVICE_MASK_CUDA; + } + else if(compute_device == COMPUTE_DEVICE_OPENCL) { + mask |= DEVICE_MASK_OPENCL; + } + vector<DeviceInfo> devices = Device::available_devices(mask); + + /* Match device preferences and available devices. */ vector<DeviceInfo> used_devices; RNA_BEGIN(&b_preferences, device, "devices") { - ComputeDevice device_type = (ComputeDevice)get_enum(device, - "type", - COMPUTE_DEVICE_NUM, - COMPUTE_DEVICE_CPU); - - if(get_boolean(device, "use") && - (device_type == compute_device || device_type == COMPUTE_DEVICE_CPU)) { + if(get_boolean(device, "use")) { string id = get_string(device, "id"); foreach(DeviceInfo& info, devices) { if(info.id == id) { @@ -801,10 +801,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine, } } RNA_END; - if(used_devices.size() == 1) { - params.device = used_devices[0]; - } - else if(used_devices.size() > 1) { + if(!used_devices.empty()) { params.device = Device::get_multi_device(used_devices, params.threads, params.background); |