Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2019-02-26 16:05:54 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2019-02-26 16:06:25 +0300
commitdabe5cd31add8aa55b9ad4bce1b591ed4e98f1a1 (patch)
tree4fc440f527b6bedd563e61b5e4a16c2e0280be36 /intern/cycles/device/opencl/opencl_split.cpp
parente6099c7e46f6ca90dff3dc62d06db7fcb276e790 (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.cpp19
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"));
}