diff options
-rw-r--r-- | intern/cycles/device/device.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/device/device.h | 12 | ||||
-rw-r--r-- | intern/cycles/device/opencl/opencl_split.cpp | 19 | ||||
-rw-r--r-- | intern/cycles/render/session.cpp | 4 |
4 files changed, 32 insertions, 7 deletions
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp index 327ba8e2a59..55ba62e5967 100644 --- a/intern/cycles/device/device.cpp +++ b/intern/cycles/device/device.cpp @@ -74,6 +74,10 @@ std::ostream& operator <<(std::ostream &os, << string_from_bool(requested_features.use_principled) << std::endl; os << "Use Denoising: " << string_from_bool(requested_features.use_denoising) << std::endl; + os << "Use Displacement: " + << string_from_bool(requested_features.use_true_displacement) << std::endl; + os << "Use Background Light: " + << string_from_bool(requested_features.use_background_light) << std::endl; return os; } diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h index 082f9f758a8..3bf978600d5 100644 --- a/intern/cycles/device/device.h +++ b/intern/cycles/device/device.h @@ -149,6 +149,12 @@ public: /* Use raytracing in shaders. */ bool use_shader_raytrace; + /* Use true displacement */ + bool use_true_displacement; + + /* Use background lights */ + bool use_background_light; + DeviceRequestedFeatures() { /* TODO(sergey): Find more meaningful defaults. */ @@ -168,6 +174,8 @@ public: use_principled = false; use_denoising = false; use_shader_raytrace = false; + use_true_displacement = false; + use_background_light = false; } bool modified(const DeviceRequestedFeatures& requested_features) @@ -187,7 +195,9 @@ public: use_shadow_tricks == requested_features.use_shadow_tricks && use_principled == requested_features.use_principled && use_denoising == requested_features.use_denoising && - use_shader_raytrace == requested_features.use_shader_raytrace); + use_shader_raytrace == requested_features.use_shader_raytrace && + use_true_displacement == requested_features.use_true_displacement && + use_background_light == requested_features.use_background_light); } /* Convert the requested features structure to a build options, 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")); } diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index 69969987352..87c46ec44c8 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -22,6 +22,7 @@ #include "device/device.h" #include "render/graph.h" #include "render/integrator.h" +#include "render/light.h" #include "render/mesh.h" #include "render/object.h" #include "render/scene.h" @@ -687,8 +688,11 @@ DeviceRequestedFeatures Session::get_requested_device_features() if(object->is_shadow_catcher) { requested_features.use_shadow_tricks = true; } + requested_features.use_true_displacement |= mesh->has_true_displacement(); } + requested_features.use_background_light = scene->light_manager->has_background_light(scene); + BakeManager *bake_manager = scene->bake_manager; requested_features.use_baking = bake_manager->get_baking(); requested_features.use_integrator_branched = (scene->integrator->method == Integrator::BRANCHED_PATH); |