[Bf-blender-cvs] [c6c6d20b15b] cycles-x: Cycles X: Fix crash using CPU and OptiX denoiser in viewport
Sergey Sharybin
noreply at git.blender.org
Tue Jun 29 14:48:28 CEST 2021
Commit: c6c6d20b15b84397ee1bc7a845e29d37f0c0eee4
Author: Sergey Sharybin
Date: Tue Jun 29 14:16:26 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBc6c6d20b15b84397ee1bc7a845e29d37f0c0eee4
Cycles X: Fix crash using CPU and OptiX denoiser in viewport
Not sure why it is only visible now, there was a buffer overrun since
the initial CPU Render + OptiX denoise support commit by the looks of
it.
There now seems to be a synchronization issue between queues, leading
to only partial buffer update in the viewport. Investigating this now.
===================================================================
M intern/cycles/integrator/denoiser_device.cpp
===================================================================
diff --git a/intern/cycles/integrator/denoiser_device.cpp b/intern/cycles/integrator/denoiser_device.cpp
index dec5b69e9a1..e13cf467204 100644
--- a/intern/cycles/integrator/denoiser_device.cpp
+++ b/intern/cycles/integrator/denoiser_device.cpp
@@ -198,9 +198,12 @@ void DeviceDenoiser::denoise_buffer_on_device(Device *device,
/* TODO(sergey): Avoid `zero_to_device()`. */
local_render_buffers.reset(buffer_params);
+ /* NOTE: The local buffer is allocated for an exact size of the effective render size, while
+ * the input render buffer is allcoated for the lowest resolution divider possible. So it is
+ * important to only copy actually needed part of the input buffer. */
memcpy(local_render_buffers.buffer.data(),
render_buffers->buffer.data(),
- sizeof(float) * render_buffers->buffer.size());
+ sizeof(float) * local_render_buffers.buffer.size());
local_render_buffers.copy_to_device();
task.render_buffers = &local_render_buffers;
@@ -213,7 +216,7 @@ void DeviceDenoiser::denoise_buffer_on_device(Device *device,
local_render_buffers.copy_from_device();
memcpy(render_buffers->buffer.data(),
local_render_buffers.buffer.data(),
- sizeof(float) * render_buffers->buffer.size());
+ sizeof(float) * local_render_buffers.buffer.size());
render_buffers->copy_to_device();
}
}
More information about the Bf-blender-cvs
mailing list