[Bf-blender-cvs] [e1f5b6bdcb2] temp-cycles-denoising: Cycles Denoising: Merge all the changes from the version that's being reviewed

Lukas Stockner noreply at git.blender.org
Wed Apr 26 19:32:11 CEST 2017


Commit: e1f5b6bdcb20f5a58b1049761aa07971d2c69346
Author: Lukas Stockner
Date:   Mon Apr 24 22:15:09 2017 +0200
Branches: temp-cycles-denoising
https://developer.blender.org/rBe1f5b6bdcb20f5a58b1049761aa07971d2c69346

Cycles Denoising: Merge all the changes from the version that's being reviewed

No functional changes.

===================================================================

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/device/device.cpp
M	intern/cycles/device/device.h
M	intern/cycles/device/device_cpu.cpp
M	intern/cycles/device/device_cuda.cpp
M	intern/cycles/device/device_denoising.cpp
M	intern/cycles/device/device_memory.h
M	intern/cycles/device/device_multi.cpp
M	intern/cycles/device/device_task.h
M	intern/cycles/device/opencl/opencl.h
M	intern/cycles/device/opencl/opencl_base.cpp
M	intern/cycles/device/opencl/opencl_mega.cpp
M	intern/cycles/device/opencl/opencl_split.cpp
M	intern/cycles/device/opencl/opencl_util.cpp
M	intern/cycles/kernel/closure/bsdf.h
D	intern/cycles/kernel/closure/bssrdf.h.orig
M	intern/cycles/kernel/filter/filter_defines.h
M	intern/cycles/kernel/filter/filter_features.h
M	intern/cycles/kernel/filter/filter_features_sse.h
M	intern/cycles/kernel/filter/filter_nlm_cpu.h
M	intern/cycles/kernel/filter/filter_nlm_gpu.h
M	intern/cycles/kernel/filter/filter_prefilter.h
M	intern/cycles/kernel/filter/filter_reconstruction.h
M	intern/cycles/kernel/filter/filter_transform.h
M	intern/cycles/kernel/filter/filter_transform_gpu.h
M	intern/cycles/kernel/filter/filter_transform_sse.h
M	intern/cycles/kernel/kernel_compat_cpu.h
M	intern/cycles/kernel/kernel_compat_cuda.h
M	intern/cycles/kernel/kernel_compat_opencl.h
M	intern/cycles/kernel/kernel_passes.h
M	intern/cycles/kernel/kernel_path.h
M	intern/cycles/kernel/kernel_path_branched.h
M	intern/cycles/kernel/kernel_path_surface.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/kernel/kernels/cuda/filter.cu
M	intern/cycles/kernel/kernels/opencl/filter.cl
D	intern/cycles/kernel/split/kernel_holdout_emission_blurring_pathtermination_ao.h.orig
D	intern/cycles/kernel/svm/svm_types.h.orig
M	intern/cycles/render/buffers.cpp
M	intern/cycles/render/film.cpp
M	intern/cycles/render/film.h
M	intern/cycles/render/session.cpp
M	intern/cycles/render/session.h
M	intern/cycles/render/tile.cpp
M	intern/cycles/render/tile.h
M	intern/cycles/test/CMakeLists.txt
D	intern/cycles/util/util_cuda.h
M	intern/cycles/util/util_math_matrix.h
M	intern/cycles/util/util_types.h
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/makesdna/DNA_scene_types.h

===================================================================

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 3ed005a2919..de7e9de6a78 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -519,13 +519,9 @@ void BlenderSession::render()
 		scene->film->denoising_clean_pass = (scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES);
 		buffer_params.denoising_clean_pass = scene->film->denoising_clean_pass;
 		session->params.denoising_radius = b_layer_iter->denoising_radius();
-		session->params.denoising_k2 = powf(2.0f, b_layer_iter->denoising_strength() - 1.0f);
-		if(b_layer_iter->denoising_relative_pca()) {
-			session->params.denoising_pca = -powf(10.0f, b_layer_iter->denoising_feature_strength() - 4.0f);
-		}
-		else {
-			session->params.denoising_pca = powf(10.0f, b_layer_iter->denoising_feature_strength() - 1.0f);
-		}
+		session->params.denoising_strength = b_layer_iter->denoising_strength();
+		session->params.denoising_feature_strength = b_layer_iter->denoising_feature_strength();
+		session->params.denoising_relative_pca = b_layer_iter->denoising_relative_pca();
 
 		scene->film->pass_alpha_threshold = b_layer_iter->pass_alpha_threshold();
 		scene->film->tag_passes_update(scene, passes);
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp
index 9c37e3fa5cb..7688505a119 100644
--- a/intern/cycles/device/device.cpp
+++ b/intern/cycles/device/device.cpp
@@ -401,15 +401,15 @@ void Device::free_memory()
 }
 
 
