diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-11-30 01:30:17 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-11-30 01:43:27 +0300 |
commit | a8b8da55672c2177c55709321df3514355b513f4 (patch) | |
tree | 97c730a1b39e60ecd15ad5c73b63892329daae1e /intern/cycles/render | |
parent | 8ac2d85d2fd3f8b997e9c9bddadada0dc7bdaf37 (diff) |
Fix T58183: crash with CPU + GPU rendering after profiling changes.
Multi-device was not passing along profiler to the CPU.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r-- | intern/cycles/render/session.cpp | 15 | ||||
-rw-r--r-- | intern/cycles/render/session.h | 1 | ||||
-rw-r--r-- | intern/cycles/render/stats.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/stats.h | 2 |
4 files changed, 11 insertions, 11 deletions
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index a8374b662d0..d6d0ffb4a6b 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -47,13 +47,14 @@ Session::Session(const SessionParams& params_) tile_manager(params.progressive, params.samples, params.tile_size, params.start_resolution, params.background == false || params.progressive_refine, params.background, params.tile_order, max(params.device.multi_devices.size(), 1), params.pixel_size), - stats() + stats(), + profiler() { device_use_gl = ((params.device.type != DEVICE_CPU) && !params.background); TaskScheduler::init(params.threads); - device = Device::create(params.device, stats, params.background); + device = Device::create(params.device, stats, profiler, params.background); if(params.background && !params.write_render_cb) { buffers = NULL; @@ -251,7 +252,7 @@ void Session::run_gpu() /* update scene */ scoped_timer update_timer; if(update_scene()) { - stats.profiler.reset(scene->shaders.size(), scene->objects.size()); + profiler.reset(scene->shaders.size(), scene->objects.size()); } progress.add_skip_time(update_timer, params.background); @@ -588,7 +589,7 @@ void Session::run_cpu() /* update scene */ scoped_timer update_timer; if(update_scene()) { - stats.profiler.reset(scene->shaders.size(), scene->objects.size()); + profiler.reset(scene->shaders.size(), scene->objects.size()); } progress.add_skip_time(update_timer, params.background); @@ -734,7 +735,7 @@ void Session::run() load_kernels(); if(params.use_profiling && (params.device.type == DEVICE_CPU)) { - stats.profiler.start(); + profiler.start(); } /* session thread loop */ @@ -751,7 +752,7 @@ void Session::run() run_cpu(); } - stats.profiler.stop(); + profiler.stop(); /* progress update */ if(progress.get_cancel()) @@ -1069,7 +1070,7 @@ void Session::collect_statistics(RenderStats *render_stats) { scene->collect_statistics(render_stats); if(params.use_profiling && (params.device.type == DEVICE_CPU)) { - render_stats->collect_profiling(scene, &stats); + render_stats->collect_profiling(scene, profiler); } } diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h index db07c758427..c7f590915e7 100644 --- a/intern/cycles/render/session.h +++ b/intern/cycles/render/session.h @@ -149,6 +149,7 @@ public: SessionParams params; TileManager tile_manager; Stats stats; + Profiler profiler; function<void(RenderTile&)> write_render_tile_cb; function<void(RenderTile&, bool)> update_render_tile_cb; diff --git a/intern/cycles/render/stats.cpp b/intern/cycles/render/stats.cpp index 9a7c5a6c1ad..4245745944d 100644 --- a/intern/cycles/render/stats.cpp +++ b/intern/cycles/render/stats.cpp @@ -227,12 +227,10 @@ RenderStats::RenderStats() { has_profiling = false; } -void RenderStats::collect_profiling(Scene *scene, Stats *stats) +void RenderStats::collect_profiling(Scene *scene, Profiler& prof) { has_profiling = true; - Profiler &prof = stats->profiler; - kernel = NamedNestedSampleStats("Total render time", prof.get_event(PROFILING_UNKNOWN)); kernel.add_entry("Ray setup", prof.get_event(PROFILING_RAY_SETUP)); diff --git a/intern/cycles/render/stats.h b/intern/cycles/render/stats.h index ce0529bb8bd..33fe1f4b185 100644 --- a/intern/cycles/render/stats.h +++ b/intern/cycles/render/stats.h @@ -144,7 +144,7 @@ public: string full_report(); /* Collect kernel sampling information from Stats. */ - void collect_profiling(Scene *scene, Stats *stats); + void collect_profiling(Scene *scene, Profiler& prof); bool has_profiling; |