diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-24 22:53:26 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-25 00:50:49 +0300 |
commit | 0feba652f787aa87a1eccd2911a6c713d2c8aeaf (patch) | |
tree | af0a89988d456eff26be00830e5a29eb2934e9da /intern/cycles/blender/blender_session.cpp | |
parent | 03f28553ff07e9d79a92834188017d93de555ccb (diff) |
Cycles: Enable QBVH optimization structure for SSE2 CPUs
This commit enables QBVH optimization structure automatically if rendering
with CPU and SSE2 support is detected.
This brings render time of agent shot back to the speed it used to be before
the watertight intersections commit, single koro and sponza scenes are about
7% faster here.
Diffstat (limited to 'intern/cycles/blender/blender_session.cpp')
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index 79ab25483e2..942a60d59dc 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -86,8 +86,9 @@ void BlenderSession::create() void BlenderSession::create_session() { - SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background); SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background); + bool is_cpu = session_params.device.type == DEVICE_CPU; + SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background, is_cpu); bool session_pause = BlenderSync::get_session_pause(b_scene, background); /* reset status/progress */ @@ -112,7 +113,7 @@ void BlenderSession::create_session() session->set_pause(session_pause); /* create sync */ - sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress, session_params.device.type == DEVICE_CPU); + sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress, is_cpu); if(b_v3d) { if(session_pause == false) { @@ -142,8 +143,9 @@ void BlenderSession::reset_session(BL::BlendData b_data_, BL::Scene b_scene_) b_render = b_engine.render(); b_scene = b_scene_; - SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background); SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background); + const bool is_cpu = session_params.device.type == DEVICE_CPU; + SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background, is_cpu); width = render_resolution_x(b_render); height = render_resolution_y(b_render); @@ -174,7 +176,7 @@ void BlenderSession::reset_session(BL::BlendData b_data_, BL::Scene b_scene_) session->stats.mem_peak = session->stats.mem_used; /* sync object should be re-created */ - sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress, session_params.device.type == DEVICE_CPU); + sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress, is_cpu); /* for final render we will do full data sync per render layer, only * do some basic syncing here, no objects or materials for speed */ @@ -641,8 +643,9 @@ void BlenderSession::synchronize() return; /* on session/scene parameter changes, we recreate session entirely */ - SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background); SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background); + const bool is_cpu = session_params.device.type == DEVICE_CPU; + SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background, is_cpu); bool session_pause = BlenderSync::get_session_pause(b_scene, background); if(session->params.modified(session_params) || |