Cycles: OpenCL Separate Compilation Debug Flag

OpenCL Parallel compilation only works inside Blender. When using cycles in a different setup (standaline or other software) it failed compiling kernels as they don't have the appropriate Python API and command line arguments.

This change introduces a `running_inside_blender` debug flag, that triggers out of process compilation of the kernels. Compilation still happens in subthread that enabled the preview kernels and compilation of the kernels during BVH building

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D5439
This commit is contained in:
Jeroen Bakker 2019-08-29 12:32:27 +02:00
parent 040d075f17
commit b9ed30c25c
6 changed files with 13 additions and 8 deletions

View File

@ -68,7 +68,7 @@ set(ADDON_FILES
add_definitions(${GL_DEFINITIONS})
if(WITH_CYCLES_DEVICE_OPENCL)
add_definitions(-DWITH_OPENCL)
add_definitions(-DWITH_OPENCL)
endif()
if(WITH_CYCLES_NETWORK)

View File

@ -177,6 +177,8 @@ static PyObject *init_func(PyObject * /*self*/, PyObject *args)
BlenderSession::headless = headless;
DebugFlags().running_inside_blender = true;
VLOG(2) << "Debug flags initialized to:\n" << DebugFlags();
Py_RETURN_NONE;

View File

@ -676,7 +676,7 @@ OpenCLDevice::OpenCLDevice(DeviceInfo &info, Stats &stats, Profiler &profiler, b
device_initialized = true;
split_kernel = new OpenCLSplitKernel(this);
if (!background) {
if (use_preview_kernels) {
load_preview_kernels();
}
}

View File

@ -619,15 +619,16 @@ void OpenCLDevice::OpenCLProgram::compile()
debug_src = &clsrc;
}
/* If binary kernel exists already, try use it. */
if (compile_separate(clbin)) {
if (DebugFlags().running_inside_blender && compile_separate(clbin)) {
add_log(string("Built and loaded program from ") + clbin + ".", true);
loaded = true;
}
else {
add_log(string("Separate-process building of ") + clbin +
" failed, will fall back to regular building.",
true);
if (DebugFlags().running_inside_blender) {
add_log(string("Separate-process building of ") + clbin +
" failed, will fall back to regular building.",
true);
}
/* If does not exist or loading binary failed, compile kernel. */
if (!compile_kernel(debug_src)) {

View File

@ -120,7 +120,7 @@ void DebugFlags::OpenCL::reset()
debug = (getenv("CYCLES_OPENCL_DEBUG") != NULL);
}
DebugFlags::DebugFlags() : viewport_static_bvh(false)
DebugFlags::DebugFlags() : viewport_static_bvh(false), running_inside_blender(false)
{
/* Nothing for now. */
}

View File

@ -33,6 +33,8 @@ class DebugFlags {
/* Use static BVH in viewport, to match final render exactly. */
bool viewport_static_bvh;
bool running_inside_blender;
/* Descriptor of CPU feature-set to be used. */
struct CPU {
CPU();