[Bf-blender-cvs] [d8a86e7fd1c] temp-cycles-denoising: Cycles Denoising: Copy back the denoised tile buffer when using Multi-GPU rendering
Lukas Stockner
noreply at git.blender.org
Mon Mar 27 18:49:35 CEST 2017
Commit: d8a86e7fd1ce284a9b1d3b0c211c0c025103ff90
Author: Lukas Stockner
Date: Mon Mar 27 18:49:02 2017 +0200
Branches: temp-cycles-denoising
https://developer.blender.org/rBd8a86e7fd1ce284a9b1d3b0c211c0c025103ff90
Cycles Denoising: Copy back the denoised tile buffer when using Multi-GPU rendering
===================================================================
M intern/cycles/device/device_multi.cpp
M intern/cycles/render/buffers.cpp
M intern/cycles/render/buffers.h
===================================================================
diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp
index cf1692eb93d..15826a5ef71 100644
--- a/intern/cycles/device/device_multi.cpp
+++ b/intern/cycles/device/device_multi.cpp
@@ -333,8 +333,19 @@ public:
device_ptr original_ptr = mem.device_pointer;
mem.device_pointer = tiles[i].buffer;
+
+ /* Copy denoised tile to the host device. */
+ if(i == 4) {
+ tiles[i].buffers->copy_from_device(sub_device);
+ }
+
sub_device->mem_free(mem);
mem.device_pointer = original_ptr;
+
+ /* Copy denoised tile to the original device. */
+ if(i == 4) {
+ sub_device->mem_copy_to(mem);
+ }
}
}
}
diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp
index 67461cccf04..b65679f5d5d 100644
--- a/intern/cycles/render/buffers.cpp
+++ b/intern/cycles/render/buffers.cpp
@@ -160,12 +160,16 @@ void RenderBuffers::reset(Device *device, BufferParams& params_)
device->mem_alloc("rng_state", rng_state, MEM_READ_WRITE);
}
-bool RenderBuffers::copy_from_device()
+bool RenderBuffers::copy_from_device(Device *from_device)
{
+ if(!from_device) {
+ from_device = device;
+ }
+
if(!buffer.device_pointer)
return false;
- device->mem_copy_from(buffer, 0, params.width, params.height, params.get_passes_size()*sizeof(float));
+ from_device->mem_copy_from(buffer, 0, params.width, params.height, params.get_passes_size()*sizeof(float));
return true;
}
diff --git a/intern/cycles/render/buffers.h b/intern/cycles/render/buffers.h
index 767014a6fa1..71e8a47598e 100644
--- a/intern/cycles/render/buffers.h
+++ b/intern/cycles/render/buffers.h
@@ -86,7 +86,7 @@ public:
void reset(Device *device, BufferParams& params);
- bool copy_from_device();
+ bool copy_from_device(Device *from_device = NULL);
bool get_pass_rect(PassType type, float exposure, int sample, int components, float *pixels);
protected:
More information about the Bf-blender-cvs
mailing list