diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-05-22 23:49:02 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-05-22 23:49:02 +0300 |
commit | 44f91a9a18d6d942d958e7640f4d1c301d230150 (patch) | |
tree | e7e97a57a920f02e87b7539740590a5058f7614e /intern | |
parent | 6cc293a6d97a2f8277660613a1ced9b2688bd7c0 (diff) | |
parent | 9b2923380092c7e3c771d354f8938c5ca20bfd9d (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.cpp | 3 | ||||
-rw-r--r-- | intern/cycles/device/device_cuda.cpp | 17 | ||||
-rw-r--r-- | intern/cycles/device/opencl/opencl_base.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/filter/filter_reconstruction.h | 11 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_passes.h | 5 | ||||
-rw-r--r-- | intern/cycles/render/shader.cpp | 5 | ||||
-rw-r--r-- | intern/cycles/util/util_guarded_allocator.h | 2 |
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; } |