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:
authorBastien Montagne <montagne29@wanadoo.fr>2017-05-22 23:49:02 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2017-05-22 23:49:02 +0300
commit44f91a9a18d6d942d958e7640f4d1c301d230150 (patch)
treee7e97a57a920f02e87b7539740590a5058f7614e /intern
parent6cc293a6d97a2f8277660613a1ced9b2688bd7c0 (diff)
parent9b2923380092c7e3c771d354f8938c5ca20bfd9d (diff)
Merge branch 'master' into blender2.8
Conflicts: source/blender/blenloader/intern/versioning_270.c
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/device/device_cpu.cpp3
-rw-r--r--intern/cycles/device/device_cuda.cpp17
-rw-r--r--intern/cycles/device/opencl/opencl_base.cpp4
-rw-r--r--intern/cycles/kernel/filter/filter_reconstruction.h11
-rw-r--r--intern/cycles/kernel/kernel_passes.h5
-rw-r--r--intern/cycles/render/shader.cpp5
-rw-r--r--intern/cycles/util/util_guarded_allocator.h2
7 files changed, 32 insertions, 15 deletions
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index fea55049049..c2f74aa8903 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -532,9 +532,8 @@ public:
bool denoising_combine_halves(device_ptr a_ptr, device_ptr b_ptr,
device_ptr mean_ptr, device_ptr variance_ptr,
- int r, int4 rect, DenoisingTask *task)
+ int r, int4 rect, DenoisingTask * /*task*/)
{
- (void) task;
for(int y = rect.y; y < rect.w; y++) {
for(int x = rect.x; x < rect.z; x++) {
filter_combine_halves_kernel()(x, y,
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 07fb964b0c6..caa56c012d8 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -225,6 +225,9 @@ public:
cuDevice = 0;
cuContext = 0;
+ cuModule = 0;
+ cuFilterModule = 0;
+
split_kernel = NULL;
need_bindless_mapping = false;
@@ -487,6 +490,16 @@ public:
bool load_kernels(const DeviceRequestedFeatures& requested_features)
{
+ /* TODO(sergey): Support kernels re-load for CUDA devices.
+ *
+ * Currently re-loading kernel will invalidate memory pointers,
+ * causing problems in cuCtxSynchronize.
+ */
+ if(cuFilterModule && cuModule) {
+ VLOG(1) << "Skipping kernel reload, not currently supported.";
+ return true;
+ }
+
/* check if cuda init succeeded */
if(cuContext == 0)
return false;
@@ -1148,8 +1161,6 @@ public:
device_ptr mean_ptr, device_ptr variance_ptr,
int r, int4 rect, DenoisingTask *task)
{
- (void) task;
-
if(have_error())
return false;
@@ -1179,8 +1190,6 @@ public:
device_ptr sample_variance_ptr, device_ptr sv_variance_ptr,
device_ptr buffer_variance_ptr, DenoisingTask *task)
{
- (void) task;
-
if(have_error())
return false;
diff --git a/intern/cycles/device/opencl/opencl_base.cpp b/intern/cycles/device/opencl/opencl_base.cpp
index 8f33014a00e..24b70e3446c 100644
--- a/intern/cycles/device/opencl/opencl_base.cpp
+++ b/intern/cycles/device/opencl/opencl_base.cpp
@@ -817,8 +817,6 @@ bool OpenCLDeviceBase::denoising_combine_halves(device_ptr a_ptr,
int r, int4 rect,
DenoisingTask *task)
{
- (void) task;
-
cl_mem a_mem = CL_MEM_PTR(a_ptr);
cl_mem b_mem = CL_MEM_PTR(b_ptr);
cl_mem mean_mem = CL_MEM_PTR(mean_ptr);
@@ -847,8 +845,6 @@ bool OpenCLDeviceBase::denoising_divide_shadow(device_ptr a_ptr,
device_ptr buffer_variance_ptr,
DenoisingTask *task)
{
- (void) task;
-
cl_mem a_mem = CL_MEM_PTR(a_ptr);
cl_mem b_mem = CL_MEM_PTR(b_ptr);
cl_mem sample_variance_mem = CL_MEM_PTR(sample_variance_ptr);
diff --git a/intern/cycles/kernel/filter/filter_reconstruction.h b/intern/cycles/kernel/filter/filter_reconstruction.h
index dc90f318570..4a4c81b7ba3 100644
--- a/intern/cycles/kernel/filter/filter_reconstruction.h
+++ b/intern/cycles/kernel/filter/filter_reconstruction.h
@@ -55,9 +55,14 @@ ccl_device_inline void kernel_filter_construct_gramian(int x, int y,
float q_std_dev = sqrtf(filter_get_pixel_variance(variance_pass + q_offset, pass_stride));
/* If the pixel was flagged as an outlier during prefiltering, skip it.
- * Otherwise, perform the regular confidence interval test. */
- if(ccl_get_feature(buffer + q_offset, 0) < 0.0f ||
- average(fabs(p_color - q_color)) > 2.0f*(p_std_dev + q_std_dev + 1e-3f)) {
+ * Otherwise, perform the regular confidence interval test unless
+ * the center pixel is an outlier (in that case, using the confidence
+ * interval test could result in no pixels being used at all). */
+ bool p_outlier = (ccl_get_feature(buffer + p_offset, 0) < 0.0f);
+ bool q_outlier = (ccl_get_feature(buffer + q_offset, 0) < 0.0f);
+ bool outside_of_interval = (average(fabs(p_color - q_color)) > 2.0f*(p_std_dev + q_std_dev + 1e-3f));
+
+ if(q_outlier || (!p_outlier && outside_of_interval)) {
return;
}
diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h
index c5206940493..9d52834ffcc 100644
--- a/intern/cycles/kernel/kernel_passes.h
+++ b/intern/cycles/kernel/kernel_passes.h
@@ -152,6 +152,11 @@ ccl_device_inline void kernel_update_denoising_features(KernelGlobals *kg,
L->denoising_depth += ensure_finite(state->denoising_feature_weight * sd->ray_length);
+ /* Skip implicitly transparent surfaces. */
+ if(sd->flag & SD_HAS_ONLY_VOLUME) {
+ return;
+ }
+
float3 normal = make_float3(0.0f, 0.0f, 0.0f);
float3 albedo = make_float3(0.0f, 0.0f, 0.0f);
float sum_weight = 0.0f, sum_nonspecular_weight = 0.0f;
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index a64f227a38c..50400edd5ca 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -335,11 +335,14 @@ ShaderManager *ShaderManager::create(Scene *scene, int shadingsystem)
(void)shadingsystem; /* Ignored when built without OSL. */
#ifdef WITH_OSL
- if(shadingsystem == SHADINGSYSTEM_OSL)
+ if(shadingsystem == SHADINGSYSTEM_OSL) {
manager = new OSLShaderManager();
+ }
else
#endif
+ {
manager = new SVMShaderManager();
+ }
add_default(scene);
diff --git a/intern/cycles/util/util_guarded_allocator.h b/intern/cycles/util/util_guarded_allocator.h
index 5f9dcfb2481..1abcabd5294 100644
--- a/intern/cycles/util/util_guarded_allocator.h
+++ b/intern/cycles/util/util_guarded_allocator.h
@@ -50,9 +50,9 @@ public:
T *allocate(size_t n, const void *hint = 0)
{
+ (void)hint;
size_t size = n * sizeof(T);
util_guarded_mem_alloc(size);
- (void)hint;
if(n == 0) {
return NULL;
}