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
path: root/intern
diff options
context:
space:
mode:
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/device/device.cpp4
-rw-r--r--intern/cycles/device/device.h12
-rw-r--r--intern/cycles/device/opencl/opencl_split.cpp19
-rw-r--r--intern/cycles/render/session.cpp4
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);