From 2f6257fd7fe305e3b226a8b505eb614bbeaf762a Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Wed, 13 Mar 2019 12:31:48 +0100 Subject: Cycles/OpenCL: Compile Kernels During Scene Update The main goals of this change is faster starting when using foreground rendering. This patch will build kernels in parallel to the update process of the scene. When these optimized kernels are not available (yet) an AO kernel will be used. These AO kernels are fast to compile (3-7 seconds) and can be reused by all scenes. When the final kernels become available we will switch to these kernels. In background mode the AO kernels will not be used. Some kernels are being used during Scene update (displace, background light). When these kernels are being used the process can halt until these become available. Reviewed By: brecht, #cycles Maniphest Tasks: T61752 Differential Revision: https://developer.blender.org/D4428 --- intern/cycles/blender/blender_session.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'intern/cycles/blender/blender_session.cpp') diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index ab08b9e146d..27541800804 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -933,6 +933,11 @@ void BlenderSession::get_status(string& status, string& substatus) session->progress.get_status(status, substatus); } +void BlenderSession::get_kernel_status(string& kernel_status) +{ + session->progress.get_kernel_status(kernel_status); +} + void BlenderSession::get_progress(float& progress, double& total_time, double& render_time) { session->progress.get_time(total_time, render_time); @@ -951,7 +956,7 @@ void BlenderSession::update_bake_progress() void BlenderSession::update_status_progress() { - string timestatus, status, substatus; + string timestatus, status, substatus, kernel_status; string scene = ""; float progress; double total_time, remaining_time = 0, render_time; @@ -960,6 +965,7 @@ void BlenderSession::update_status_progress() float mem_peak = (float)session->stats.mem_peak / 1024.0f / 1024.0f; get_status(status, substatus); + get_kernel_status(kernel_status); get_progress(progress, total_time, render_time); if(progress > 0) @@ -989,6 +995,8 @@ void BlenderSession::update_status_progress() status = " | " + status; if(substatus.size() > 0) status += " | " + substatus; + if(kernel_status.size() > 0) + status += " | " + kernel_status; double current_time = time_dt(); /* When rendering in a window, redraw the status at least once per second to keep the elapsed and remaining time up-to-date. -- cgit v1.2.3