[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