diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2019-02-26 16:05:54 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2019-02-26 16:06:25 +0300 |
commit | dabe5cd31add8aa55b9ad4bce1b591ed4e98f1a1 (patch) | |
tree | 4fc440f527b6bedd563e61b5e4a16c2e0280be36 /intern/cycles/device/opencl/opencl_split.cpp | |
parent | e6099c7e46f6ca90dff3dc62d06db7fcb276e790 (diff) |
T61971: Compilation Displacement/Background Kernel
Displacement and Background kernels are selectively used, but always compiled. This patch will not compile these kernels when they are not needed.
Displacement kernel is only used for true displacement.
Background kernel is only used when there is a (Cycles)Light of type `LIGHT_BACKGROUND`.
Reviewed By: brecht, #cycles
Tags: #cycles
Maniphest Tasks: T61971
Differential Revision: https://developer.blender.org/D4412
Diffstat (limited to 'intern/cycles/device/opencl/opencl_split.cpp')
-rw-r--r-- | intern/cycles/device/opencl/opencl_split.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/intern/cycles/device/opencl/opencl_split.cpp b/intern/cycles/device/opencl/opencl_split.cpp index 0b60c498bfc..2880de62662 100644 --- a/intern/cycles/device/opencl/opencl_split.cpp +++ b/intern/cycles/device/opencl/opencl_split.cpp @@ -650,13 +650,18 @@ bool OpenCLDevice::load_kernels(const DeviceRequestedFeatures& requested_feature return false; vector<OpenCLProgram*> programs; - displace_program = OpenCLProgram(this, "displace", "kernel_displace.cl", get_build_options(requested_features, "displace")); - displace_program.add_kernel(ustring("displace")); - programs.push_back(&displace_program); - background_program = OpenCLProgram(this, "background", "kernel_background.cl", get_build_options(requested_features, "background")); - background_program.add_kernel(ustring("background")); - programs.push_back(&background_program); + if (requested_features.use_true_displacement) { + displace_program = OpenCLProgram(this, "displace", "kernel_displace.cl", get_build_options(requested_features, "displace")); + displace_program.add_kernel(ustring("displace")); + programs.push_back(&displace_program); + } + + if (requested_features.use_background_light) { + background_program = OpenCLProgram(this, "background", "kernel_background.cl", get_build_options(requested_features, "background")); + background_program.add_kernel(ustring("background")); + programs.push_back(&background_program); + } bool single_program = OpenCLInfo::use_single_program(); @@ -1719,9 +1724,11 @@ void OpenCLDevice::shader(DeviceTask& task) kernel = bake_program(ustring("bake")); } else if(task.shader_eval_type == SHADER_EVAL_DISPLACE) { + assert(displace_program); kernel = displace_program(ustring("displace")); } else { + assert(background_program); kernel = background_program(ustring("background")); } |