-offset_ptr::offset_ptr(Device *device, device_memory& mem, int offset, int size, MemoryType type)
+device_sub_ptr::device_sub_ptr(Device *device, device_memory& mem, int offset, int size, MemoryType type)
  : device(device)
 {
-	ptr = device->mem_get_offset_ptr(mem, offset, size, type);
+	ptr = device->mem_alloc_sub_ptr(mem, offset, size, type);
 }
 
-offset_ptr::~offset_ptr()
+device_sub_ptr::~device_sub_ptr()
 {
-	device->mem_free_offset_ptr(ptr);
+	device->mem_free_sub_ptr(ptr);
 }
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index cc929bedfa6..604dcd9fd53 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -220,6 +220,7 @@ struct DeviceDrawParams {
 };
 
 class Device {
+	friend class device_sub_ptr;
 protected:
 	Device(DeviceInfo& info_, Stats &stats_, bool background) : background(background), vertex_buffer(0), info(info_), stats(stats_) {}
 
@@ -229,6 +230,14 @@ protected:
 	/* used for real time display */
 	unsigned int vertex_buffer;
 
+	virtual device_ptr mem_alloc_sub_ptr(device_memory& /*mem*/, int /*offset*/, int /*size*/, MemoryType /*type*/)
+	{
+		/* Only required for devices that implement denoising. */
+		assert(false);
+		return (device_ptr) 0;
+	}
+	virtual void mem_free_sub_ptr(device_ptr /*ptr*/) {};
+
 public:
 	virtual ~Device();
 
@@ -257,14 +266,7 @@ public:
 	virtual void mem_zero(device_memory& mem) = 0;
 	virtual void mem_free(device_memory& mem) = 0;
 
-	virtual int mem_get_offset_alignment() { return 1; }
-	virtual device_ptr mem_get_offset_ptr(device_memory& /*mem*/, int /*offset*/, int /*size*/, MemoryType /*type*/)
-	{
-		/* Only required for devices that implement denoising. */
-		assert(false);
-		return (device_ptr) 0;
-	}
-	virtual void mem_free_offset_ptr(device_ptr /*ptr*/) {};
+	virtual int mem_address_alignment() { return 16; }
 
 	/* constant memory */
 	virtual void const_copy_to(const char *name, void *host, size_t size) = 0;
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index efced170434..13a12a137e1 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -308,9 +308,9 @@ public:
 		}
 	}
 
-	virtual device_ptr mem_get_offset_ptr(device_memory& mem, int offset, int /*size*/, MemoryType /*type*/)
+	virtual device_ptr mem_alloc_sub_ptr(device_memory& mem, int offset, int /*size*/, MemoryType /*type*/)
 	{
-		return (device_ptr) (((char*) mem.device_pointer) + mem.memory_num_to_bytes(offset));
+		return (device_ptr) (((char*) mem.device_pointer) + mem.memory_elements_size(offset));
 	}
 
 	void const_copy_to(const char *name, void *host, size_t size)
@@ -637,14 +637,14 @@ public:
 
 		RenderTile rtiles[9];
 		rtiles[4] = tile;
-		task.get_neighbor_tiles(rtiles, this);
+		task.map_neighbor_tiles(rtiles, this);
 		denoising.tiles_from_rendertiles(rtiles);
 
 		denoising.init_from_devicetask(task);
 
 		denoising.run_denoising();
 
-		task.release_neighbor_tiles(rtiles, this);
+		task.unmap_neighbor_tiles(rtiles, this);
 
 		task.update_progress(&tile, tile.w*tile.h);
 	}
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 151f88872d5..77b6eb4c6eb 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -603,9 +603,9 @@ public:
 		}
 	}
 
-	virtual device_ptr mem_get_offset_ptr(device_memory& mem, int offset, int /*size*/, MemoryType /*type*/)
+	virtual device_ptr mem_alloc_sub_ptr(device_memory& mem, int offset, int /*size*/, MemoryType /*type*/)
 	{
-		return (device_ptr) (((char*) mem.device_pointer) + mem.memory_num_to_bytes(offset));
+		return (device_ptr) (((char*) mem.device_pointer) + mem.memory_elements_size(offset));
 	}
 
 	void const_copy_to(const char *name, void *host, size_t size)
@@ -944,7 +944,7 @@ public:
 		cuda_push_context();
 
 		int4 rect = task->rect;
