From 8491e4ab8636a90120f94bede047d591c3ca21cc Mon Sep 17 00:00:00 2001 From: Lukas Stockner Date: Wed, 23 Dec 2020 21:21:20 +0100 Subject: Fix unreported: Cycles CLI device override doesn't set peer memory usage flag Reviewed By: brecht Differential Revision: https://developer.blender.org/D9929 --- intern/cycles/blender/blender_device.cpp | 53 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 27 deletions(-) (limited to 'intern') diff --git a/intern/cycles/blender/blender_device.cpp b/intern/cycles/blender/blender_device.cpp index 977f8297de1..07c99ca0228 100644 --- a/intern/cycles/blender/blender_device.cpp +++ b/intern/cycles/blender/blender_device.cpp @@ -43,42 +43,41 @@ int blender_device_threads(BL::Scene &b_scene) DeviceInfo blender_device_info(BL::Preferences &b_preferences, BL::Scene &b_scene, bool background) { - if (BlenderSession::device_override != DEVICE_MASK_ALL) { - vector devices = Device::available_devices(BlenderSession::device_override); + PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); - if (devices.empty()) { - return Device::dummy_device("Found no Cycles device of the specified type"); + /* Find cycles preferences. */ + PointerRNA cpreferences; + BL::Preferences::addons_iterator b_addon_iter; + for (b_preferences.addons.begin(b_addon_iter); b_addon_iter != b_preferences.addons.end(); + ++b_addon_iter) { + if (b_addon_iter->module() == "cycles") { + cpreferences = b_addon_iter->preferences().ptr; + break; } - - int threads = blender_device_threads(b_scene); - return Device::get_multi_device(devices, threads, background); } - PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); - /* Default to CPU device. */ DeviceInfo device = Device::available_devices(DEVICE_MASK_CPU).front(); - if (get_enum(cscene, "device") == 2) { + if (BlenderSession::device_override != DEVICE_MASK_ALL) { + vector devices = Device::available_devices(BlenderSession::device_override); + + if (devices.empty()) { + device = Device::dummy_device("Found no Cycles device of the specified type"); + } + else { + int threads = blender_device_threads(b_scene); + device = Device::get_multi_device(devices, threads, background); + } + } + else if (get_enum(cscene, "device") == 2) { /* Find network device. */ vector devices = Device::available_devices(DEVICE_MASK_NETWORK); if (!devices.empty()) { - return devices.front(); + device = devices.front(); } } else if (get_enum(cscene, "device") == 1) { - /* Find cycles preferences. */ - PointerRNA cpreferences; - - BL::Preferences::addons_iterator b_addon_iter; - for (b_preferences.addons.begin(b_addon_iter); b_addon_iter != b_preferences.addons.end(); - ++b_addon_iter) { - if (b_addon_iter->module() == "cycles") { - cpreferences = b_addon_iter->preferences().ptr; - break; - } - } - /* Test if we are using GPU devices. */ ComputeDevice compute_device = (ComputeDevice)get_enum( cpreferences, "compute_device_type", COMPUTE_DEVICE_NUM, COMPUTE_DEVICE_CPU); @@ -117,13 +116,13 @@ DeviceInfo blender_device_info(BL::Preferences &b_preferences, BL::Scene &b_scen device = Device::get_multi_device(used_devices, threads, background); } /* Else keep using the CPU device that was set before. */ - - if (!get_boolean(cpreferences, "peer_memory")) { - device.has_peer_memory = false; - } } } + if (!get_boolean(cpreferences, "peer_memory")) { + device.has_peer_memory = false; + } + return device; } -- cgit v1.2.3