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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-03-12 16:22:53 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-03-12 16:22:53 +0300
commit645cc3e8710b043e214931ae4110c2d86034b946 (patch)
tree366cb98a8dd9b6562ab9ff876f507008a0cacb20 /intern
parent8ba1c3072ca9fd3b2ab3be3bffa617c2a5cf0b7b (diff)
parente3b1ae9a8166ebb2e5255b5c1f93c383b87a7024 (diff)
Merge branch 'blender2.7'
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/device/opencl/opencl.h2
-rw-r--r--intern/cycles/device/opencl/opencl_split.cpp44
-rw-r--r--intern/cycles/kernel/geom/geom_primitive.h5
-rw-r--r--intern/cycles/render/session.cpp5
4 files changed, 42 insertions, 14 deletions
diff --git a/intern/cycles/device/opencl/opencl.h b/intern/cycles/device/opencl/opencl.h
index 4ecf71e116e..2a4e07419ac 100644
--- a/intern/cycles/device/opencl/opencl.h
+++ b/intern/cycles/device/opencl/opencl.h
@@ -374,6 +374,8 @@ public:
/* Get the program file name to compile (*.cl) for the given kernel */
const string get_opencl_program_filename(const string& kernel_name);
string get_build_options(const DeviceRequestedFeatures& requested_features, const string& opencl_program_name);
+ /* Enable the default features to reduce recompilation events */
+ void enable_default_features(DeviceRequestedFeatures& features);
void mem_alloc(device_memory& mem);
void mem_copy_to(device_memory& mem);
diff --git a/intern/cycles/device/opencl/opencl_split.cpp b/intern/cycles/device/opencl/opencl_split.cpp
index b575b008fe0..422813c2e07 100644
--- a/intern/cycles/device/opencl/opencl_split.cpp
+++ b/intern/cycles/device/opencl/opencl_split.cpp
@@ -73,6 +73,25 @@ const string OpenCLDevice::get_opencl_program_filename(const string& kernel_name
}
}
+/* Enable features that we always want to compile to reduce recompilation events */
+void OpenCLDevice::enable_default_features(DeviceRequestedFeatures& features)
+{
+ features.use_transparent = true;
+ features.use_shadow_tricks = true;
+ features.use_principled = true;
+ features.use_denoising = true;
+
+ if (!background)
+ {
+ features.max_nodes_group = NODE_GROUP_LEVEL_MAX;
+ features.nodes_features = NODE_FEATURE_ALL;
+ features.use_hair = true;
+ features.use_subsurface = true;
+ features.use_camera_motion = false;
+ features.use_object_motion = false;
+ }
+}
+
string OpenCLDevice::get_build_options(const DeviceRequestedFeatures& requested_features, const string& opencl_program_name)
{
/* first check for non-split kernel programs */
@@ -84,15 +103,22 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures& requested_
* displace and background are always requested.
* `__SPLIT_KERNEL__` must not be present in the compile directives for bake */
DeviceRequestedFeatures features(requested_features);
+ enable_default_features(features);
features.use_denoising = false;
features.use_object_motion = false;
features.use_camera_motion = false;
+ features.use_hair = true;
+ features.use_subsurface = true;
+ features.max_nodes_group = NODE_GROUP_LEVEL_MAX;
+ features.nodes_features = NODE_FEATURE_ALL;
+ features.use_integrator_branched = false;
return features.get_build_options();
}
else if (opencl_program_name == "displace") {
/* As displacement does not use any nodes from the Shading group (eg BSDF).
* We disable all features that are related to shading. */
DeviceRequestedFeatures features(requested_features);
+ enable_default_features(features);
features.use_denoising = false;
features.use_object_motion = false;
features.use_camera_motion = false;
@@ -104,13 +130,17 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures& requested_
features.nodes_features &= ~NODE_FEATURE_VOLUME;
features.use_denoising = false;
features.use_principled = false;
+ features.use_integrator_branched = false;
return features.get_build_options();
}
else if (opencl_program_name == "background") {
/* Background uses Background shading
* It is save to disable shadow features, subsurface and volumetric. */
DeviceRequestedFeatures features(requested_features);
+ enable_default_features(features);
features.use_baking = false;
+ features.use_object_motion = false;
+ features.use_camera_motion = false;
features.use_transparent = false;
features.use_shadow_tricks = false;
features.use_denoising = false;
@@ -120,11 +150,13 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures& requested_
features.nodes_features &= ~NODE_FEATURE_VOLUME;
features.use_subsurface = false;
features.use_volume = false;
+ features.use_shader_raytrace = false;
+ features.use_patch_evaluation = false;
+ features.use_integrator_branched = false;
return features.get_build_options();
}
string build_options = "-D__SPLIT_KERNEL__ ";
- DeviceRequestedFeatures nofeatures;
/* Set compute device build option. */
cl_device_type device_type;
OpenCLInfo::get_device_type(this->cdDevice, &device_type, &this->ciErr);
@@ -133,17 +165,16 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures& requested_
build_options += "-D__COMPUTE_DEVICE_GPU__ ";
}
+ DeviceRequestedFeatures nofeatures;
+ enable_default_features(nofeatures);
+
/* Add program specific optimized compile directives */
if (opencl_program_name == "split_do_volume" && !requested_features.use_volume) {
build_options += nofeatures.get_build_options();
}
- else if (opencl_program_name == "split_subsurface_scatter" && !requested_features.use_subsurface) {
- /* When subsurface is off, the kernel updates indexes and does not need any
- * Compile directives */
- build_options += nofeatures.get_build_options();
- }
else {
DeviceRequestedFeatures features(requested_features);
+ enable_default_features(features);
/* Always turn off baking at this point. Baking is only usefull when building the bake kernel.
* this also makes sure that the kernels that are build during baking can be reused
@@ -155,6 +186,7 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures& requested_
if (opencl_program_name == "split_bundle") {
features.max_nodes_group = 0;
features.nodes_features = 0;
+ features.use_shader_raytrace = false;
}
/* No specific settings, just add the regular ones */
diff --git a/intern/cycles/kernel/geom/geom_primitive.h b/intern/cycles/kernel/geom/geom_primitive.h
index c9b1995ee05..95d9d1050fb 100644
--- a/intern/cycles/kernel/geom/geom_primitive.h
+++ b/intern/cycles/kernel/geom/geom_primitive.h
@@ -219,9 +219,8 @@ ccl_device_inline float3 primitive_uv(KernelGlobals *kg, ShaderData *sd)
if(desc.offset == ATTR_STD_NOT_FOUND)
return make_float3(0.0f, 0.0f, 0.0f);
- float3 uv = primitive_surface_attribute_float3(kg, sd, desc, NULL, NULL);
- uv.z = 1.0f;
- return uv;
+ float2 uv = primitive_surface_attribute_float2(kg, sd, desc, NULL, NULL);
+ return make_float3(uv.x, uv.y, 1.0f);
}
/* Ptex coordinates */
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 10bfbe42303..866832333eb 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -658,11 +658,6 @@ DeviceRequestedFeatures Session::get_requested_device_features()
scene->shader_manager->get_requested_features(
scene,
&requested_features);
- if(!params.background) {
- /* Avoid too much re-compilations for viewport render. */
- requested_features.max_nodes_group = NODE_GROUP_LEVEL_MAX;
- requested_features.nodes_features = NODE_FEATURE_ALL;
- }
/* This features are not being tweaked as often as shaders,
* so could be done selective magic for the viewport as well.