-		int w = align_up(rect.z-rect.x, 4);
+		int w = rect.z-rect.x;
 		int h = rect.w-rect.y;
 		int r = task->nlm_state.r;
 		int f = task->nlm_state.f;
@@ -1260,14 +1260,14 @@ public:
 
 		RenderTile rtiles[9];
 		rtiles[4] = rtile;
-		task.get_neighbor_tiles(rtiles, this);
+		task.map_neighbor_tiles(rtiles, this);
 		denoising.tiles_from_rendertiles(rtiles);
 
 		denoising.init_from_devicetask(task);
 
 		denoising.run_denoising();
 
-		task.release_neighbor_tiles(rtiles, this);
+		task.unmap_neighbor_tiles(rtiles, this);
 	}
 
 	void path_trace(RenderTile& rtile, int sample, bool branched)
diff --git a/intern/cycles/device/device_denoising.cpp b/intern/cycles/device/device_denoising.cpp
index deca358cd30..6e46f34c7c8 100644
--- a/intern/cycles/device/device_denoising.cpp
+++ b/intern/cycles/device/device_denoising.cpp
@@ -23,8 +23,13 @@ CCL_NAMESPACE_BEGIN
 void DenoisingTask::init_from_devicetask(const DeviceTask &task)
 {
 	radius = task.denoising_radius;
-	nlm_k_2 = task.denoising_k2;
-	pca_threshold = task.denoising_pca;
+	nlm_k_2 = powf(2.0f, task.denoising_strength - 1.0f);
+	if(task.denoising_relative_pca) {
+		pca_threshold = -powf(10.0f, task.denoising_feature_strength - 4.0f);
+	}
+	else {
+		pca_threshold = powf(10.0f, task.denoising_feature_strength - 1.0f);
+	}
 
 	render_buffer.pass_stride = task.pass_stride;
 	render_buffer.denoising_data_offset  = task.pass_denoising_data;
@@ -69,7 +74,7 @@ bool DenoisingTask::run_denoising()
 	buffer.passes = 14;
 	buffer.w = align_up(rect.z - rect.x, 4);
 	buffer.h = rect.w - rect.y;
-	buffer.pass_stride = align_up(buffer.w * buffer.h, device->mem_get_offset_alignment());
+	buffer.pass_stride = align_up(buffer.w * buffer.h, divide_up(device->mem_address_alignment(), sizeof(float)));
 	buffer.mem.resize(buffer.pass_stride * buffer.passes);
 	device->mem_alloc("Denoising Pixel Buffer", buffer.mem, MEM_READ_WRITE);
 
@@ -77,15 +82,15 @@ bool DenoisingTask::run_denoising()
 
 	/* Prefilter shadow feature. */
 	{
-		offset_ptr unfiltered_a   (device, buffer.mem, 0,                    buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr unfiltered_b   (device, buffer.mem, 1*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr sample_var     (device, buffer.mem, 2*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr sample_var_var (device, buffer.mem, 3*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr buffer_var     (device, buffer.mem, 5*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr filtered_var   (device, buffer.mem, 6*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr nlm_temporary_1(device, buffer.mem, 7*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr nlm_temporary_2(device, buffer.mem, 8*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr nlm_temporary_3(device, buffer.mem, 9*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr unfiltered_a   (device, buffer.mem, 0,                    buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr unfiltered_b   (device, buffer.mem, 1*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr sample_var     (device, buffer.mem, 2*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr sample_var_var (device, buffer.mem, 3*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr buffer_var     (device, buffer.mem, 5*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr filtered_var   (device, buffer.mem, 6*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr nlm_temporary_1(device, buffer.mem, 7*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr nlm_temporary_2(device, buffer.mem, 8*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr nlm_temporary_3(device, buffer.mem, 9*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
 
 		nlm_state.temporary_1_ptr = *nlm_temporary_1;
 		nlm_state.temporary_2_ptr = *nlm_temporary_2;
@@ -118,17 +123,17 @@ bool DenoisingTask::run_denoising()
 		functions.non_local_means(filtered_b, filtered_a, residual_var, final_b);
 
 		/* Combine the two double-filtered halves to a final shadow feature. */
-		offset_ptr shadow_pass(device, buffer.mem, 4*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
+		device_sub_ptr shadow_pass(device, buffer.mem, 4*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
 		functions.combine_halves(final_a, final_b, *shadow_pass, null_ptr, 0, rect);
 	}
 
 	/* Prefilter general features. */
 	{
-		offset_ptr unfiltered     (device, buffer.mem,  8*buffer.pass_stride, buffer.pass_stride, MEM_READ_WRITE);
-		offset_ptr variance       (device, b

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list