[Bf-blender-cvs] [382fe85e293] blender2.7: Cycles: refactor Blender device settings handling into own file.

Brecht Van Lommel noreply at git.blender.org
Mon Feb 11 13:40:20 CET 2019


Commit: 382fe85e293e3d00bd7e494bd270cd32bec8ecb6
Author: Brecht Van Lommel
Date:   Wed Feb 6 16:15:45 2019 +0100
Branches: blender2.7
https://developer.blender.org/rB382fe85e293e3d00bd7e494bd270cd32bec8ecb6

Cycles: refactor Blender device settings handling into own file.

===================================================================

M	intern/cycles/blender/CMakeLists.txt
A	intern/cycles/blender/blender_device.cpp
A	intern/cycles/blender/blender_device.h
M	intern/cycles/blender/blender_sync.cpp

===================================================================

diff --git a/intern/cycles/blender/CMakeLists.txt b/intern/cycles/blender/CMakeLists.txt
index 9a26ce86bc9..769bc788ab5 100644
--- a/intern/cycles/blender/CMakeLists.txt
+++ b/intern/cycles/blender/CMakeLists.txt
@@ -17,6 +17,7 @@ set(INC_SYS
 
 set(SRC
 	blender_camera.cpp
+	blender_device.cpp
 	blender_mesh.cpp
 	blender_object.cpp
 	blender_object_cull.cpp
diff --git a/intern/cycles/blender/blender_device.cpp b/intern/cycles/blender/blender_device.cpp
new file mode 100644
index 00000000000..d689508b217
--- /dev/null
+++ b/intern/cycles/blender/blender_device.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2011-2013 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "blender/blender_device.h"
+#include "blender/blender_util.h"
+
+CCL_NAMESPACE_BEGIN
+
+int blender_device_threads(BL::Scene& b_scene)
+{
+	BL::RenderSettings b_r = b_scene.render();
+
+	if(b_r.threads_mode() == BL::RenderSettings::threads_mode_FIXED)
+		return b_r.threads();
+	else
+		return 0;
+}
+
+DeviceInfo blender_device_info(BL::UserPreferences& b_userpref, BL::Scene& b_scene, bool 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) {
+		/* Find network device. */
+		vector<DeviceInfo> devices = Device::available_devices(DEVICE_MASK_NETWORK);
+		if(!devices.empty()) {
+			device = devices.front();
+		}
+	}
+	else if(get_enum(cscene, "device") == 1) {
+		/* Find cycles preferences. */
+		PointerRNA cpreferences;
+
+		BL::UserPreferences::addons_iterator b_addon_iter;
+		for(b_userpref.addons.begin(b_addon_iter); b_addon_iter != b_userpref.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. */
+		enum ComputeDevice {
+			COMPUTE_DEVICE_CPU = 0,
+			COMPUTE_DEVICE_CUDA = 1,
+			COMPUTE_DEVICE_OPENCL = 2,
+			COMPUTE_DEVICE_NUM = 3,
+		};
+
+		ComputeDevice compute_device = (ComputeDevice)get_enum(cpreferences,
+		                                                       "compute_device_type",
+		                                                       COMPUTE_DEVICE_NUM,
+		                                                       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(&cpreferences, device, "devices") {
+				if(get_boolean(device, "use")) {
+					string id = get_string(device, "id");
+					foreach(DeviceInfo& info, devices) {
+						if(info.id == id) {
+							used_devices.push_back(info);
+							break;
+						}
+					}
+				}
+			} RNA_END;
+
+			if(!used_devices.empty()) {
+				int threads = blender_device_threads(b_scene);
+				device = Device::get_multi_device(used_devices,
+				                                  threads,
+				                                  background);
+			}
+			/* Else keep using the CPU device that was set before. */
+		}
+	}
+
+	return device;
+}
+
+CCL_NAMESPACE_END
diff --git a/intern/cycles/blender/blender_device.h b/intern/cycles/blender/blender_device.h
new file mode 100644
index 00000000000..315cdac0459
--- /dev/null
+++ b/intern/cycles/blender/blender_device.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2011-2013 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __BLENDER_DEVICE_H__
+#define __BLENDER_DEVICE_H__
+
+#include "MEM_guardedalloc.h"
+#include "RNA_types.h"
+#include "RNA_access.h"
+#include "RNA_blender_cpp.h"
+
+#include "device/device.h"
+
+CCL_NAMESPACE_BEGIN
+
+/* Get number of threads to use for rendering. */
+int blender_device_threads(BL::Scene& b_scene);
+
+/* Convert Blender settings to device specification. */
+DeviceInfo blender_device_info(BL::UserPreferences& b_userpref, BL::Scene& b_scene, bool background);
+
+CCL_NAMESPACE_END
+
+#endif  /* __BLENDER_DEVICE_H__ */
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index a6050b66040..05979fa4f57 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -29,6 +29,7 @@
 
 #include "device/device.h"
 
+#include "blender/blender_device.h"
 #include "blender/blender_sync.h"
 #include "blender/blender_session.h"
 #include "blender/blender_util.h"
@@ -751,84 +752,12 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
 	/* feature set */
 	params.experimental = (get_enum(cscene, "feature_set") != 0);
 
-	/* threads */
-	BL::RenderSettings b_r = b_scene.render();
-	if(b_r.threads_mode() == BL::RenderSettings::threads_mode_FIXED)
-		params.threads = b_r.threads();
-	else
-		params.threads = 0;
-
 	/* Background */
 	params.background = background;
 
-	/* Default to CPU device. */
-	params.device = Device::available_devices(DEVICE_MASK_CPU).front();
-
-	if(get_enum(cscene, "device") == 2) {
-		/* 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::UserPreferences::addons_iterator b_addon_iter;
-		for(b_userpref.addons.begin(b_addon_iter); b_addon_iter != b_userpref.addons.end(); ++b_addon_iter) {
-			if(b_addon_iter->module() == "cycles") {
-				b_preferences = b_addon_iter->preferences().ptr;
-				break;
-			}
-		}
-
-		/* Test if we are using GPU devices. */
-		enum ComputeDevice {
-			COMPUTE_DEVICE_CPU = 0,
-			COMPUTE_DEVICE_CUDA = 1,
-			COMPUTE_DEVICE_OPENCL = 2,
-			COMPUTE_DEVICE_NUM = 3,
-		};
-
-		ComputeDevice compute_device = (ComputeDevice)get_enum(b_preferences,
-		                                                       "compute_device_type",
-		                                                       COMPUTE_DEVICE_NUM,
-		                                                       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") {
-				if(get_boolean(device, "use")) {
-					string id = get_string(device, "id");
-					foreach(DeviceInfo& info, devices) {
-						if(info.id == id) {
-							used_devices.push_back(info);
-							break;
-						}
-					}
-				}
-			} RNA_END;
-
-			if(!used_devices.empty()) {
-				params.device = Device::get_multi_device(used_devices,
-				                                         params.threads,
-				                                         params.background);
-			}
-			/* Else keep using the CPU device that was set before. */
-		}
-	}
+	/* Device */
+	params.threads = blender_device_threads(b_scene);
+	params.device = blender_device_info(b_userpref, b_scene, params.background);
 
 	/* samples */
 	int samples = get_int(cscene, "samples");
@@ -900,6 +829,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
 	params.text_timeout = (double)get_float(cscene, "debug_text_timeout");
 
 	/* progressive refine */
+	BL::RenderSettings b_r = b_scene.render();
 	params.progressive_refine = get_boolean(cscene, "use_progressive_refine") &&
 	                            !b_r.use_save_buffers();



More information about the Bf-blender-cvs mailing list