[Bf-blender-cvs] [8308c5632e] soc-2016-cycles_denoising: Cycles Denoising: Support GPU denoising from the command line
Lukas Stockner
noreply at git.blender.org
Sat Feb 4 04:09:01 CET 2017
Commit: 8308c5632ecb28294e15b594e94b559bbfb294a7
Author: Lukas Stockner
Date: Thu Feb 2 00:45:16 2017 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB8308c5632ecb28294e15b594e94b559bbfb294a7
Cycles Denoising: Support GPU denoising from the command line
===================================================================
M intern/cycles/blender/blender_python.cpp
M intern/cycles/blender/blender_sync.cpp
M intern/cycles/blender/blender_sync.h
===================================================================
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index 11308272bf..6f3ebb851f 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -137,6 +137,24 @@ void python_thread_state_restore(void **python_thread_state)
*python_thread_state = NULL;
}
+static PointerRNA get_user_preferences()
+{
+ PyObject *bpy = PyImport_ImportModule("bpy");
+ PyObject *pycontext = PyObject_GetAttrString(bpy, "context");
+ PyObject *pyuserpref = PyObject_GetAttrString(pycontext, "user_preferences");
+ PyObject *pyptr = PyObject_CallMethod(pyuserpref, "as_pointer", NULL);
+
+ PointerRNA ptr;
+ RNA_pointer_create(NULL, &RNA_UserPreferences, (void*)PyLong_AsVoidPtr(pyptr), &ptr);
+
+ Py_DECREF(pyptr);
+ Py_DECREF(pyuserpref);
+ Py_DECREF(pycontext);
+ Py_DECREF(bpy);
+
+ return ptr;
+}
+
static const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce)
{
const char *result = _PyUnicode_AsString(py_str);
@@ -751,11 +769,11 @@ static PyObject *denoise_files_func(PyObject * /*self*/, PyObject *args, PyObjec
session_params.threads = 0;
PyObject *pyframelist;
- int midframe, half_output = 0;
+ int midframe, half_output = 0, use_gpu = 0;
const char *output = NULL;
- static const char* keylist[] = {"frames", "midframe", "output", "half_float", "samples", "threads", "tile_x", "tile_y", "filter_strength", "filter_weight_adjust"};
- if(!PyArg_ParseTupleAndKeywords(args, keywords, "Ois|piiiiff", const_cast<char **>(keylist), &pyframelist, &midframe, &output, &half_output,
+ static const char* keylist[] = {"frames", "midframe", "output", "half_float", "use_gpu", "samples", "threads", "tile_x", "tile_y", "filter_strength", "filter_weight_adjust"};
+ if(!PyArg_ParseTupleAndKeywords(args, keywords, "Ois|ppiiiiff", const_cast<char **>(keylist), &pyframelist, &midframe, &output, &half_output, &use_gpu,
&session_params.samples, &session_params.threads, &session_params.tile_size.x, &session_params.tile_size.y,
&session_params.filter_strength, &session_params.filter_weight_adjust)) {
return NULL;
@@ -763,6 +781,9 @@ static PyObject *denoise_files_func(PyObject * /*self*/, PyObject *args, PyObjec
session_params.output_half_float = (half_output > 0);
session_params.output_path = string(output);
+ BL::UserPreferences b_userpref(get_user_preferences());
+ session_params.device = BlenderSync::get_device_info(b_userpref, use_gpu);
+
int numframes = PyList_Size(pyframelist);
if(numframes < 1) {
Py_RETURN_FALSE;
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 093870eebb..9985029635 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -683,35 +683,30 @@ bool BlenderSync::get_session_pause(BL::Scene& b_scene, bool background)
return (background)? false: get_boolean(cscene, "preview_pause");
}
-SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
- BL::UserPreferences& b_userpref,
- BL::Scene& b_scene,
- bool background)
+DeviceInfo BlenderSync::get_device_info(BL::UserPreferences& b_userpref, int device_type)
{
- SessionParams params;
- PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
-
- /* feature set */
- params.experimental = (get_enum(cscene, "feature_set") != 0);
+ DeviceInfo cpu;
/* device type */
vector<DeviceInfo>& devices = Device::available_devices();
-
+
/* device default CPU */
foreach(DeviceInfo& device, devices) {
if(device.type == DEVICE_CPU) {
- params.device = device;
+ cpu = device;
break;
}
}
- if(get_enum(cscene, "device") == 2) {
+ if(device_type == 2) {
/* find network device */
- foreach(DeviceInfo& info, devices)
- if(info.type == DEVICE_NETWORK)
- params.device = info;
+ foreach(DeviceInfo& info, devices) {
+ if(info.type == DEVICE_NETWORK) {
+ return info;
+ }
+ }
}
- else if(get_enum(cscene, "device") == 1) {
+ else if(device_type == 1) {
PointerRNA b_preferences;
BL::UserPreferences::addons_iterator b_addon_iter;
@@ -739,15 +734,31 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
} RNA_END
if(used_devices.size() == 1) {
- params.device = used_devices[0];
+ return used_devices[0];
}
else if(used_devices.size() > 1) {
- params.device = Device::get_multi_device(used_devices);
+ return Device::get_multi_device(used_devices);
}
- /* Else keep using the CPU device that was set before. */
}
}
+ return cpu;
+}
+
+SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
+ BL::UserPreferences& b_userpref,
+ BL::Scene& b_scene,
+ bool background)
+{
+ SessionParams params;
+ PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
+
+ /* feature set */
+ params.experimental = (get_enum(cscene, "feature_set") != 0);
+
+ /* device */
+ params.device = BlenderSync::get_device_info(b_userpref, get_enum(cscene, "device"));
+
/* Background */
params.background = background;
diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h
index 5a221562a6..23420b25c1 100644
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@ -103,6 +103,8 @@ public:
static PassType get_pass_type(BL::RenderPass& b_pass);
static DenoisingPassType get_denoising_pass_type(BL::RenderPass& b_pass);
+ static DeviceInfo get_device_info(BL::UserPreferences& b_userpref, int device_type);
+
private:
/* sync */
void sync_lamps(bool update_all);
More information about the Bf-blender-cvs
mailing list